Thu, 04 Jun 2015 14:50:33 +0200
Genesis of lecture sources for Droidcon Berlin 2015 in Postbahnhof.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/Touchgui/.gitignore Thu Jun 04 14:50:33 2015 +0200 1.3 @@ -0,0 +1,1 @@ 1.4 +.DS_Store
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/Touchgui/README.md Thu Jun 04 14:50:33 2015 +0200 2.3 @@ -0,0 +1,64 @@ 2.4 +Touch Notifier Companion App 2.5 +============================ 2.6 +The Touch Notifier Companion App is a simple app that receives data wirelessly and notifies a user if the Touch Sensor (https://software.intel.com/en-us/iot/sensor/grove-buzzer) is being touched. The Touch Notifier node.js/IoT project sends this data to a connected client when running on a IoT platform such as a development board with the sensor connected. This sensor is included in the Grove Starter Kit Plus - Intel® IoT Edition. For more information, go to https://software.intel.com/en-us/iot/devkit. 2.7 + 2.8 +Intel(R) XDK 2.9 +------------------------------------------- 2.10 +This sample is part of the Intel(R) XDK IoT Edition. 2.11 +Download the Intel(R) XDK IoT Edition at https://software.intel.com/en-us/html5/xdk-iot. To see the technical details of the sample, 2.12 +please visit the sample article page at http://software.intel.com/en-us/html5/articles/iot-touch-notifier-nodejs-&-companion. 2.13 + 2.14 + 2.15 +Important App Files 2.16 +--------------------------- 2.17 +* index.html 2.18 +* icon.png 2.19 +* screenshot.png 2.20 +* app.json 2.21 +* README.md 2.22 +* js/* 2.23 +* app_framework/* 2.24 +* css/* 2.25 +* jquery/* 2.26 + 2.27 +License Information Follows 2.28 +--------------------------- 2.29 +Copyright (c) 2014, Intel Corporation. All rights reserved. 2.30 + 2.31 +Redistribution and use in source and binary forms, with or without modification, 2.32 +are permitted provided that the following conditions are met: 2.33 + 2.34 +- Redistributions of source code must retain the above copyright notice, 2.35 + this list of conditions and the following disclaimer. 2.36 + 2.37 +- Redistributions in binary form must reproduce the above copyright notice, 2.38 + this list of conditions and the following disclaimer in the documentation 2.39 + and/or other materials provided with the distribution. 2.40 + 2.41 +- Neither the name of Intel Corporation nor the names of its contributors 2.42 + may be used to endorse or promote products derived from this software 2.43 + without specific prior written permission. 2.44 + 2.45 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2.46 +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 2.47 +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2.48 +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2.49 +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2.50 +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 2.51 +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2.52 +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2.53 +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 2.54 +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2.55 + 2.56 + 2.57 +App Framework 2.58 +----------------------------------------------------------------------------- 2.59 +http://app-framework-software.intel.com/ 2.60 +source: https://github.com/01org/appframework 2.61 +license: https://raw.githubusercontent.com/01org/appframework/master/license.txt 2.62 + 2.63 +jQuery 2.64 +----------------------------------------------------------------------------- 2.65 +http://jquery.com/ 2.66 +source: https://github.com/jquery/jquery 2.67 +license: https://raw.githubusercontent.com/jquery/jquery/master/LICENSE.txt
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/Touchgui/Touchgui.xdk Thu Jun 04 14:50:33 2015 +0200 3.3 @@ -0,0 +1,247 @@ 3.4 +{ 3.5 + "project": { 3.6 + "projectSettingsVersion": "1.2", 3.7 + "creationData": { 3.8 + "projectTypeName": "com.intel.xdk.projecttype.jsapp", 3.9 + "src": "https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip", 3.10 + "projectGuid": "dfa70862-2c48-4649-b181-373add78f975", 3.11 + "lastModifiedDate": 1429384906298, 3.12 + "creationDate": 1425145486141 3.13 + }, 3.14 + "sourceDirectory": "www", 3.15 + "cordovaPluginsDirectory": "plugins", 3.16 + "startFile": "index.html", 3.17 + "projectFiles": {}, 3.18 + "projectDirectories": {}, 3.19 + "libraries": [], 3.20 + "cordovaPlugins": [ 3.21 + { 3.22 + "id": "org.apache.cordova.device", 3.23 + "version": "0.2.13", 3.24 + "selectedState": "Included", 3.25 + "data": {}, 3.26 + "paramvals": {}, 3.27 + "dependsOn": [], 3.28 + "dependedBy": [] 3.29 + }, 3.30 + { 3.31 + "id": "org.apache.cordova.splashscreen", 3.32 + "version": "0.3.5", 3.33 + "selectedState": "Included", 3.34 + "data": {}, 3.35 + "paramvals": {}, 3.36 + "dependsOn": [], 3.37 + "dependedBy": [] 3.38 + }, 3.39 + { 3.40 + "id": "org.apache.cordova.vibration", 3.41 + "version": "0.3.12", 3.42 + "selectedState": "Included", 3.43 + "data": {}, 3.44 + "paramvals": {}, 3.45 + "dependsOn": [], 3.46 + "dependedBy": [] 3.47 + }, 3.48 + { 3.49 + "id": "org.apache.cordova.dialogs", 3.50 + "version": "0.2.11", 3.51 + "selectedState": "Included", 3.52 + "data": {}, 3.53 + "paramvals": {}, 3.54 + "dependsOn": [], 3.55 + "dependedBy": [] 3.56 + } 3.57 + ], 3.58 + "serviceMethods": [], 3.59 + "buildConfigurations": { 3.60 + "Android": { 3.61 + "platform_": "android", 3.62 + "runtime_": "Cordova 3.x", 3.63 + "name_": "Android", 3.64 + "preferences_": { 3.65 + "android-minSdkVersion": "10", 3.66 + "android-targetSdkVersion": "19", 3.67 + "android-installLocation": "auto" 3.68 + }, 3.69 + "isActive_": true, 3.70 + "appName_": "Touchgui", 3.71 + "appID_": "demo.touchnotifier", 3.72 + "appAccess_": [ 3.73 + { 3.74 + "origin": "*" 3.75 + } 3.76 + ], 3.77 + "icons_": [], 3.78 + "splashes_": [], 3.79 + "addlPermissions_": "", 3.80 + "excludedLibraries_": "", 3.81 + "iosProvs_": [], 3.82 + "cordovaCLIVersion_": "4.1.2", 3.83 + "crosswalkVersion_": "10", 3.84 + "appVersion_": "1.0.0", 3.85 + "appVersionCode_": "1", 3.86 + "appDescription_": "A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.", 3.87 + "appAuthor_": "Intel XDK" 3.88 + }, 3.89 + "Android-Crosswalk": { 3.90 + "platform_": "android", 3.91 + "runtime_": "Crosswalk with Cordova 3.x", 3.92 + "name_": "Android-Crosswalk", 3.93 + "preferences_": { 3.94 + "android-minSdkVersion": "14", 3.95 + "android-targetSdkVersion": "19", 3.96 + "android-installLocation": "auto" 3.97 + }, 3.98 + "isActive_": true, 3.99 + "appName_": "Touchgui", 3.100 + "appID_": "demo.touchnotifier", 3.101 + "appAccess_": [ 3.102 + { 3.103 + "origin": "*" 3.104 + } 3.105 + ], 3.106 + "icons_": [], 3.107 + "splashes_": [], 3.108 + "addlPermissions_": "", 3.109 + "excludedLibraries_": "", 3.110 + "iosProvs_": [], 3.111 + "cordovaCLIVersion_": "4.1.2", 3.112 + "crosswalkVersion_": "10", 3.113 + "appVersion_": "1.0.0", 3.114 + "appVersionCode_": "1", 3.115 + "appDescription_": "A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.", 3.116 + "appAuthor_": "Intel XDK" 3.117 + }, 3.118 + "iOS": { 3.119 + "platform_": "ios", 3.120 + "runtime_": "Cordova 3.x", 3.121 + "name_": "iOS", 3.122 + "preferences_": { 3.123 + "ios-target": "6", 3.124 + "ios-configuration": "adhoc" 3.125 + }, 3.126 + "isActive_": true, 3.127 + "appName_": "Touchgui", 3.128 + "appID_": "demo.touchnotifier", 3.129 + "appAccess_": [ 3.130 + { 3.131 + "origin": "*" 3.132 + } 3.133 + ], 3.134 + "icons_": [], 3.135 + "splashes_": [], 3.136 + "addlPermissions_": "", 3.137 + "excludedLibraries_": "", 3.138 + "iosProvs_": [], 3.139 + "cordovaCLIVersion_": "4.1.2", 3.140 + "crosswalkVersion_": "10", 3.141 + "appVersion_": "1.0.0", 3.142 + "appDescription_": "A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.", 3.143 + "appAuthor_": "Intel XDK" 3.144 + }, 3.145 + "Windows8": { 3.146 + "platform_": "windows8", 3.147 + "runtime_": "Cordova 3.x", 3.148 + "name_": "Windows8", 3.149 + "preferences_": {}, 3.150 + "isActive_": true, 3.151 + "appName_": "Touchgui", 3.152 + "appID_": "demo.touchnotifier", 3.153 + "appAccess_": [ 3.154 + { 3.155 + "origin": "*" 3.156 + } 3.157 + ], 3.158 + "icons_": [], 3.159 + "splashes_": [], 3.160 + "addlPermissions_": "", 3.161 + "excludedLibraries_": "", 3.162 + "iosProvs_": [], 3.163 + "cordovaCLIVersion_": "4.1.2", 3.164 + "crosswalkVersion_": "10", 3.165 + "appVersion_": "1.0.0.0", 3.166 + "appDescription_": "A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.", 3.167 + "appAuthor_": "Intel XDK" 3.168 + }, 3.169 + "WebApp": { 3.170 + "platform_": "webapp", 3.171 + "runtime_": "W3C", 3.172 + "name_": "WebApp", 3.173 + "preferences_": {}, 3.174 + "isActive_": false, 3.175 + "appName_": "Touchgui", 3.176 + "appID_": "not.yet.specified", 3.177 + "appAccess_": [ 3.178 + { 3.179 + "origin": "*" 3.180 + } 3.181 + ], 3.182 + "icons_": [], 3.183 + "splashes_": [], 3.184 + "addlPermissions_": "", 3.185 + "excludedLibraries_": "", 3.186 + "appVersion_": "0.0.1" 3.187 + }, 3.188 + "Firefox": { 3.189 + "platform_": "firefoxos", 3.190 + "runtime_": "W3C on Firefox OS", 3.191 + "name_": "Firefox", 3.192 + "preferences_": {}, 3.193 + "isActive_": false, 3.194 + "appName_": "Touchgui", 3.195 + "appID_": "not.yet.specified", 3.196 + "appAccess_": [ 3.197 + { 3.198 + "origin": "*" 3.199 + } 3.200 + ], 3.201 + "icons_": [], 3.202 + "splashes_": [], 3.203 + "addlPermissions_": "", 3.204 + "excludedLibraries_": "", 3.205 + "appVersion_": "0.0.1" 3.206 + }, 3.207 + "Chrome": { 3.208 + "platform_": "chromeos", 3.209 + "runtime_": "W3C on Chrome OS", 3.210 + "name_": "Chrome", 3.211 + "preferences_": {}, 3.212 + "isActive_": false, 3.213 + "appName_": "Touchgui", 3.214 + "appID_": "not.yet.specified", 3.215 + "appAccess_": [ 3.216 + { 3.217 + "origin": "*" 3.218 + } 3.219 + ], 3.220 + "icons_": [], 3.221 + "splashes_": [], 3.222 + "addlPermissions_": "", 3.223 + "excludedLibraries_": "", 3.224 + "appVersion_": "0.0.1" 3.225 + }, 3.226 + "Facebook": { 3.227 + "platform_": "facebook", 3.228 + "runtime_": "W3C on Facebook", 3.229 + "name_": "Facebook", 3.230 + "preferences_": {}, 3.231 + "isActive_": false, 3.232 + "appName_": "Touchgui", 3.233 + "appID_": "not.yet.specified", 3.234 + "appAccess_": [ 3.235 + { 3.236 + "origin": "*" 3.237 + } 3.238 + ], 3.239 + "icons_": [], 3.240 + "splashes_": [], 3.241 + "addlPermissions_": "", 3.242 + "excludedLibraries_": "", 3.243 + "appVersion_": "0.0.1" 3.244 + } 3.245 + }, 3.246 + "gameAssetDirectory": "asset", 3.247 + "gameMetadata": {}, 3.248 + "projectTags": [] 3.249 + } 3.250 +} 3.251 \ No newline at end of file
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/Touchgui/Touchgui.xdke Thu Jun 04 14:50:33 2015 +0200 4.3 @@ -0,0 +1,9 @@ 4.4 +{ 4.5 + "project": { 4.6 + "projectSettingsVersion": "1.2", 4.7 + "currentBuildConfiguration": "Android", 4.8 + "projectFiles": {}, 4.9 + "projectDirectories": {}, 4.10 + "initialAutoPluginCount": 0 4.11 + } 4.12 +} 4.13 \ No newline at end of file
5.1 Binary file Touchgui/icon.png has changed
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/Touchgui/intelxdk.config.android.xml Thu Jun 04 14:50:33 2015 +0200 6.3 @@ -0,0 +1,19 @@ 6.4 +<?xml version='1.0' encoding='UTF-8'?> 6.5 +<widget xmlns="http://www.w3.org/ns/widgets" xmlns:intelxdk="http://xdk.intel.com/ns/v1" id="demo.touchnotifier" version="1.0.0" android-versionCode="1"> 6.6 +<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost. --> 6.7 +<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.--> 6.8 +<intelxdk:version value="1.0"/> 6.9 +<intelxdk:cordova-cli version="4.1.2"/> 6.10 +<name>Touchgui</name> 6.11 +<description>A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.</description> 6.12 +<author>Intel XDK</author> 6.13 +<content src="index.html"/> 6.14 +<access origin="*"/> 6.15 +<intelxdk:plugin intelxdk:name="Device" intelxdk:value="org.apache.cordova.device" intelxdk:version="0.2.13"/> 6.16 +<intelxdk:plugin intelxdk:name="SplashScreen" intelxdk:value="org.apache.cordova.splashscreen" intelxdk:version="0.3.5"/> 6.17 +<intelxdk:plugin intelxdk:name="Vibration (notification)" intelxdk:value="org.apache.cordova.vibration" intelxdk:version="0.3.12"/> 6.18 +<intelxdk:plugin intelxdk:name="Dialogs (notification)" intelxdk:value="org.apache.cordova.dialogs" intelxdk:version="0.2.11"/> 6.19 +<preference name="android-minSdkVersion" value="10"/> 6.20 +<preference name="android-targetSdkVersion" value="19"/> 6.21 +<preference name="android-installLocation" value="auto"/> 6.22 +<!--creationInfo:{"src":"https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--></widget> 6.23 \ No newline at end of file
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 7.2 +++ b/Touchgui/intelxdk.config.crosswalk.xml Thu Jun 04 14:50:33 2015 +0200 7.3 @@ -0,0 +1,20 @@ 7.4 +<?xml version='1.0' encoding='UTF-8'?> 7.5 +<widget xmlns="http://www.w3.org/ns/widgets" xmlns:intelxdk="http://xdk.intel.com/ns/v1" id="demo.touchnotifier" version="1.0.0" android-versionCode="1"> 7.6 +<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost. --> 7.7 +<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.--> 7.8 +<intelxdk:version value="1.0"/> 7.9 +<intelxdk:cordova-cli version="4.1.2"/> 7.10 +<name>Touchgui</name> 7.11 +<description>A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.</description> 7.12 +<author>Intel XDK</author> 7.13 +<content src="index.html"/> 7.14 +<access origin="*"/> 7.15 +<intelxdk:plugin intelxdk:name="Device" intelxdk:value="org.apache.cordova.device" intelxdk:version="0.2.13"/> 7.16 +<intelxdk:plugin intelxdk:name="SplashScreen" intelxdk:value="org.apache.cordova.splashscreen" intelxdk:version="0.3.5"/> 7.17 +<intelxdk:plugin intelxdk:name="Vibration (notification)" intelxdk:value="org.apache.cordova.vibration" intelxdk:version="0.3.12"/> 7.18 +<intelxdk:plugin intelxdk:name="Dialogs (notification)" intelxdk:value="org.apache.cordova.dialogs" intelxdk:version="0.2.11"/> 7.19 +<preference name="android-minSdkVersion" value="14"/> 7.20 +<preference name="android-targetSdkVersion" value="19"/> 7.21 +<preference name="android-installLocation" value="auto"/> 7.22 +<intelxdk:crosswalk version="10"/> 7.23 +<!--creationInfo:{"src":"https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--></widget> 7.24 \ No newline at end of file
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/Touchgui/intelxdk.config.ios.xml Thu Jun 04 14:50:33 2015 +0200 8.3 @@ -0,0 +1,18 @@ 8.4 +<?xml version='1.0' encoding='UTF-8'?> 8.5 +<widget xmlns="http://www.w3.org/ns/widgets" xmlns:intelxdk="http://xdk.intel.com/ns/v1" id="demo.touchnotifier" version="1.0.0"> 8.6 +<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost. --> 8.7 +<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.--> 8.8 +<intelxdk:version value="1.0"/> 8.9 +<intelxdk:cordova-cli version="4.1.2"/> 8.10 +<name>Touchgui</name> 8.11 +<description>A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.</description> 8.12 +<author>Intel XDK</author> 8.13 +<content src="index.html"/> 8.14 +<access origin="*"/> 8.15 +<intelxdk:plugin intelxdk:name="Device" intelxdk:value="org.apache.cordova.device" intelxdk:version="0.2.13"/> 8.16 +<intelxdk:plugin intelxdk:name="SplashScreen" intelxdk:value="org.apache.cordova.splashscreen" intelxdk:version="0.3.5"/> 8.17 +<intelxdk:plugin intelxdk:name="Vibration (notification)" intelxdk:value="org.apache.cordova.vibration" intelxdk:version="0.3.12"/> 8.18 +<intelxdk:plugin intelxdk:name="Dialogs (notification)" intelxdk:value="org.apache.cordova.dialogs" intelxdk:version="0.2.11"/> 8.19 +<preference name="ios-target" value="6"/> 8.20 +<preference name="ios-configuration" value="adhoc"/> 8.21 +<!--creationInfo:{"src":"https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--></widget> 8.22 \ No newline at end of file
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 9.2 +++ b/Touchgui/intelxdk.config.windows8.xml Thu Jun 04 14:50:33 2015 +0200 9.3 @@ -0,0 +1,16 @@ 9.4 +<?xml version='1.0' encoding='UTF-8'?> 9.5 +<widget xmlns="http://www.w3.org/ns/widgets" xmlns:intelxdk="http://xdk.intel.com/ns/v1" id="demo.touchnotifier" version="1.0.0.0"> 9.6 +<!--This file is generated by the Intel XDK. Do not edit this file as your edits will be lost. --> 9.7 +<!--To change the contents of this file, see the documentation on the intelxdk.config.additions.xml file.--> 9.8 +<intelxdk:version value="1.0"/> 9.9 +<intelxdk:cordova-cli version="4.1.2"/> 9.10 +<name>Touchgui</name> 9.11 +<description>A simple app that receives data wirelessly and notifies a user if the Touch Sensor is being touched.</description> 9.12 +<author>Intel XDK</author> 9.13 +<content src="index.html"/> 9.14 +<access origin="*"/> 9.15 +<intelxdk:plugin intelxdk:name="Device" intelxdk:value="org.apache.cordova.device" intelxdk:version="0.2.13"/> 9.16 +<intelxdk:plugin intelxdk:name="SplashScreen" intelxdk:value="org.apache.cordova.splashscreen" intelxdk:version="0.3.5"/> 9.17 +<intelxdk:plugin intelxdk:name="Vibration (notification)" intelxdk:value="org.apache.cordova.vibration" intelxdk:version="0.3.12"/> 9.18 +<intelxdk:plugin intelxdk:name="Dialogs (notification)" intelxdk:value="org.apache.cordova.dialogs" intelxdk:version="0.2.11"/> 9.19 +<!--creationInfo:{"src":"https://edge-intel.s3.amazonaws.com/jsapp/production/release-2015-ww07/sample-iot-companion-touch-notifier/sample.zip","projectTypeName":"com.intel.xdk.projecttype.jsapp"}--></widget> 9.20 \ No newline at end of file
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 10.2 +++ b/Touchgui/plugins/org.apache.cordova.device/.fetch.json Thu Jun 04 14:50:33 2015 +0200 10.3 @@ -0,0 +1,1 @@ 10.4 +{"source":{"type":"local","path":"/opt/intel/XDK_IoT_Edition/xdk/components/server/cordova-plugins/org.apache.cordova.device"}} 10.5 \ No newline at end of file
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 11.2 +++ b/Touchgui/plugins/org.apache.cordova.device/CONTRIBUTING.md Thu Jun 04 14:50:33 2015 +0200 11.3 @@ -0,0 +1,37 @@ 11.4 +<!-- 11.5 +# 11.6 +# Licensed to the Apache Software Foundation (ASF) under one 11.7 +# or more contributor license agreements. See the NOTICE file 11.8 +# distributed with this work for additional information 11.9 +# regarding copyright ownership. The ASF licenses this file 11.10 +# to you under the Apache License, Version 2.0 (the 11.11 +# "License"); you may not use this file except in compliance 11.12 +# with the License. You may obtain a copy of the License at 11.13 +# 11.14 +# http://www.apache.org/licenses/LICENSE-2.0 11.15 +# 11.16 +# Unless required by applicable law or agreed to in writing, 11.17 +# software distributed under the License is distributed on an 11.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11.19 +# KIND, either express or implied. See the License for the 11.20 +# specific language governing permissions and limitations 11.21 +# under the License. 11.22 +# 11.23 +--> 11.24 + 11.25 +# Contributing to Apache Cordova 11.26 + 11.27 +Anyone can contribute to Cordova. And we need your contributions. 11.28 + 11.29 +There are multiple ways to contribute: report bugs, improve the docs, and 11.30 +contribute code. 11.31 + 11.32 +For instructions on this, start with the 11.33 +[contribution overview](http://cordova.apache.org/#contribute). 11.34 + 11.35 +The details are explained there, but the important items are: 11.36 + - Sign and submit an Apache ICLA (Contributor License Agreement). 11.37 + - Have a Jira issue open that corresponds to your contribution. 11.38 + - Run the tests so your patch doesn't break existing functionality. 11.39 + 11.40 +We look forward to your contributions!
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 12.2 +++ b/Touchgui/plugins/org.apache.cordova.device/LICENSE Thu Jun 04 14:50:33 2015 +0200 12.3 @@ -0,0 +1,202 @@ 12.4 + 12.5 + Apache License 12.6 + Version 2.0, January 2004 12.7 + http://www.apache.org/licenses/ 12.8 + 12.9 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 12.10 + 12.11 + 1. Definitions. 12.12 + 12.13 + "License" shall mean the terms and conditions for use, reproduction, 12.14 + and distribution as defined by Sections 1 through 9 of this document. 12.15 + 12.16 + "Licensor" shall mean the copyright owner or entity authorized by 12.17 + the copyright owner that is granting the License. 12.18 + 12.19 + "Legal Entity" shall mean the union of the acting entity and all 12.20 + other entities that control, are controlled by, or are under common 12.21 + control with that entity. For the purposes of this definition, 12.22 + "control" means (i) the power, direct or indirect, to cause the 12.23 + direction or management of such entity, whether by contract or 12.24 + otherwise, or (ii) ownership of fifty percent (50%) or more of the 12.25 + outstanding shares, or (iii) beneficial ownership of such entity. 12.26 + 12.27 + "You" (or "Your") shall mean an individual or Legal Entity 12.28 + exercising permissions granted by this License. 12.29 + 12.30 + "Source" form shall mean the preferred form for making modifications, 12.31 + including but not limited to software source code, documentation 12.32 + source, and configuration files. 12.33 + 12.34 + "Object" form shall mean any form resulting from mechanical 12.35 + transformation or translation of a Source form, including but 12.36 + not limited to compiled object code, generated documentation, 12.37 + and conversions to other media types. 12.38 + 12.39 + "Work" shall mean the work of authorship, whether in Source or 12.40 + Object form, made available under the License, as indicated by a 12.41 + copyright notice that is included in or attached to the work 12.42 + (an example is provided in the Appendix below). 12.43 + 12.44 + "Derivative Works" shall mean any work, whether in Source or Object 12.45 + form, that is based on (or derived from) the Work and for which the 12.46 + editorial revisions, annotations, elaborations, or other modifications 12.47 + represent, as a whole, an original work of authorship. For the purposes 12.48 + of this License, Derivative Works shall not include works that remain 12.49 + separable from, or merely link (or bind by name) to the interfaces of, 12.50 + the Work and Derivative Works thereof. 12.51 + 12.52 + "Contribution" shall mean any work of authorship, including 12.53 + the original version of the Work and any modifications or additions 12.54 + to that Work or Derivative Works thereof, that is intentionally 12.55 + submitted to Licensor for inclusion in the Work by the copyright owner 12.56 + or by an individual or Legal Entity authorized to submit on behalf of 12.57 + the copyright owner. For the purposes of this definition, "submitted" 12.58 + means any form of electronic, verbal, or written communication sent 12.59 + to the Licensor or its representatives, including but not limited to 12.60 + communication on electronic mailing lists, source code control systems, 12.61 + and issue tracking systems that are managed by, or on behalf of, the 12.62 + Licensor for the purpose of discussing and improving the Work, but 12.63 + excluding communication that is conspicuously marked or otherwise 12.64 + designated in writing by the copyright owner as "Not a Contribution." 12.65 + 12.66 + "Contributor" shall mean Licensor and any individual or Legal Entity 12.67 + on behalf of whom a Contribution has been received by Licensor and 12.68 + subsequently incorporated within the Work. 12.69 + 12.70 + 2. Grant of Copyright License. Subject to the terms and conditions of 12.71 + this License, each Contributor hereby grants to You a perpetual, 12.72 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 12.73 + copyright license to reproduce, prepare Derivative Works of, 12.74 + publicly display, publicly perform, sublicense, and distribute the 12.75 + Work and such Derivative Works in Source or Object form. 12.76 + 12.77 + 3. Grant of Patent License. Subject to the terms and conditions of 12.78 + this License, each Contributor hereby grants to You a perpetual, 12.79 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 12.80 + (except as stated in this section) patent license to make, have made, 12.81 + use, offer to sell, sell, import, and otherwise transfer the Work, 12.82 + where such license applies only to those patent claims licensable 12.83 + by such Contributor that are necessarily infringed by their 12.84 + Contribution(s) alone or by combination of their Contribution(s) 12.85 + with the Work to which such Contribution(s) was submitted. If You 12.86 + institute patent litigation against any entity (including a 12.87 + cross-claim or counterclaim in a lawsuit) alleging that the Work 12.88 + or a Contribution incorporated within the Work constitutes direct 12.89 + or contributory patent infringement, then any patent licenses 12.90 + granted to You under this License for that Work shall terminate 12.91 + as of the date such litigation is filed. 12.92 + 12.93 + 4. Redistribution. You may reproduce and distribute copies of the 12.94 + Work or Derivative Works thereof in any medium, with or without 12.95 + modifications, and in Source or Object form, provided that You 12.96 + meet the following conditions: 12.97 + 12.98 + (a) You must give any other recipients of the Work or 12.99 + Derivative Works a copy of this License; and 12.100 + 12.101 + (b) You must cause any modified files to carry prominent notices 12.102 + stating that You changed the files; and 12.103 + 12.104 + (c) You must retain, in the Source form of any Derivative Works 12.105 + that You distribute, all copyright, patent, trademark, and 12.106 + attribution notices from the Source form of the Work, 12.107 + excluding those notices that do not pertain to any part of 12.108 + the Derivative Works; and 12.109 + 12.110 + (d) If the Work includes a "NOTICE" text file as part of its 12.111 + distribution, then any Derivative Works that You distribute must 12.112 + include a readable copy of the attribution notices contained 12.113 + within such NOTICE file, excluding those notices that do not 12.114 + pertain to any part of the Derivative Works, in at least one 12.115 + of the following places: within a NOTICE text file distributed 12.116 + as part of the Derivative Works; within the Source form or 12.117 + documentation, if provided along with the Derivative Works; or, 12.118 + within a display generated by the Derivative Works, if and 12.119 + wherever such third-party notices normally appear. The contents 12.120 + of the NOTICE file are for informational purposes only and 12.121 + do not modify the License. You may add Your own attribution 12.122 + notices within Derivative Works that You distribute, alongside 12.123 + or as an addendum to the NOTICE text from the Work, provided 12.124 + that such additional attribution notices cannot be construed 12.125 + as modifying the License. 12.126 + 12.127 + You may add Your own copyright statement to Your modifications and 12.128 + may provide additional or different license terms and conditions 12.129 + for use, reproduction, or distribution of Your modifications, or 12.130 + for any such Derivative Works as a whole, provided Your use, 12.131 + reproduction, and distribution of the Work otherwise complies with 12.132 + the conditions stated in this License. 12.133 + 12.134 + 5. Submission of Contributions. Unless You explicitly state otherwise, 12.135 + any Contribution intentionally submitted for inclusion in the Work 12.136 + by You to the Licensor shall be under the terms and conditions of 12.137 + this License, without any additional terms or conditions. 12.138 + Notwithstanding the above, nothing herein shall supersede or modify 12.139 + the terms of any separate license agreement you may have executed 12.140 + with Licensor regarding such Contributions. 12.141 + 12.142 + 6. Trademarks. This License does not grant permission to use the trade 12.143 + names, trademarks, service marks, or product names of the Licensor, 12.144 + except as required for reasonable and customary use in describing the 12.145 + origin of the Work and reproducing the content of the NOTICE file. 12.146 + 12.147 + 7. Disclaimer of Warranty. Unless required by applicable law or 12.148 + agreed to in writing, Licensor provides the Work (and each 12.149 + Contributor provides its Contributions) on an "AS IS" BASIS, 12.150 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 12.151 + implied, including, without limitation, any warranties or conditions 12.152 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 12.153 + PARTICULAR PURPOSE. You are solely responsible for determining the 12.154 + appropriateness of using or redistributing the Work and assume any 12.155 + risks associated with Your exercise of permissions under this License. 12.156 + 12.157 + 8. Limitation of Liability. In no event and under no legal theory, 12.158 + whether in tort (including negligence), contract, or otherwise, 12.159 + unless required by applicable law (such as deliberate and grossly 12.160 + negligent acts) or agreed to in writing, shall any Contributor be 12.161 + liable to You for damages, including any direct, indirect, special, 12.162 + incidental, or consequential damages of any character arising as a 12.163 + result of this License or out of the use or inability to use the 12.164 + Work (including but not limited to damages for loss of goodwill, 12.165 + work stoppage, computer failure or malfunction, or any and all 12.166 + other commercial damages or losses), even if such Contributor 12.167 + has been advised of the possibility of such damages. 12.168 + 12.169 + 9. Accepting Warranty or Additional Liability. While redistributing 12.170 + the Work or Derivative Works thereof, You may choose to offer, 12.171 + and charge a fee for, acceptance of support, warranty, indemnity, 12.172 + or other liability obligations and/or rights consistent with this 12.173 + License. However, in accepting such obligations, You may act only 12.174 + on Your own behalf and on Your sole responsibility, not on behalf 12.175 + of any other Contributor, and only if You agree to indemnify, 12.176 + defend, and hold each Contributor harmless for any liability 12.177 + incurred by, or claims asserted against, such Contributor by reason 12.178 + of your accepting any such warranty or additional liability. 12.179 + 12.180 + END OF TERMS AND CONDITIONS 12.181 + 12.182 + APPENDIX: How to apply the Apache License to your work. 12.183 + 12.184 + To apply the Apache License to your work, attach the following 12.185 + boilerplate notice, with the fields enclosed by brackets "[]" 12.186 + replaced with your own identifying information. (Don't include 12.187 + the brackets!) The text should be enclosed in the appropriate 12.188 + comment syntax for the file format. We also recommend that a 12.189 + file or class name and description of purpose be included on the 12.190 + same "printed page" as the copyright notice for easier 12.191 + identification within third-party archives. 12.192 + 12.193 + Copyright [yyyy] [name of copyright owner] 12.194 + 12.195 + Licensed under the Apache License, Version 2.0 (the "License"); 12.196 + you may not use this file except in compliance with the License. 12.197 + You may obtain a copy of the License at 12.198 + 12.199 + http://www.apache.org/licenses/LICENSE-2.0 12.200 + 12.201 + Unless required by applicable law or agreed to in writing, software 12.202 + distributed under the License is distributed on an "AS IS" BASIS, 12.203 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12.204 + See the License for the specific language governing permissions and 12.205 + limitations under the License. 12.206 \ No newline at end of file
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 13.2 +++ b/Touchgui/plugins/org.apache.cordova.device/NOTICE Thu Jun 04 14:50:33 2015 +0200 13.3 @@ -0,0 +1,5 @@ 13.4 +Apache Cordova 13.5 +Copyright 2012 The Apache Software Foundation 13.6 + 13.7 +This product includes software developed at 13.8 +The Apache Software Foundation (http://www.apache.org/).
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 14.2 +++ b/Touchgui/plugins/org.apache.cordova.device/README.md Thu Jun 04 14:50:33 2015 +0200 14.3 @@ -0,0 +1,22 @@ 14.4 +<!--- 14.5 + license: Licensed to the Apache Software Foundation (ASF) under one 14.6 + or more contributor license agreements. See the NOTICE file 14.7 + distributed with this work for additional information 14.8 + regarding copyright ownership. The ASF licenses this file 14.9 + to you under the Apache License, Version 2.0 (the 14.10 + "License"); you may not use this file except in compliance 14.11 + with the License. You may obtain a copy of the License at 14.12 + 14.13 + http://www.apache.org/licenses/LICENSE-2.0 14.14 + 14.15 + Unless required by applicable law or agreed to in writing, 14.16 + software distributed under the License is distributed on an 14.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14.18 + KIND, either express or implied. See the License for the 14.19 + specific language governing permissions and limitations 14.20 + under the License. 14.21 +--> 14.22 + 14.23 +# org.apache.cordova.device 14.24 + 14.25 +Plugin documentation: [doc/index.md](doc/index.md)
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 15.2 +++ b/Touchgui/plugins/org.apache.cordova.device/RELEASENOTES.md Thu Jun 04 14:50:33 2015 +0200 15.3 @@ -0,0 +1,92 @@ 15.4 +<!-- 15.5 +# 15.6 +# Licensed to the Apache Software Foundation (ASF) under one 15.7 +# or more contributor license agreements. See the NOTICE file 15.8 +# distributed with this work for additional information 15.9 +# regarding copyright ownership. The ASF licenses this file 15.10 +# to you under the Apache License, Version 2.0 (the 15.11 +# "License"); you may not use this file except in compliance 15.12 +# with the License. You may obtain a copy of the License at 15.13 +# 15.14 +# http://www.apache.org/licenses/LICENSE-2.0 15.15 +# 15.16 +# Unless required by applicable law or agreed to in writing, 15.17 +# software distributed under the License is distributed on an 15.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15.19 +# KIND, either express or implied. See the License for the 15.20 +# specific language governing permissions and limitations 15.21 +# under the License. 15.22 +# 15.23 +--> 15.24 +# Release Notes 15.25 + 15.26 +### 0.2.1 (Sept 5, 2013) 15.27 +* removed extraneous print statement 15.28 +* [CB-4432] copyright notice change 15.29 + 15.30 +### 0.2.3 (Sept 25, 2013) 15.31 +* CB-4889 bumping&resetting version 15.32 +* [windows8] commandProxy has moved 15.33 +* [BlackBerry10] removed uneeded permission tags in plugin.xml 15.34 +* CB-4889 renaming org.apache.cordova.core.device to org.apache.cordova.device 15.35 +* Rename CHANGELOG.md -> RELEASENOTES.md 15.36 +* updated to use commandProxy for ffos 15.37 +* add firefoxos support 15.38 +* [CB-4752] Incremented plugin version on dev branch. 15.39 + 15.40 +### 0.2.4 (Oct 28, 2013) 15.41 +* CB-5128: added repo + issue tag in plugin.xml for device plugin 15.42 +* CB-5085 device.cordova returning wrong value 15.43 +* [CB-4915] Incremented plugin version on dev branch. 15.44 + 15.45 +### 0.2.5 (Dec 4, 2013) 15.46 +* CB-5316 Spell Cordova as a brand unless it's a command or script 15.47 +* [ubuntu] use cordova/exec/proxy 15.48 +* add ubuntu platform 15.49 +* Modify Device.platform logic to use amazon-fireos as the platform for Amazon Devices 15.50 +* 1. Added amazon-fireos platform. 2. Change to use cordova-amazon-fireos as the platform if user agent contains 'cordova-amazon-fireos' 15.51 + 15.52 +### 0.2.6 (Jan 02, 2014) 15.53 +* CB-5658 Add doc/index.md for Device plugin 15.54 +* CB-5504 Moving Telephony Logic out of Device 15.55 + 15.56 +### 0.2.7 (Jan 07, 2014) 15.57 +* CB-5737 Fix exception on close caused by left over telephony code from CB-5504 15.58 + 15.59 +### 0.2.8 (Feb 05, 2014) 15.60 +* Tizen support added 15.61 + 15.62 +### 0.2.9 (Apr 17, 2014) 15.63 +* CB-5105: [Android, windows8, WP, BlackBerry10] Removed dead code for device.version 15.64 +* CB-6422: [windows8] use cordova/exec/proxy 15.65 +* CB-6460: Update license headers 15.66 +* Add NOTICE file 15.67 + 15.68 +### 0.2.10 (Jun 05, 2014) 15.69 +* CB-6127 Spanish and French Translations added. Github close #12 15.70 +* Changing 1.5 to 2.0 15.71 +* added firefoxos version - conversion 15.72 +* added firefoxos version 15.73 +* CB-6800 Add license 15.74 +* CB-6491 add CONTRIBUTING.md 15.75 + 15.76 +### 0.2.11 (Aug 06, 2014) 15.77 +* [FFOS] update DeviceProxy.js 15.78 +* CB-6127 Updated translations for docs 15.79 +* Use Windows system calls to get better info 15.80 + 15.81 +### 0.2.12 (Sep 17, 2014) 15.82 +* CB-7471 cordova-plugin-device documentation translation 15.83 +* CB-7552 device.name docs have not been removed 15.84 +* [fxos] Fix cordova version 15.85 +* added status box and documentation to manual tests 15.86 +* [fxos] Fix cordova version 15.87 +* added status box and documentation to manual tests 15.88 +* Added plugin support for the browser 15.89 +* CB-7262 Adds support for universal windows apps. 15.90 + 15.91 +### 0.2.13 (Dec 02, 2014) 15.92 +* Changing `device.platform` to always report the platform as "browser". 15.93 +* CB-5892 - Remove deprecated `window.Settings` 15.94 +* CB-7700 cordova-plugin-device documentation translation: cordova-plugin-device 15.95 +* CB-7571 Bump version of nested plugin to match parent plugin
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 16.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/de/index.md Thu Jun 04 14:50:33 2015 +0200 16.3 @@ -0,0 +1,206 @@ 16.4 +<!--- 16.5 + Licensed to the Apache Software Foundation (ASF) under one 16.6 + or more contributor license agreements. See the NOTICE file 16.7 + distributed with this work for additional information 16.8 + regarding copyright ownership. The ASF licenses this file 16.9 + to you under the Apache License, Version 2.0 (the 16.10 + "License"); you may not use this file except in compliance 16.11 + with the License. You may obtain a copy of the License at 16.12 + 16.13 + http://www.apache.org/licenses/LICENSE-2.0 16.14 + 16.15 + Unless required by applicable law or agreed to in writing, 16.16 + software distributed under the License is distributed on an 16.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16.18 + KIND, either express or implied. See the License for the 16.19 + specific language governing permissions and limitations 16.20 + under the License. 16.21 +--> 16.22 + 16.23 +# org.apache.cordova.device 16.24 + 16.25 +Dieses Plugin definiert eine globale `device` -Objekt, das des Geräts Hard- und Software beschreibt. Das Objekt im globalen Gültigkeitsbereich ist es zwar nicht verfügbar bis nach dem `deviceready` Ereignis. 16.26 + 16.27 + document.addEventListener("deviceready", onDeviceReady, false); 16.28 + function onDeviceReady() { 16.29 + console.log(device.cordova); 16.30 + } 16.31 + 16.32 + 16.33 +## Installation 16.34 + 16.35 + cordova plugin add org.apache.cordova.device 16.36 + 16.37 + 16.38 +## Eigenschaften 16.39 + 16.40 +* device.cordova 16.41 +* device.model 16.42 +* device.platform 16.43 +* device.uuid 16.44 +* device.version 16.45 + 16.46 +## device.cordova 16.47 + 16.48 +Rufen Sie die Version von Cordova, die auf dem Gerät ausgeführt. 16.49 + 16.50 +### Unterstützte Plattformen 16.51 + 16.52 +* Amazon Fire OS 16.53 +* Android 16.54 +* BlackBerry 10 16.55 +* Browser 16.56 +* Firefox OS 16.57 +* iOS 16.58 +* Tizen 16.59 +* Windows Phone 7 und 8 16.60 +* Windows 8 16.61 + 16.62 +## device.model 16.63 + 16.64 +Die `device.model` gibt den Namen der Modell- oder des Geräts zurück. Der Wert wird vom Gerätehersteller festgelegt und kann zwischen den Versionen des gleichen Produkts unterschiedlich sein. 16.65 + 16.66 +### Unterstützte Plattformen 16.67 + 16.68 +* Android 16.69 +* BlackBerry 10 16.70 +* Browser 16.71 +* iOS 16.72 +* Tizen 16.73 +* Windows Phone 7 und 8 16.74 +* Windows 8 16.75 + 16.76 +### Kurzes Beispiel 16.77 + 16.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 16.79 + // Motorola Droid returns "voles" 16.80 + // BlackBerry: Torch 9800 returns "9800" 16.81 + // Browser: Google Chrome returns "Chrome" 16.82 + // Safari returns "Safari" 16.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Finden Sie unter http://theiphonewiki.com/wiki/index.php?title=Models / / Var-Modell = device.model; 16.84 + 16.85 + 16.86 +### Android Eigenarten 16.87 + 16.88 +* Ruft den [Produktname][1] anstelle des [Modellnamens][2], das ist oft der Codename für die Produktion. Beispielsweise das Nexus One gibt `Passion` , und Motorola Droid gibt`voles`. 16.89 + 16.90 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 16.91 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL 16.92 + 16.93 +### Tizen Macken 16.94 + 16.95 +* Gibt z. B. das Gerätemodell von dem Kreditor zugeordnet,`TIZEN` 16.96 + 16.97 +### Windows Phone 7 und 8 Eigenarten 16.98 + 16.99 +* Gibt das vom Hersteller angegebenen Gerätemodell zurück. Beispielsweise gibt der Samsung-Fokus`SGH-i917`. 16.100 + 16.101 +## device.platform 16.102 + 16.103 +Name des Betriebssystems des Geräts zu erhalten. 16.104 + 16.105 + var string = device.platform; 16.106 + 16.107 + 16.108 +### Unterstützte Plattformen 16.109 + 16.110 +* Android 16.111 +* BlackBerry 10 16.112 +* Browser4 16.113 +* Firefox OS 16.114 +* iOS 16.115 +* Tizen 16.116 +* Windows Phone 7 und 8 16.117 +* Windows 8 16.118 + 16.119 +### Kurzes Beispiel 16.120 + 16.121 + // Depending on the device, a few examples are: 16.122 + // - "Android" 16.123 + // - "BlackBerry 10" 16.124 + // - Browser: returns "MacIntel" on Mac 16.125 + // returns "Win32" on Windows 16.126 + // - "iOS" 16.127 + // - "WinCE" 16.128 + // - "Tizen" 16.129 + var devicePlatform = device.platform; 16.130 + 16.131 + 16.132 +### Windows Phone 7 Macken 16.133 + 16.134 +Windows Phone 7 Geräte melden die Plattform als`WinCE`. 16.135 + 16.136 +### Windows Phone 8 Macken 16.137 + 16.138 +Windows Phone 8 Geräte melden die Plattform als`Win32NT`. 16.139 + 16.140 +## device.uuid 16.141 + 16.142 +Des Geräts Universally Unique Identifier ([UUID][3] zu erhalten). 16.143 + 16.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 16.145 + 16.146 + var string = device.uuid; 16.147 + 16.148 + 16.149 +### Beschreibung 16.150 + 16.151 +Die Details wie eine UUID generiert wird werden vom Gerätehersteller und beziehen sich auf die Plattform oder das Modell des Geräts. 16.152 + 16.153 +### Unterstützte Plattformen 16.154 + 16.155 +* Android 16.156 +* BlackBerry 10 16.157 +* iOS 16.158 +* Tizen 16.159 +* Windows Phone 7 und 8 16.160 +* Windows 8 16.161 + 16.162 +### Kurzes Beispiel 16.163 + 16.164 + / / Android: wird eine zufällige 64-Bit-Ganzzahl (als Zeichenfolge, wieder!) / / die ganze Zahl wird beim ersten Start des Geräts erzeugt / / / / BlackBerry: gibt die PIN-Nummer des Gerätes / / Dies ist eine neunstellige eindeutige Ganzzahl (als String, obwohl!) / / / / iPhone: (paraphrasiert aus der Dokumentation zur UIDevice-Klasse) / / liefert eine Reihe von Hash-Werte, die aus mehreren Hardware erstellt identifiziert. 16.165 + / / Es ist gewährleistet, dass für jedes Gerät eindeutig sein und kann nicht gebunden werden / / an den Benutzer weitergeleitet. 16.166 + / / Windows Phone 7: gibt einen Hash des Gerät + aktueller Benutzer, / / wenn der Benutzer nicht definiert ist, eine Guid generiert und wird weiter bestehen, bis die app deinstalliert wird / / Tizen: gibt das Gerät IMEI (International Mobile Equipment Identity oder IMEI ist eine Zahl / / einzigartig für jedes GSM- und UMTS-Handy. 16.167 + var deviceID = device.uuid; 16.168 + 16.169 + 16.170 +### iOS Quirk 16.171 + 16.172 +Die `uuid` auf iOS ist nicht eindeutig zu einem Gerät, aber für jede Anwendung, für jede Installation variiert. Es ändert sich, wenn Sie löschen und neu die app installieren, und möglicherweise auch beim iOS zu aktualisieren, oder auch ein Upgrade möglich die app pro Version (scheinbaren in iOS 5.1). Die `uuid` ist kein zuverlässiger Wert. 16.173 + 16.174 +### Windows Phone 7 und 8 Eigenarten 16.175 + 16.176 +Die `uuid` für Windows Phone 7 die Berechtigung erfordert `ID_CAP_IDENTITY_DEVICE` . Microsoft wird diese Eigenschaft wahrscheinlich bald abzuschaffen. Wenn die Funktion nicht verfügbar ist, generiert die Anwendung eine persistente Guid, die für die Dauer der Installation der Anwendung auf dem Gerät gewährleistet ist. 16.177 + 16.178 +## device.version 16.179 + 16.180 +Version des Betriebssystems zu erhalten. 16.181 + 16.182 + var string = device.version; 16.183 + 16.184 + 16.185 +### Unterstützte Plattformen 16.186 + 16.187 +* Android 2.1 + 16.188 +* BlackBerry 10 16.189 +* Browser 16.190 +* iOS 16.191 +* Tizen 16.192 +* Windows Phone 7 und 8 16.193 +* Windows 8 16.194 + 16.195 +### Kurzes Beispiel 16.196 + 16.197 + // Android: Froyo OS would return "2.2" 16.198 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 16.199 + // Version can also return update level "2.1-update1" 16.200 + // 16.201 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 16.202 + // 16.203 + // Browser: Returns version number for the browser 16.204 + // 16.205 + // iPhone: iOS 3.2 returns "3.2" 16.206 + // 16.207 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 16.208 + // Tizen: returns "TIZEN_20120425_2" 16.209 + var deviceVersion = device.version; 16.210 \ No newline at end of file
17.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 17.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/es/index.md Thu Jun 04 14:50:33 2015 +0200 17.3 @@ -0,0 +1,220 @@ 17.4 +<!--- 17.5 + Licensed to the Apache Software Foundation (ASF) under one 17.6 + or more contributor license agreements. See the NOTICE file 17.7 + distributed with this work for additional information 17.8 + regarding copyright ownership. The ASF licenses this file 17.9 + to you under the Apache License, Version 2.0 (the 17.10 + "License"); you may not use this file except in compliance 17.11 + with the License. You may obtain a copy of the License at 17.12 + 17.13 + http://www.apache.org/licenses/LICENSE-2.0 17.14 + 17.15 + Unless required by applicable law or agreed to in writing, 17.16 + software distributed under the License is distributed on an 17.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17.18 + KIND, either express or implied. See the License for the 17.19 + specific language governing permissions and limitations 17.20 + under the License. 17.21 +--> 17.22 + 17.23 +# org.apache.cordova.device 17.24 + 17.25 +Este plugin define un global `device` objeto que describe del dispositivo hardware y software. Aunque el objeto está en el ámbito global, no está disponible hasta después de la `deviceready` evento. 17.26 + 17.27 + document.addEventListener("deviceready", onDeviceReady, false); 17.28 + function onDeviceReady() { 17.29 + console.log(device.cordova); 17.30 + } 17.31 + 17.32 + 17.33 +## Instalación 17.34 + 17.35 + cordova plugin add org.apache.cordova.device 17.36 + 17.37 + 17.38 +## Propiedades 17.39 + 17.40 +* device.cordova 17.41 +* device.model 17.42 +* device.platform 17.43 +* device.uuid 17.44 +* device.version 17.45 + 17.46 +## device.cordova 17.47 + 17.48 +Obtener la versión de Cordova que se ejecuta en el dispositivo. 17.49 + 17.50 +### Plataformas soportadas 17.51 + 17.52 +* Amazon fire OS 17.53 +* Android 17.54 +* BlackBerry 10 17.55 +* Explorador 17.56 +* Firefox OS 17.57 +* iOS 17.58 +* Tizen 17.59 +* Windows Phone 7 y 8 17.60 +* Windows 8 17.61 + 17.62 +## device.model 17.63 + 17.64 +El `device.model` devuelve el nombre de modelo del dispositivo o producto. El valor es fijado por el fabricante del dispositivo y puede ser diferente a través de versiones del mismo producto. 17.65 + 17.66 +### Plataformas soportadas 17.67 + 17.68 +* Android 17.69 +* BlackBerry 10 17.70 +* Explorador 17.71 +* iOS 17.72 +* Tizen 17.73 +* Windows Phone 7 y 8 17.74 +* Windows 8 17.75 + 17.76 +### Ejemplo rápido 17.77 + 17.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 17.79 + // Motorola Droid returns "voles" 17.80 + // BlackBerry: Torch 9800 returns "9800" 17.81 + // Browser: Google Chrome returns "Chrome" 17.82 + // Safari returns "Safari" 17.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models 17.84 + // 17.85 + var model = device.model; 17.86 + 17.87 + 17.88 +### Rarezas Android 17.89 + 17.90 +* Obtiene el [nombre del producto][1] en lugar del [nombre de la modelo][2], que es a menudo el nombre de código de producción. Por ejemplo, el Nexus One devuelve `Passion` y Motorola Droid devuelve `voles`. 17.91 + 17.92 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 17.93 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL 17.94 + 17.95 +### Rarezas Tizen 17.96 + 17.97 +* Devuelve que el modelo de dispositivo asignado por el proveedor, por ejemplo, `TIZEN` 17.98 + 17.99 +### Windows Phone 7 y 8 rarezas 17.100 + 17.101 +* Devuelve el modelo de dispositivo especificado por el fabricante. Por ejemplo, el Samsung Focus devuelve `SGH-i917`. 17.102 + 17.103 +## device.platform 17.104 + 17.105 +Obtener el nombre del sistema operativo del dispositivo. 17.106 + 17.107 + var string = device.platform; 17.108 + 17.109 + 17.110 +### Plataformas soportadas 17.111 + 17.112 +* Android 17.113 +* BlackBerry 10 17.114 +* Browser4 17.115 +* Firefox OS 17.116 +* iOS 17.117 +* Tizen 17.118 +* Windows Phone 7 y 8 17.119 +* Windows 8 17.120 + 17.121 +### Ejemplo rápido 17.122 + 17.123 + // Depending on the device, a few examples are: 17.124 + // - "Android" 17.125 + // - "BlackBerry 10" 17.126 + // - Browser: returns "MacIntel" on Mac 17.127 + // returns "Win32" on Windows 17.128 + // - "iOS" 17.129 + // - "WinCE" 17.130 + // - "Tizen" 17.131 + var devicePlatform = device.platform; 17.132 + 17.133 + 17.134 +### Windows Phone 7 rarezas 17.135 + 17.136 +Dispositivos Windows Phone 7 informe de la plataforma como `WinCE`. 17.137 + 17.138 +### Windows Phone 8 rarezas 17.139 + 17.140 +Dispositivos Windows Phone 8 Informe la plataforma como `Win32NT`. 17.141 + 17.142 +## device.uuid 17.143 + 17.144 +Obtener identificador universalmente única del dispositivo ([UUID][3]). 17.145 + 17.146 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 17.147 + 17.148 + var string = device.uuid; 17.149 + 17.150 + 17.151 +### Descripción 17.152 + 17.153 +Los detalles de cómo se genera un UUID son determinados por el fabricante del dispositivo y son específicos a la plataforma del dispositivo o modelo. 17.154 + 17.155 +### Plataformas soportadas 17.156 + 17.157 +* Android 17.158 +* BlackBerry 10 17.159 +* iOS 17.160 +* Tizen 17.161 +* Windows Phone 7 y 8 17.162 +* Windows 8 17.163 + 17.164 +### Ejemplo rápido 17.165 + 17.166 + // Android: devuelve un entero de 64 bits al azar (como una cadena, otra vez!) 17.167 + // el entero es generado en el primer arranque del dispositivo 17.168 + // 17.169 + // BlackBerry: devuelve el número PIN del dispositivo 17.170 + // este es un entero único de nueve dígitos (como una cadena, aunque!) 17.171 + // 17.172 + // iPhone: (parafraseado de la documentación de la clase UIDevice) 17.173 + // devuelve una cadena de valores hash creado a partir 17.174 + // de múltiples hardware identifica. 17.175 + / / Está garantizado para ser único para cada dispositivo y no puede ser atado / / a la cuenta de usuario. 17.176 + // Windows Phone 7: devuelve un hash de dispositivo + usuario actual, 17.177 + // si el usuario no está definido, un guid generado y persistirá hasta que se desinstala la aplicación 17.178 + // 17.179 + // Tizen: devuelve el dispositivo IMEI (identidad de equipo móvil internacional o IMEI es un número 17.180 + // único para cada teléfono móvil GSM y UMTS. 17.181 + var deviceID = device.uuid; 17.182 + 17.183 + 17.184 +### iOS chanfle 17.185 + 17.186 +El `uuid` en iOS no es exclusiva de un dispositivo, pero varía para cada aplicación, para cada instalación. Cambia si puedes borrar y volver a instalar la aplicación, y posiblemente también cuándo actualizar iOS, o incluso mejorar la aplicación por la versión (evidente en iOS 5.1). El `uuid` no es un valor confiable. 17.187 + 17.188 +### Windows Phone 7 y 8 rarezas 17.189 + 17.190 +El `uuid` para Windows Phone 7 requiere el permiso `ID_CAP_IDENTITY_DEVICE`. Microsoft pronto probablemente desaprueban esta propiedad. Si la capacidad no está disponible, la aplicación genera un guid persistente que se mantiene durante la duración de la instalación de la aplicación en el dispositivo. 17.191 + 17.192 +## device.version 17.193 + 17.194 +Obtener la versión del sistema operativo. 17.195 + 17.196 + var string = device.version; 17.197 + 17.198 + 17.199 +### Plataformas soportadas 17.200 + 17.201 +* Android 2.1 + 17.202 +* BlackBerry 10 17.203 +* Explorador 17.204 +* iOS 17.205 +* Tizen 17.206 +* Windows Phone 7 y 8 17.207 +* Windows 8 17.208 + 17.209 +### Ejemplo rápido 17.210 + 17.211 + // Android: Froyo OS would return "2.2" 17.212 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 17.213 + // Version can also return update level "2.1-update1" 17.214 + // 17.215 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 17.216 + // 17.217 + // Browser: Returns version number for the browser 17.218 + // 17.219 + // iPhone: iOS 3.2 returns "3.2" 17.220 + // 17.221 + // Windows Phone 7: returns current OS version number, ex. el Mango se vuelve 7.10.7720 17.222 + // Tizen: devuelve "TIZEN_20120425_2" 17.223 + var deviceVersion = device.version; 17.224 \ No newline at end of file
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 18.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/fr/index.md Thu Jun 04 14:50:33 2015 +0200 18.3 @@ -0,0 +1,218 @@ 18.4 +<!--- 18.5 + Licensed to the Apache Software Foundation (ASF) under one 18.6 + or more contributor license agreements. See the NOTICE file 18.7 + distributed with this work for additional information 18.8 + regarding copyright ownership. The ASF licenses this file 18.9 + to you under the Apache License, Version 2.0 (the 18.10 + "License"); you may not use this file except in compliance 18.11 + with the License. You may obtain a copy of the License at 18.12 + 18.13 + http://www.apache.org/licenses/LICENSE-2.0 18.14 + 18.15 + Unless required by applicable law or agreed to in writing, 18.16 + software distributed under the License is distributed on an 18.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18.18 + KIND, either express or implied. See the License for the 18.19 + specific language governing permissions and limitations 18.20 + under the License. 18.21 +--> 18.22 + 18.23 +# org.apache.cordova.device 18.24 + 18.25 +Ce plugin définit un global `device` objet qui décrit le matériel et les logiciels de l'appareil. Bien que l'objet est dans la portée globale, il n'est pas disponible jusqu'après la `deviceready` événement. 18.26 + 18.27 + document.addEventListener("deviceready", onDeviceReady, false); 18.28 + function onDeviceReady() { 18.29 + console.log(device.cordova); 18.30 + } 18.31 + 18.32 + 18.33 +## Installation 18.34 + 18.35 + cordova plugin add org.apache.cordova.device 18.36 + 18.37 + 18.38 +## Propriétés 18.39 + 18.40 +* device.cordova 18.41 +* device.model 18.42 +* device.platform 18.43 +* device.uuid 18.44 +* device.version 18.45 + 18.46 +## device.cordova 18.47 + 18.48 +Retourne la version de Cordova en cours d'exécution sur l'appareil. 18.49 + 18.50 +### Plates-formes prises en charge 18.51 + 18.52 +* Amazon Fire OS 18.53 +* Android 18.54 +* BlackBerry 10 18.55 +* Navigateur 18.56 +* Firefox OS 18.57 +* iOS 18.58 +* Paciarelli 18.59 +* Windows Phone 7 et 8 18.60 +* Windows 8 18.61 + 18.62 +## device.model 18.63 + 18.64 +L'objet `device.model` retourne le nom du modèle de l'appareil/produit. Cette valeur est définie par le fabricant du périphérique et peut varier entre les différentes versions d'un même produit. 18.65 + 18.66 +### Plates-formes prises en charge 18.67 + 18.68 +* Android 18.69 +* BlackBerry 10 18.70 +* Navigateur 18.71 +* iOS 18.72 +* Paciarelli 18.73 +* Windows Phone 7 et 8 18.74 +* Windows 8 18.75 + 18.76 +### Petit exemple 18.77 + 18.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 18.79 + // Motorola Droid returns "voles" 18.80 + // BlackBerry: Torch 9800 returns "9800" 18.81 + // Browser: Google Chrome returns "Chrome" 18.82 + // Safari returns "Safari" 18.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Voir http://theiphonewiki.com/wiki/index.php?title=Models 18.84 + // 18.85 + var model = device.model; 18.86 + 18.87 + 18.88 +### Quirks Android 18.89 + 18.90 +* Retourne le [nom du produit][1] au lieu du [nom du modèle][2], ce qui équivaut souvent au nom de code de production. Par exemple, `Passion` pour le Nexus One et `voles` pour le Motorola Droid. 18.91 + 18.92 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 18.93 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL 18.94 + 18.95 +### Bizarreries de paciarelli 18.96 + 18.97 +* Retourne le modèle du dispositif, assigné par le vendeur, par exemple `TIZEN` 18.98 + 18.99 +### Windows Phone 7 et 8 Quirks 18.100 + 18.101 +* Retourne le modèle de l'appareil spécifié par le fabricant. Par exemple `SGH-i917` pour le Samsung Focus. 18.102 + 18.103 +## device.platform 18.104 + 18.105 +Obtenir le nom de système d'exploitation de l'appareil. 18.106 + 18.107 + var string = device.platform; 18.108 + 18.109 + 18.110 +### Plates-formes prises en charge 18.111 + 18.112 +* Android 18.113 +* BlackBerry 10 18.114 +* Browser4 18.115 +* Firefox OS 18.116 +* iOS 18.117 +* Paciarelli 18.118 +* Windows Phone 7 et 8 18.119 +* Windows 8 18.120 + 18.121 +### Petit exemple 18.122 + 18.123 + // Depending on the device, a few examples are: 18.124 + // - "Android" 18.125 + // - "BlackBerry 10" 18.126 + // - Browser: returns "MacIntel" on Mac 18.127 + // returns "Win32" on Windows 18.128 + // - "iOS" 18.129 + // - "WinCE" 18.130 + // - "Tizen" 18.131 + var devicePlatform = device.platform; 18.132 + 18.133 + 18.134 +### Windows Phone 7 Quirks 18.135 + 18.136 +Appareils Windows Phone 7 rapport de la plate-forme comme`WinCE`. 18.137 + 18.138 +### Notes au sujet de Windows Phone 8 18.139 + 18.140 +Appareils Windows Phone 8 rapport de la plate-forme comme`Win32NT`. 18.141 + 18.142 +## device.uuid 18.143 + 18.144 +Obtenir Universally Unique Identifier de l'appareil ([UUID][3]). 18.145 + 18.146 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 18.147 + 18.148 + var string = device.uuid; 18.149 + 18.150 + 18.151 +### Description 18.152 + 18.153 +Les détails de comment un UUID généré sont déterminées par le fabricant du périphérique et sont spécifiques à la plate-forme ou le modèle de l'appareil. 18.154 + 18.155 +### Plates-formes prises en charge 18.156 + 18.157 +* Android 18.158 +* BlackBerry 10 18.159 +* iOS 18.160 +* Paciarelli 18.161 +* Windows Phone 7 et 8 18.162 +* Windows 8 18.163 + 18.164 +### Petit exemple 18.165 + 18.166 + // Android : retourne un nombre entier 64-bit aléatoire (sous la forme d'une chaîne de caractères, encore !) 18.167 + // Ce nombre entier est généré lors du premier démarrage de l'appareil 18.168 + // 18.169 + // BlackBerry : retourne le numéro PIN de l'appareil 18.170 + // Il s'agit d'un nombre entier unique à neuf chiffres (sous la forme d'une chaîne de caractères cependant !) 18.171 + // 18.172 + // iPhone : (copié depuis la documentation de la classe UIDevice) 18.173 + // Retourne une chaîne de caractères générée à partir de plusieurs caractéristiques matérielles. 18.174 + / / Il est garanti pour être unique pour chaque appareil et ne peut pas être lié / / pour le compte d'utilisateur. 18.175 + // Windows Phone 7 : retourne un hashage généré à partir de appareil+utilisateur actuel, 18.176 + // si aucun utilisateur n'est défini, un guid est généré persistera jusqu'à ce que l'application soit désinstallée 18.177 + // Tizen : retourne le numéro IMEI (International Mobile Equipment Identity) de l'appareil, ce numéro est 18.178 + // unique pour chaque téléphone GSM et UMTS. 18.179 + var deviceID = device.uuid; 18.180 + 18.181 + 18.182 +### Spécificités iOS 18.183 + 18.184 +Le `uuid` sur iOS n'est pas propre à un périphérique, mais varie pour chaque application, pour chaque installation. Elle change si vous supprimez, puis réinstallez l'application, et éventuellement aussi quand vous mettre à jour d'iOS, ou même mettre à jour le soft par version (apparent dans iOS 5.1). Le `uuid` n'est pas une valeur fiable. 18.185 + 18.186 +### Windows Phone 7 et 8 Quirks 18.187 + 18.188 +Le `uuid` pour Windows Phone 7 requiert l'autorisation `ID_CAP_IDENTITY_DEVICE` . Microsoft va probablement bientôt obsolète de cette propriété. Si la capacité n'est pas disponible, l'application génère un guid persistant qui est maintenu pendant toute la durée de l'installation de l'application sur le périphérique. 18.189 + 18.190 +## device.version 18.191 + 18.192 +Téléchargez la version de système d'exploitation. 18.193 + 18.194 + var string = device.version; 18.195 + 18.196 + 18.197 +### Plates-formes prises en charge 18.198 + 18.199 +* Android 2.1+ 18.200 +* BlackBerry 10 18.201 +* Navigateur 18.202 +* iOS 18.203 +* Paciarelli 18.204 +* Windows Phone 7 et 8 18.205 +* Windows 8 18.206 + 18.207 +### Petit exemple 18.208 + 18.209 + // Android: Froyo OS would return "2.2" 18.210 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 18.211 + // Version can also return update level "2.1-update1" 18.212 + // 18.213 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 18.214 + // 18.215 + // Browser: Returns version number for the browser 18.216 + // 18.217 + // iPhone: iOS 3.2 returns "3.2" 18.218 + // 18.219 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 18.220 + // Tizen: returns "TIZEN_20120425_2" 18.221 + var deviceVersion = device.version; 18.222 \ No newline at end of file
19.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 19.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/index.md Thu Jun 04 14:50:33 2015 +0200 19.3 @@ -0,0 +1,218 @@ 19.4 +<!--- 19.5 + Licensed to the Apache Software Foundation (ASF) under one 19.6 + or more contributor license agreements. See the NOTICE file 19.7 + distributed with this work for additional information 19.8 + regarding copyright ownership. The ASF licenses this file 19.9 + to you under the Apache License, Version 2.0 (the 19.10 + "License"); you may not use this file except in compliance 19.11 + with the License. You may obtain a copy of the License at 19.12 + 19.13 + http://www.apache.org/licenses/LICENSE-2.0 19.14 + 19.15 + Unless required by applicable law or agreed to in writing, 19.16 + software distributed under the License is distributed on an 19.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19.18 + KIND, either express or implied. See the License for the 19.19 + specific language governing permissions and limitations 19.20 + under the License. 19.21 +--> 19.22 + 19.23 +# org.apache.cordova.device 19.24 + 19.25 +This plugin defines a global `device` object, which describes the device's hardware and software. 19.26 +Although the object is in the global scope, it is not available until after the `deviceready` event. 19.27 + 19.28 + document.addEventListener("deviceready", onDeviceReady, false); 19.29 + function onDeviceReady() { 19.30 + console.log(device.cordova); 19.31 + } 19.32 + 19.33 +## Installation 19.34 + 19.35 + cordova plugin add org.apache.cordova.device 19.36 + 19.37 +## Properties 19.38 + 19.39 +- device.cordova 19.40 +- device.model 19.41 +- device.platform 19.42 +- device.uuid 19.43 +- device.version 19.44 + 19.45 +## device.cordova 19.46 + 19.47 +Get the version of Cordova running on the device. 19.48 + 19.49 +### Supported Platforms 19.50 + 19.51 +- Amazon Fire OS 19.52 +- Android 19.53 +- BlackBerry 10 19.54 +- Browser 19.55 +- Firefox OS 19.56 +- iOS 19.57 +- Tizen 19.58 +- Windows Phone 7 and 8 19.59 +- Windows 8 19.60 + 19.61 +## device.model 19.62 + 19.63 +The `device.model` returns the name of the device's model or 19.64 +product. The value is set by the device manufacturer and may be 19.65 +different across versions of the same product. 19.66 + 19.67 +### Supported Platforms 19.68 + 19.69 +- Android 19.70 +- BlackBerry 10 19.71 +- Browser 19.72 +- iOS 19.73 +- Tizen 19.74 +- Windows Phone 7 and 8 19.75 +- Windows 8 19.76 + 19.77 +### Quick Example 19.78 + 19.79 + // Android: Nexus One returns "Passion" (Nexus One code name) 19.80 + // Motorola Droid returns "voles" 19.81 + // BlackBerry: Torch 9800 returns "9800" 19.82 + // Browser: Google Chrome returns "Chrome" 19.83 + // Safari returns "Safari" 19.84 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models 19.85 + // 19.86 + var model = device.model; 19.87 + 19.88 +### Android Quirks 19.89 + 19.90 +- Gets the [product name](http://developer.android.com/reference/android/os/Build.html#PRODUCT) instead of the [model name](http://developer.android.com/reference/android/os/Build.html#MODEL), which is often the production code name. For example, the Nexus One returns `Passion`, and Motorola Droid returns `voles`. 19.91 + 19.92 +### Tizen Quirks 19.93 + 19.94 +- Returns the device model assigned by the vendor, for example, `TIZEN` 19.95 + 19.96 +### Windows Phone 7 and 8 Quirks 19.97 + 19.98 +- Returns the device model specified by the manufacturer. For example, the Samsung Focus returns `SGH-i917`. 19.99 + 19.100 +## device.platform 19.101 + 19.102 +Get the device's operating system name. 19.103 + 19.104 + var string = device.platform; 19.105 + 19.106 +### Supported Platforms 19.107 + 19.108 +- Android 19.109 +- BlackBerry 10 19.110 +- Browser4 19.111 +- Firefox OS 19.112 +- iOS 19.113 +- Tizen 19.114 +- Windows Phone 7 and 8 19.115 +- Windows 8 19.116 + 19.117 +### Quick Example 19.118 + 19.119 + // Depending on the device, a few examples are: 19.120 + // - "Android" 19.121 + // - "BlackBerry 10" 19.122 + // - Browser: returns "MacIntel" on Mac 19.123 + // returns "Win32" on Windows 19.124 + // - "iOS" 19.125 + // - "WinCE" 19.126 + // - "Tizen" 19.127 + var devicePlatform = device.platform; 19.128 + 19.129 +### Windows Phone 7 Quirks 19.130 + 19.131 +Windows Phone 7 devices report the platform as `WinCE`. 19.132 + 19.133 +### Windows Phone 8 Quirks 19.134 + 19.135 +Windows Phone 8 devices report the platform as `Win32NT`. 19.136 + 19.137 +## device.uuid 19.138 + 19.139 +Get the device's Universally Unique Identifier ([UUID](http://en.wikipedia.org/wiki/Universally_Unique_Identifier)). 19.140 + 19.141 + var string = device.uuid; 19.142 + 19.143 +### Description 19.144 + 19.145 +The details of how a UUID is generated are determined by the device manufacturer and are specific to the device's platform or model. 19.146 + 19.147 +### Supported Platforms 19.148 + 19.149 +- Android 19.150 +- BlackBerry 10 19.151 +- iOS 19.152 +- Tizen 19.153 +- Windows Phone 7 and 8 19.154 +- Windows 8 19.155 + 19.156 +### Quick Example 19.157 + 19.158 + // Android: Returns a random 64-bit integer (as a string, again!) 19.159 + // The integer is generated on the device's first boot 19.160 + // 19.161 + // BlackBerry: Returns the PIN number of the device 19.162 + // This is a nine-digit unique integer (as a string, though!) 19.163 + // 19.164 + // iPhone: (Paraphrased from the UIDevice Class documentation) 19.165 + // Returns a string of hash values created from multiple hardware identifies. 19.166 + // It is guaranteed to be unique for every device and can't be tied 19.167 + // to the user account. 19.168 + // Windows Phone 7 : Returns a hash of device+current user, 19.169 + // if the user is not defined, a guid is generated and will persist until the app is uninstalled 19.170 + // Tizen: returns the device IMEI (International Mobile Equipment Identity or IMEI is a number 19.171 + // unique to every GSM and UMTS mobile phone. 19.172 + var deviceID = device.uuid; 19.173 + 19.174 +### iOS Quirk 19.175 + 19.176 +The `uuid` on iOS is not unique to a device, but varies for each 19.177 +application, for each installation. It changes if you delete and 19.178 +re-install the app, and possibly also when you upgrade iOS, or even 19.179 +upgrade the app per version (apparent in iOS 5.1). The `uuid` is not 19.180 +a reliable value. 19.181 + 19.182 +### Windows Phone 7 and 8 Quirks 19.183 + 19.184 +The `uuid` for Windows Phone 7 requires the permission 19.185 +`ID_CAP_IDENTITY_DEVICE`. Microsoft will likely deprecate this 19.186 +property soon. If the capability is not available, the application 19.187 +generates a persistent guid that is maintained for the duration of the 19.188 +application's installation on the device. 19.189 + 19.190 +## device.version 19.191 + 19.192 +Get the operating system version. 19.193 + 19.194 + var string = device.version; 19.195 + 19.196 +### Supported Platforms 19.197 + 19.198 +- Android 2.1+ 19.199 +- BlackBerry 10 19.200 +- Browser 19.201 +- iOS 19.202 +- Tizen 19.203 +- Windows Phone 7 and 8 19.204 +- Windows 8 19.205 + 19.206 +### Quick Example 19.207 + 19.208 + // Android: Froyo OS would return "2.2" 19.209 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 19.210 + // Version can also return update level "2.1-update1" 19.211 + // 19.212 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 19.213 + // 19.214 + // Browser: Returns version number for the browser 19.215 + // 19.216 + // iPhone: iOS 3.2 returns "3.2" 19.217 + // 19.218 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 19.219 + // Tizen: returns "TIZEN_20120425_2" 19.220 + var deviceVersion = device.version; 19.221 +
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 20.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/it/index.md Thu Jun 04 14:50:33 2015 +0200 20.3 @@ -0,0 +1,206 @@ 20.4 +<!--- 20.5 + Licensed to the Apache Software Foundation (ASF) under one 20.6 + or more contributor license agreements. See the NOTICE file 20.7 + distributed with this work for additional information 20.8 + regarding copyright ownership. The ASF licenses this file 20.9 + to you under the Apache License, Version 2.0 (the 20.10 + "License"); you may not use this file except in compliance 20.11 + with the License. You may obtain a copy of the License at 20.12 + 20.13 + http://www.apache.org/licenses/LICENSE-2.0 20.14 + 20.15 + Unless required by applicable law or agreed to in writing, 20.16 + software distributed under the License is distributed on an 20.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 20.18 + KIND, either express or implied. See the License for the 20.19 + specific language governing permissions and limitations 20.20 + under the License. 20.21 +--> 20.22 + 20.23 +# org.apache.cordova.device 20.24 + 20.25 +Questo plugin definisce un global `device` oggetto che descrive il dispositivo hardware e software. Sebbene l'oggetto sia in ambito globale, non è disponibile fino a dopo il `deviceready` evento. 20.26 + 20.27 + document.addEventListener("deviceready", onDeviceReady, false); 20.28 + function onDeviceReady() { 20.29 + console.log(device.cordova); 20.30 + } 20.31 + 20.32 + 20.33 +## Installazione 20.34 + 20.35 + cordova plugin add org.apache.cordova.device 20.36 + 20.37 + 20.38 +## Proprietà 20.39 + 20.40 +* device.cordova 20.41 +* device.model 20.42 +* device.platform 20.43 +* device.uuid 20.44 +* device.version 20.45 + 20.46 +## device.cordova 20.47 + 20.48 +Ottenere la versione di Cordova in esecuzione nel dispositivo. 20.49 + 20.50 +### Piattaforme supportate 20.51 + 20.52 +* Amazon fuoco OS 20.53 +* Android 20.54 +* BlackBerry 10 20.55 +* Browser 20.56 +* Firefox OS 20.57 +* iOS 20.58 +* Tizen 20.59 +* Windows Phone 7 e 8 20.60 +* Windows 8 20.61 + 20.62 +## device.model 20.63 + 20.64 +Il `device.model` restituisce il nome del modello del dispositivo o del prodotto. Il valore viene impostato dal produttore del dispositivo e può essere differente tra le versioni dello stesso prodotto. 20.65 + 20.66 +### Piattaforme supportate 20.67 + 20.68 +* Android 20.69 +* BlackBerry 10 20.70 +* Browser 20.71 +* iOS 20.72 +* Tizen 20.73 +* Windows Phone 7 e 8 20.74 +* Windows 8 20.75 + 20.76 +### Esempio rapido 20.77 + 20.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 20.79 + // Motorola Droid returns "voles" 20.80 + // BlackBerry: Torch 9800 returns "9800" 20.81 + // Browser: Google Chrome returns "Chrome" 20.82 + // Safari returns "Safari" 20.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Vedi http://theiphonewiki.com/wiki/index.php?title=Models / / modello var = device.model; 20.84 + 20.85 + 20.86 +### Stranezze Android 20.87 + 20.88 +* Ottiene il [nome del prodotto][1] anziché il [nome del modello][2], che è spesso il nome di codice di produzione. Ad esempio, restituisce il Nexus One `Passion` , e Motorola Droid restituisce`voles`. 20.89 + 20.90 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 20.91 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL 20.92 + 20.93 +### Tizen stranezze 20.94 + 20.95 +* Restituisce il modello di dispositivo assegnato dal fornitore, ad esempio,`TIZEN` 20.96 + 20.97 +### Windows Phone 7 e 8 stranezze 20.98 + 20.99 +* Restituisce il modello di dispositivo specificato dal produttore. Ad esempio, restituisce il Samsung Focus`SGH-i917`. 20.100 + 20.101 +## device.platform 20.102 + 20.103 +Ottenere il nome del sistema operativo del dispositivo. 20.104 + 20.105 + var string = device.platform; 20.106 + 20.107 + 20.108 +### Piattaforme supportate 20.109 + 20.110 +* Android 20.111 +* BlackBerry 10 20.112 +* Browser4 20.113 +* Firefox OS 20.114 +* iOS 20.115 +* Tizen 20.116 +* Windows Phone 7 e 8 20.117 +* Windows 8 20.118 + 20.119 +### Esempio rapido 20.120 + 20.121 + // Depending on the device, a few examples are: 20.122 + // - "Android" 20.123 + // - "BlackBerry 10" 20.124 + // - Browser: returns "MacIntel" on Mac 20.125 + // returns "Win32" on Windows 20.126 + // - "iOS" 20.127 + // - "WinCE" 20.128 + // - "Tizen" 20.129 + var devicePlatform = device.platform; 20.130 + 20.131 + 20.132 +### Windows Phone 7 capricci 20.133 + 20.134 +Windows Phone 7 dispositivi segnalano la piattaforma come`WinCE`. 20.135 + 20.136 +### Windows Phone 8 stranezze 20.137 + 20.138 +Dispositivi Windows Phone 8 segnalano la piattaforma come`Win32NT`. 20.139 + 20.140 +## device.uuid 20.141 + 20.142 +Ottenere identificatore del dispositivo univoco universale ([UUID][3]). 20.143 + 20.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 20.145 + 20.146 + var string = device.uuid; 20.147 + 20.148 + 20.149 +### Descrizione 20.150 + 20.151 +I dettagli di come viene generato un UUID sono determinati dal produttore del dispositivo e sono specifici per la piattaforma o il modello del dispositivo. 20.152 + 20.153 +### Piattaforme supportate 20.154 + 20.155 +* Android 20.156 +* BlackBerry 10 20.157 +* iOS 20.158 +* Tizen 20.159 +* Windows Phone 7 e 8 20.160 +* Windows 8 20.161 + 20.162 +### Esempio rapido 20.163 + 20.164 + / / Android: restituisce un intero casuale di 64 bit (come stringa, ancora una volta!) / / il numero intero è generato al primo avvio del dispositivo / / / / BlackBerry: restituisce il numero PIN del dispositivo / / questo è un valore integer univoco a nove cifre (come stringa, benchè!) / / / / iPhone: (parafrasato dalla documentazione della classe UIDevice) / / restituisce una stringa di valori hash creata dall'hardware più identifica. 20.165 + / / È garantito per essere unica per ogni dispositivo e non può essere legato / / per l'account utente. 20.166 + / / Windows Phone 7: restituisce un hash dell'utente corrente, + dispositivo / / se l'utente non è definito, un guid generato e persisterà fino a quando l'applicazione viene disinstallata / / Tizen: restituisce il dispositivo IMEI (International Mobile Equipment Identity o IMEI è un numero / / unico per ogni cellulare GSM e UMTS. 20.167 + var deviceID = device.uuid; 20.168 + 20.169 + 20.170 +### iOS Quirk 20.171 + 20.172 +Il `uuid` su iOS non è univoco per un dispositivo, ma varia per ogni applicazione, per ogni installazione. Cambia se si elimina e re-installare l'app, e possibilmente anche quando aggiornare iOS o anche aggiornare l'app per ogni versione (apparente in iOS 5.1). Il `uuid` non è un valore affidabile. 20.173 + 20.174 +### Windows Phone 7 e 8 stranezze 20.175 + 20.176 +Il `uuid` per Windows Phone 7 richiede l'autorizzazione `ID_CAP_IDENTITY_DEVICE` . Microsoft probabilmente sarà presto deprecare questa proprietà. Se la funzionalità non è disponibile, l'applicazione genera un guid persistente che viene mantenuto per la durata dell'installazione dell'applicazione sul dispositivo. 20.177 + 20.178 +## device.version 20.179 + 20.180 +Ottenere la versione del sistema operativo. 20.181 + 20.182 + var string = device.version; 20.183 + 20.184 + 20.185 +### Piattaforme supportate 20.186 + 20.187 +* Android 2.1 + 20.188 +* BlackBerry 10 20.189 +* Browser 20.190 +* iOS 20.191 +* Tizen 20.192 +* Windows Phone 7 e 8 20.193 +* Windows 8 20.194 + 20.195 +### Esempio rapido 20.196 + 20.197 + // Android: Froyo OS would return "2.2" 20.198 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 20.199 + // Version can also return update level "2.1-update1" 20.200 + // 20.201 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 20.202 + // 20.203 + // Browser: Returns version number for the browser 20.204 + // 20.205 + // iPhone: iOS 3.2 returns "3.2" 20.206 + // 20.207 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 20.208 + // Tizen: returns "TIZEN_20120425_2" 20.209 + var deviceVersion = device.version; 20.210 \ No newline at end of file
21.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 21.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/ja/index.md Thu Jun 04 14:50:33 2015 +0200 21.3 @@ -0,0 +1,206 @@ 21.4 +<!--- 21.5 + Licensed to the Apache Software Foundation (ASF) under one 21.6 + or more contributor license agreements. See the NOTICE file 21.7 + distributed with this work for additional information 21.8 + regarding copyright ownership. The ASF licenses this file 21.9 + to you under the Apache License, Version 2.0 (the 21.10 + "License"); you may not use this file except in compliance 21.11 + with the License. You may obtain a copy of the License at 21.12 + 21.13 + http://www.apache.org/licenses/LICENSE-2.0 21.14 + 21.15 + Unless required by applicable law or agreed to in writing, 21.16 + software distributed under the License is distributed on an 21.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 21.18 + KIND, either express or implied. See the License for the 21.19 + specific language governing permissions and limitations 21.20 + under the License. 21.21 +--> 21.22 + 21.23 +# org.apache.cordova.device 21.24 + 21.25 +このプラグインをグローバル定義します `device` オブジェクトは、デバイスのハードウェアとソフトウェアについて説明します。 それは後まで利用可能なオブジェクトがグローバル スコープでは、 `deviceready` イベント。 21.26 + 21.27 + document.addEventListener("deviceready", onDeviceReady, false); 21.28 + function onDeviceReady() { 21.29 + console.log(device.cordova); 21.30 + } 21.31 + 21.32 + 21.33 +## インストール 21.34 + 21.35 + cordova plugin add org.apache.cordova.device 21.36 + 21.37 + 21.38 +## プロパティ 21.39 + 21.40 +* device.cordova 21.41 +* device.model 21.42 +* device.platform 21.43 +* device.uuid 21.44 +* device.version 21.45 + 21.46 +## device.cordova 21.47 + 21.48 +デバイスで実行されているコルドバのバージョンを取得します。 21.49 + 21.50 +### サポートされているプラットフォーム 21.51 + 21.52 +* アマゾン火 OS 21.53 +* アンドロイド 21.54 +* ブラックベリー 10 21.55 +* ブラウザー 21.56 +* Firefox の OS 21.57 +* iOS 21.58 +* Tizen 21.59 +* Windows Phone 7 と 8 21.60 +* Windows 8 21.61 + 21.62 +## device.model 21.63 + 21.64 +`device.model`、デバイスのモデルまたは製品の名前を返します。値は、デバイスの製造元によって設定され、同じ製品のバージョン間で異なる可能性があります。 21.65 + 21.66 +### サポートされているプラットフォーム 21.67 + 21.68 +* アンドロイド 21.69 +* ブラックベリー 10 21.70 +* ブラウザー 21.71 +* iOS 21.72 +* Tizen 21.73 +* Windows Phone 7 と 8 21.74 +* Windows 8 21.75 + 21.76 +### 簡単な例 21.77 + 21.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 21.79 + // Motorola Droid returns "voles" 21.80 + // BlackBerry: Torch 9800 returns "9800" 21.81 + // Browser: Google Chrome returns "Chrome" 21.82 + // Safari returns "Safari" 21.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Http://theiphonewiki.com/wiki/index.php?title=Models を参照してください//var モデル = device.model; 21.84 + 21.85 + 21.86 +### Android の癖 21.87 + 21.88 +* 生産コード名は[モデル名][1]の代わりに[製品名][2]を取得します。 たとえば、ネクサス 1 つを返します `Passion` 、Motorola のドロイドを返します`voles`. 21.89 + 21.90 + [1]: http://developer.android.com/reference/android/os/Build.html#MODEL 21.91 + [2]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 21.92 + 21.93 +### Tizen の癖 21.94 + 21.95 +* たとえば、ベンダーによって割り当てられているデバイスのモデルを返します`TIZEN` 21.96 + 21.97 +### Windows Phone 7 と 8 癖 21.98 + 21.99 +* 製造元によって指定されたデバイスのモデルを返します。たとえば、三星フォーカスを返します`SGH-i917`. 21.100 + 21.101 +## device.platform 21.102 + 21.103 +デバイスのオペレーティング システム名を取得します。 21.104 + 21.105 + var string = device.platform; 21.106 + 21.107 + 21.108 +### サポートされているプラットフォーム 21.109 + 21.110 +* アンドロイド 21.111 +* ブラックベリー 10 21.112 +* Browser4 21.113 +* Firefox の OS 21.114 +* iOS 21.115 +* Tizen 21.116 +* Windows Phone 7 と 8 21.117 +* Windows 8 21.118 + 21.119 +### 簡単な例 21.120 + 21.121 + // Depending on the device, a few examples are: 21.122 + // - "Android" 21.123 + // - "BlackBerry 10" 21.124 + // - Browser: returns "MacIntel" on Mac 21.125 + // returns "Win32" on Windows 21.126 + // - "iOS" 21.127 + // - "WinCE" 21.128 + // - "Tizen" 21.129 + var devicePlatform = device.platform; 21.130 + 21.131 + 21.132 +### Windows Phone 7 の癖 21.133 + 21.134 +Windows Phone 7 デバイスとプラットフォームを報告します。`WinCE`. 21.135 + 21.136 +### Windows Phone 8 癖 21.137 + 21.138 +Windows Phone 8 デバイスとプラットフォームを報告します。`Win32NT`. 21.139 + 21.140 +## device.uuid 21.141 + 21.142 +デバイスのユニバーサル ・ ユニーク識別子 ([UUID][3]を取得します。). 21.143 + 21.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 21.145 + 21.146 + var string = device.uuid; 21.147 + 21.148 + 21.149 +### 説明 21.150 + 21.151 +UUID を生成する方法の詳細は、デバイスの製造元によって決定され、デバイスのプラットフォームやモデルに固有です。 21.152 + 21.153 +### サポートされているプラットフォーム 21.154 + 21.155 +* アンドロイド 21.156 +* ブラックベリー 10 21.157 +* iOS 21.158 +* Tizen 21.159 +* Windows Phone 7 と 8 21.160 +* Windows 8 21.161 + 21.162 +### 簡単な例 21.163 + 21.164 + //アンドロイド: ランダムな 64 ビットの整数 (を文字列として返します、再び !)/デバイスの最初の起動時に生成される整数/////ブラックベリー: デバイスのピン番号を返します//これは 9 桁の一意な整数 (を文字列としても !)////iPhone: (UIDevice クラスのドキュメントから言い換え)//識別複数のハードウェアから作成されたハッシュ値の文字列を返します。。 21.165 + //それはすべてのデバイスに対して一意であることが保証され、接続することはできません//ユーザー アカウント。 21.166 + //Windows Phone 7: デバイス + 現在のユーザーのハッシュを返します//ユーザーが定義されていない場合 guid が生成され、アプリがアンインストールされるまで保持されます//Tizen: デバイスの IMEI を返します (国際モバイル機器アイデンティティまたは IMEI は番号です//すべての GSM および UMTS の携帯電話に固有です。 21.167 + var deviceID = device.uuid; 21.168 + 21.169 + 21.170 +### iOS の気まぐれ 21.171 + 21.172 +`uuid`IOS で、デバイスに固有ではないインストールごと、アプリケーションごとに異なります。 削除、アプリを再インストールした場合に変更と多分またときアップグレード iOS の, またはもアップグレードするアプリ (iOS の 5.1 で明らかに) バージョンごと。 `uuid`は信頼性の高い値ではありません。 21.173 + 21.174 +### Windows Phone 7 と 8 癖 21.175 + 21.176 +`uuid`のために Windows Phone 7 には、権限が必要です `ID_CAP_IDENTITY_DEVICE` 。 Microsoft はすぐにこのプロパティを廃止して可能性があります。 機能が利用できない場合、アプリケーションはデバイスへのアプリケーションのインストールの持続期間のために保持されている永続的な guid を生成します。 21.177 + 21.178 +## device.version 21.179 + 21.180 +オペレーティング システムのバージョンを取得します。 21.181 + 21.182 + var string = device.version; 21.183 + 21.184 + 21.185 +### サポートされているプラットフォーム 21.186 + 21.187 +* アンドロイド 2.1 + 21.188 +* ブラックベリー 10 21.189 +* ブラウザー 21.190 +* iOS 21.191 +* Tizen 21.192 +* Windows Phone 7 と 8 21.193 +* Windows 8 21.194 + 21.195 +### 簡単な例 21.196 + 21.197 + // Android: Froyo OS would return "2.2" 21.198 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 21.199 + // Version can also return update level "2.1-update1" 21.200 + // 21.201 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 21.202 + // 21.203 + // Browser: Returns version number for the browser 21.204 + // 21.205 + // iPhone: iOS 3.2 returns "3.2" 21.206 + // 21.207 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 21.208 + // Tizen: returns "TIZEN_20120425_2" 21.209 + var deviceVersion = device.version; 21.210 \ No newline at end of file
22.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 22.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/ko/index.md Thu Jun 04 14:50:33 2015 +0200 22.3 @@ -0,0 +1,206 @@ 22.4 +<!--- 22.5 + Licensed to the Apache Software Foundation (ASF) under one 22.6 + or more contributor license agreements. See the NOTICE file 22.7 + distributed with this work for additional information 22.8 + regarding copyright ownership. The ASF licenses this file 22.9 + to you under the Apache License, Version 2.0 (the 22.10 + "License"); you may not use this file except in compliance 22.11 + with the License. You may obtain a copy of the License at 22.12 + 22.13 + http://www.apache.org/licenses/LICENSE-2.0 22.14 + 22.15 + Unless required by applicable law or agreed to in writing, 22.16 + software distributed under the License is distributed on an 22.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 22.18 + KIND, either express or implied. See the License for the 22.19 + specific language governing permissions and limitations 22.20 + under the License. 22.21 +--> 22.22 + 22.23 +# org.apache.cordova.device 22.24 + 22.25 +이 플러그인 정의 전역 `device` 개체, 디바이스의 하드웨어 및 소프트웨어에 설명 합니다. 개체는 전역 범위에서 비록 그것은 후까지 사용할 수 있는 `deviceready` 이벤트. 22.26 + 22.27 + document.addEventListener("deviceready", onDeviceReady, false); 22.28 + function onDeviceReady() { 22.29 + console.log(device.cordova); 22.30 + } 22.31 + 22.32 + 22.33 +## 설치 22.34 + 22.35 + cordova plugin add org.apache.cordova.device 22.36 + 22.37 + 22.38 +## 속성 22.39 + 22.40 +* device.cordova 22.41 +* device.model 22.42 +* device.platform 22.43 +* device.uuid 22.44 +* device.version 22.45 + 22.46 +## device.cordova 22.47 + 22.48 +코르도바는 장치에서 실행 중인 버전을 얻을. 22.49 + 22.50 +### 지원 되는 플랫폼 22.51 + 22.52 +* 아마존 화재 운영 체제 22.53 +* 안 드 로이드 22.54 +* 블랙베리 10 22.55 +* 브라우저 22.56 +* Firefox 운영 체제 22.57 +* iOS 22.58 +* Tizen 22.59 +* Windows Phone 7과 8 22.60 +* 윈도우 8 22.61 + 22.62 +## device.model 22.63 + 22.64 +`device.model`소자의 모델 또는 제품의 이름을 반환 합니다. 값 장치 제조업체에서 설정 되 고 동일 제품의 버전 간에 다를 수 있습니다. 22.65 + 22.66 +### 지원 되는 플랫폼 22.67 + 22.68 +* 안 드 로이드 22.69 +* 블랙베리 10 22.70 +* 브라우저 22.71 +* iOS 22.72 +* Tizen 22.73 +* Windows Phone 7과 8 22.74 +* 윈도우 8 22.75 + 22.76 +### 빠른 예제 22.77 + 22.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 22.79 + // Motorola Droid returns "voles" 22.80 + // BlackBerry: Torch 9800 returns "9800" 22.81 + // Browser: Google Chrome returns "Chrome" 22.82 + // Safari returns "Safari" 22.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Http://theiphonewiki.com/wiki/index.php?title=Models 참조 / / var 모델 = device.model; 22.84 + 22.85 + 22.86 +### 안 드 로이드 단점 22.87 + 22.88 +* 어떤은 종종 프로덕션 코드 이름 대신 [제품 모델 이름][1], [제품 이름][2] 을 가져옵니다. 예를 들어 넥서스 하나 반환 합니다 `Passion` , 모토로라 Droid를 반환 합니다`voles`. 22.89 + 22.90 + [1]: http://developer.android.com/reference/android/os/Build.html#MODEL 22.91 + [2]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 22.92 + 22.93 +### Tizen 특수 22.94 + 22.95 +* 예를 들어, 공급 업체에 의해 할당 된 디바이스 모델을 반환 합니다.`TIZEN` 22.96 + 22.97 +### Windows Phone 7, 8 특수 22.98 + 22.99 +* 제조업체에서 지정 하는 장치 모델을 반환 합니다. 예를 들어 삼성 포커스를 반환 합니다.`SGH-i917`. 22.100 + 22.101 +## device.platform 22.102 + 22.103 +장치의 운영 체제 이름을 얻을. 22.104 + 22.105 + var string = device.platform; 22.106 + 22.107 + 22.108 +### 지원 되는 플랫폼 22.109 + 22.110 +* 안 드 로이드 22.111 +* 블랙베리 10 22.112 +* Browser4 22.113 +* Firefox 운영 체제 22.114 +* iOS 22.115 +* Tizen 22.116 +* Windows Phone 7과 8 22.117 +* 윈도우 8 22.118 + 22.119 +### 빠른 예제 22.120 + 22.121 + // Depending on the device, a few examples are: 22.122 + // - "Android" 22.123 + // - "BlackBerry 10" 22.124 + // - Browser: returns "MacIntel" on Mac 22.125 + // returns "Win32" on Windows 22.126 + // - "iOS" 22.127 + // - "WinCE" 22.128 + // - "Tizen" 22.129 + var devicePlatform = device.platform; 22.130 + 22.131 + 22.132 +### Windows Phone 7 단점 22.133 + 22.134 +Windows Phone 7 장치 보고 플랫폼으로`WinCE`. 22.135 + 22.136 +### Windows Phone 8 단점 22.137 + 22.138 +Windows Phone 8 장치 보고 플랫폼으로`Win32NT`. 22.139 + 22.140 +## device.uuid 22.141 + 22.142 +소자의 보편적으로 고유 식별자 ([UUID][3] 를 얻을합니다). 22.143 + 22.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 22.145 + 22.146 + var string = device.uuid; 22.147 + 22.148 + 22.149 +### 설명 22.150 + 22.151 +UUID 생성 방법의 자세한 내용은 장치 제조업체에 의해 결정 됩니다 및 소자의 플랫폼 이나 모델. 22.152 + 22.153 +### 지원 되는 플랫폼 22.154 + 22.155 +* 안 드 로이드 22.156 +* 블랙베리 10 22.157 +* iOS 22.158 +* Tizen 22.159 +* Windows Phone 7과 8 22.160 +* 윈도우 8 22.161 + 22.162 +### 빠른 예제 22.163 + 22.164 + / / 안 드 로이드: (문자열로 다시!) 임의의 64 비트 정수를 반환 합니다 / / 정수 장치의 첫 번째 부팅에서 생성 / / / / 블랙베리: 디바이스의 핀 번호를 반환 합니다 / / 이것은 9 자리 고유 정수 (문자열로 비록!) / / / / 아이폰: (UIDevice 클래스 설명서에서 읊 었) / / 문자열 여러 하드웨어에서 생성 하는 해시 값을 식별 하는 반환 합니다. 22.165 + / 그것은 모든 장치에 대 한 고유 해야 보장 되 고 묶일 수 없습니다 / / / 사용자 계정에. 22.166 + / / Windows Phone 7: 장치 + 현재 사용자의 해시를 반환 합니다 / / 사용자 정의 되지 않은 경우 guid 생성 되 고 응용 프로그램을 제거할 때까지 유지 됩니다 / / Tizen: 반환 장치 IMEI (국제 모바일 기기 식별 또는 IMEI 숫자입니다 / / 모든 GSM와 UMTS 휴대 전화 고유. 22.167 + var deviceID = device.uuid; 22.168 + 22.169 + 22.170 +### iOS 특질 22.171 + 22.172 +`uuid`ios 장치에 고유 하지 않습니다 하지만 각 설치에 대 한 응용 프로그램 마다 다릅니다. 삭제 하 고 다시 애플 리 케이 션을 설치 하는 경우 변경 가능 하 게 또한 iOS를 업그레이드 하거나 때 버전 (iOS 5.1에에서 명백한) 당 응용 프로그램 업그레이드도 하 고. `uuid`은 신뢰할 수 있는 값이 아닙니다. 22.173 + 22.174 +### Windows Phone 7, 8 특수 22.175 + 22.176 +`uuid`Windows Phone 7 필요 허가 `ID_CAP_IDENTITY_DEVICE` . Microsoft는 곧이 속성을 세웁니다 가능성이 것입니다. 기능을 사용할 수 없는 경우 응용 프로그램 장치에 응용 프로그램의 설치 하는 동안 유지 하는 영구 guid를 생성 합니다. 22.177 + 22.178 +## device.version 22.179 + 22.180 +운영 체제 버전을 얻을. 22.181 + 22.182 + var string = device.version; 22.183 + 22.184 + 22.185 +### 지원 되는 플랫폼 22.186 + 22.187 +* 안 드 로이드 2.1 + 22.188 +* 블랙베리 10 22.189 +* 브라우저 22.190 +* iOS 22.191 +* Tizen 22.192 +* Windows Phone 7과 8 22.193 +* 윈도우 8 22.194 + 22.195 +### 빠른 예제 22.196 + 22.197 + // Android: Froyo OS would return "2.2" 22.198 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 22.199 + // Version can also return update level "2.1-update1" 22.200 + // 22.201 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 22.202 + // 22.203 + // Browser: Returns version number for the browser 22.204 + // 22.205 + // iPhone: iOS 3.2 returns "3.2" 22.206 + // 22.207 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 22.208 + // Tizen: returns "TIZEN_20120425_2" 22.209 + var deviceVersion = device.version; 22.210 \ No newline at end of file
23.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 23.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/pl/index.md Thu Jun 04 14:50:33 2015 +0200 23.3 @@ -0,0 +1,206 @@ 23.4 +<!--- 23.5 + Licensed to the Apache Software Foundation (ASF) under one 23.6 + or more contributor license agreements. See the NOTICE file 23.7 + distributed with this work for additional information 23.8 + regarding copyright ownership. The ASF licenses this file 23.9 + to you under the Apache License, Version 2.0 (the 23.10 + "License"); you may not use this file except in compliance 23.11 + with the License. You may obtain a copy of the License at 23.12 + 23.13 + http://www.apache.org/licenses/LICENSE-2.0 23.14 + 23.15 + Unless required by applicable law or agreed to in writing, 23.16 + software distributed under the License is distributed on an 23.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 23.18 + KIND, either express or implied. See the License for the 23.19 + specific language governing permissions and limitations 23.20 + under the License. 23.21 +--> 23.22 + 23.23 +# org.apache.cordova.device 23.24 + 23.25 +Ten plugin określa globalne `device` obiekt, który opisuje urządzenia sprzętowe i programowe. Mimo, że obiekt jest w globalnym zasięgu, nie jest dostępne dopiero po `deviceready` zdarzenie. 23.26 + 23.27 + document.addEventListener("deviceready", onDeviceReady, false); 23.28 + function onDeviceReady() { 23.29 + console.log(device.cordova); 23.30 + } 23.31 + 23.32 + 23.33 +## Instalacja 23.34 + 23.35 + cordova plugin add org.apache.cordova.device 23.36 + 23.37 + 23.38 +## Właściwości 23.39 + 23.40 +* device.cordova 23.41 +* device.model 23.42 +* device.platform 23.43 +* device.uuid 23.44 +* device.version 23.45 + 23.46 +## device.cordova 23.47 + 23.48 +Pobierz wersję Cordova działa na urządzeniu. 23.49 + 23.50 +### Obsługiwane platformy 23.51 + 23.52 +* Amazon Fire OS 23.53 +* Android 23.54 +* BlackBerry 10 23.55 +* Przeglądarka 23.56 +* Firefox OS 23.57 +* iOS 23.58 +* Tizen 23.59 +* Windows Phone 7 i 8 23.60 +* Windows 8 23.61 + 23.62 +## device.model 23.63 + 23.64 +`device.model`Zwraca nazwę modelu lub produktu. Wartość jest zestaw przez producenta urządzenia i mogą się różnić między wersjami tego samego produktu. 23.65 + 23.66 +### Obsługiwane platformy 23.67 + 23.68 +* Android 23.69 +* BlackBerry 10 23.70 +* Przeglądarka 23.71 +* iOS 23.72 +* Tizen 23.73 +* Windows Phone 7 i 8 23.74 +* Windows 8 23.75 + 23.76 +### Szybki przykład 23.77 + 23.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 23.79 + // Motorola Droid returns "voles" 23.80 + // BlackBerry: Torch 9800 returns "9800" 23.81 + // Browser: Google Chrome returns "Chrome" 23.82 + // Safari returns "Safari" 23.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. Zobacz http://theiphonewiki.com/wiki/index.php?title=Models / / modelu var = device.model; 23.84 + 23.85 + 23.86 +### Dziwactwa Androida 23.87 + 23.88 +* Pobiera [nazwę produktu][1] zamiast [nazwy modelu][2], który często jest nazwą kod produkcji. Na przykład, Nexus One zwraca `Passion` , i zwraca Motorola Droid`voles`. 23.89 + 23.90 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 23.91 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL 23.92 + 23.93 +### Dziwactwa Tizen 23.94 + 23.95 +* Zwraca modelu urządzenia przypisane przez dostawcę, na przykład,`TIZEN` 23.96 + 23.97 +### Windows Phone 7 i 8 dziwactwa 23.98 + 23.99 +* Zwraca modelu urządzenia, określonej przez producenta. Na przykład Samsung ostrości zwraca`SGH-i917`. 23.100 + 23.101 +## device.platform 23.102 + 23.103 +Uzyskać nazwę systemu operacyjnego urządzenia. 23.104 + 23.105 + var string = device.platform; 23.106 + 23.107 + 23.108 +### Obsługiwane platformy 23.109 + 23.110 +* Android 23.111 +* BlackBerry 10 23.112 +* Browser4 23.113 +* Firefox OS 23.114 +* iOS 23.115 +* Tizen 23.116 +* Windows Phone 7 i 8 23.117 +* Windows 8 23.118 + 23.119 +### Szybki przykład 23.120 + 23.121 + // Depending on the device, a few examples are: 23.122 + // - "Android" 23.123 + // - "BlackBerry 10" 23.124 + // - Browser: returns "MacIntel" on Mac 23.125 + // returns "Win32" on Windows 23.126 + // - "iOS" 23.127 + // - "WinCE" 23.128 + // - "Tizen" 23.129 + var devicePlatform = device.platform; 23.130 + 23.131 + 23.132 +### Dziwactwa Windows Phone 7 23.133 + 23.134 +Urządzenia Windows Phone 7 raport platformy jako`WinCE`. 23.135 + 23.136 +### Windows Phone 8 dziwactwa 23.137 + 23.138 +Urządzenia Windows Phone 8 raport platformy jako`Win32NT`. 23.139 + 23.140 +## device.uuid 23.141 + 23.142 +Się urządzenia uniwersalnie unikatowy identyfikator ([UUID][3]). 23.143 + 23.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 23.145 + 23.146 + var string = device.uuid; 23.147 + 23.148 + 23.149 +### Opis 23.150 + 23.151 +Szczegóły jak UUID jest generowane są określane przez producenta urządzenia i są specyficzne dla platformy lub modelu urządzenia. 23.152 + 23.153 +### Obsługiwane platformy 23.154 + 23.155 +* Android 23.156 +* BlackBerry 10 23.157 +* iOS 23.158 +* Tizen 23.159 +* Windows Phone 7 i 8 23.160 +* Windows 8 23.161 + 23.162 +### Szybki przykład 23.163 + 23.164 + / / Android: zwraca losowe 64-bitowa liczba całkowita (jako ciąg, znowu!) / / liczba całkowita jest generowany na pierwszego uruchomienia urządzenia / / / / BlackBerry: zwraca numer PIN urządzenia / / to jest unikatową liczbą całkowitą dziewięciu cyfr (jako ciąg, choć!) / / / / iPhone: (zacytowana w dokumentacji klasy UIDevice) / / zwraca ciąg wartości mieszania utworzone z wielu sprzętu identyfikuje. 23.165 + Zapewniona jest unikatowy dla każdego urządzenia i nie może być związane z / do konta użytkownika. 23.166 + / / Windows Phone 7: zwraca wartość mieszania urządzenia + bieżący użytkownik, / / jeśli nie zdefiniowane przez użytkownika, identyfikator guid jest generowany i będzie trwać do czasu odinstalowania aplikacji / / Tizen: zwraca urządzenia IMEI (International Mobile Equipment Identity lub IMEI jest liczbą / / unikatowe dla każdego telefonu komórkowego GSM i UMTS. 23.167 + var deviceID = device.uuid; 23.168 + 23.169 + 23.170 +### iOS dziwactwo 23.171 + 23.172 +`uuid`Na iOS nie jest przypisany do urządzenia, ale różni się dla każdej aplikacji, dla każdej instalacji. Zmienia się jeśli możesz usunąć i ponownie zainstalować aplikację, a ewentualnie także po aktualizacji iOS czy nawet uaktualnienia aplikacji dla wersji (widoczny w iOS 5.1). `uuid`Jest nie wiarygodne wartości. 23.173 + 23.174 +### Windows Phone 7 i 8 dziwactwa 23.175 + 23.176 +`uuid`Dla Windows Phone 7 wymaga uprawnień `ID_CAP_IDENTITY_DEVICE` . Microsoft będzie prawdopodobnie potępiać ten wkrótce. Jeśli funkcja nie jest dostępna, aplikacja generuje trwałe identyfikator guid, który jest utrzymywany przez czas trwania instalacji aplikacji na urządzeniu. 23.177 + 23.178 +## device.version 23.179 + 23.180 +Pobierz wersję systemu operacyjnego. 23.181 + 23.182 + var string = device.version; 23.183 + 23.184 + 23.185 +### Obsługiwane platformy 23.186 + 23.187 +* Android 2.1 + 23.188 +* BlackBerry 10 23.189 +* Przeglądarka 23.190 +* iOS 23.191 +* Tizen 23.192 +* Windows Phone 7 i 8 23.193 +* Windows 8 23.194 + 23.195 +### Szybki przykład 23.196 + 23.197 + // Android: Froyo OS would return "2.2" 23.198 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 23.199 + // Version can also return update level "2.1-update1" 23.200 + // 23.201 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 23.202 + // 23.203 + // Browser: Returns version number for the browser 23.204 + // 23.205 + // iPhone: iOS 3.2 returns "3.2" 23.206 + // 23.207 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 23.208 + // Tizen: returns "TIZEN_20120425_2" 23.209 + var deviceVersion = device.version; 23.210 \ No newline at end of file
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 24.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/ru/index.md Thu Jun 04 14:50:33 2015 +0200 24.3 @@ -0,0 +1,219 @@ 24.4 +<!--- 24.5 + Licensed to the Apache Software Foundation (ASF) under one 24.6 + or more contributor license agreements. See the NOTICE file 24.7 + distributed with this work for additional information 24.8 + regarding copyright ownership. The ASF licenses this file 24.9 + to you under the Apache License, Version 2.0 (the 24.10 + "License"); you may not use this file except in compliance 24.11 + with the License. You may obtain a copy of the License at 24.12 + 24.13 + http://www.apache.org/licenses/LICENSE-2.0 24.14 + 24.15 + Unless required by applicable law or agreed to in writing, 24.16 + software distributed under the License is distributed on an 24.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 24.18 + KIND, either express or implied. See the License for the 24.19 + specific language governing permissions and limitations 24.20 + under the License. 24.21 +--> 24.22 + 24.23 +# org.apache.cordova.device 24.24 + 24.25 +Этот плагин определяет глобальный объект `device`, который описывает оборудование и программное обеспечение устройства. Несмотря на то что объект в глобальной области видимости, он не доступен до того момента пока не произойдет событие `deviceready`. 24.26 + 24.27 + document.addEventListener("deviceready", onDeviceReady, false); 24.28 + function onDeviceReady() { 24.29 + console.log(device.cordova); 24.30 + } 24.31 + 24.32 + 24.33 +## Установка 24.34 + 24.35 + cordova plugin add org.apache.cordova.device 24.36 + 24.37 + 24.38 +## Параметры 24.39 + 24.40 +* device.cordova 24.41 +* device.model 24.42 +* device.platform 24.43 +* device.uuid 24.44 +* device.version 24.45 + 24.46 +## device.cordova 24.47 + 24.48 +Возвращает версию Cordova, работающую на устройстве. 24.49 + 24.50 +### Поддерживаемые платформы 24.51 + 24.52 +* Amazon Fire OS 24.53 +* Android 24.54 +* BlackBerry 10 24.55 +* Обозреватель 24.56 +* Firefox OS 24.57 +* iOS 24.58 +* Tizen 24.59 +* Windows Phone 7 и 8 24.60 +* Windows 8 24.61 + 24.62 +## device.model 24.63 + 24.64 +Свойство `device.model` возвращает имя устройства модели или продукта. Значение устанавливается производителем устройства и могут отличаться в разных версиях одного и того же продукта. 24.65 + 24.66 +### Поддерживаемые платформы 24.67 + 24.68 +* Android 24.69 +* BlackBerry 10 24.70 +* Обозреватель 24.71 +* iOS 24.72 +* Tizen 24.73 +* Windows Phone 7 и 8 24.74 +* Windows 8 24.75 + 24.76 +### Краткий пример 24.77 + 24.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 24.79 + // Motorola Droid returns "voles" 24.80 + // BlackBerry: Torch 9800 returns "9800" 24.81 + // Browser: Google Chrome returns "Chrome" 24.82 + // Safari returns "Safari" 24.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. See http://theiphonewiki.com/wiki/index.php?title=Models 24.84 + // 24.85 + var model = device.model; 24.86 + 24.87 + 24.88 +### Особенности Android 24.89 + 24.90 +* Возвращает [имя продукта][1] , а не [имя модели][2], которое часто является производственным кодом. Например, Nexus One из них возвращает `Passion` , и Motorola Droid возвращает `voles`. 24.91 + 24.92 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 24.93 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL 24.94 + 24.95 +### Особенности Tizen 24.96 + 24.97 +* Возвращает модель устройства, назначенного вендором, например,`TIZEN` 24.98 + 24.99 +### Особенности Windows Phone 7 и 8 24.100 + 24.101 +* Возвращает модель устройства, указанной заводом-изготовителем. Например Samsung Focus возвращает `SGH-i917`. 24.102 + 24.103 +## device.platform 24.104 + 24.105 +Получите имя операционной системы устройства. 24.106 + 24.107 + var string = device.platform; 24.108 + 24.109 + 24.110 +### Поддерживаемые платформы 24.111 + 24.112 +* Android 24.113 +* BlackBerry 10 24.114 +* Браузером4 24.115 +* Firefox OS 24.116 +* iOS 24.117 +* Tizen 24.118 +* Windows Phone 7 и 8 24.119 +* Windows 8 24.120 + 24.121 +### Краткий пример 24.122 + 24.123 + // Depending on the device, a few examples are: 24.124 + // - "Android" 24.125 + // - "BlackBerry 10" 24.126 + // - Browser: returns "MacIntel" on Mac 24.127 + // returns "Win32" on Windows 24.128 + // - "iOS" 24.129 + // - "WinCE" 24.130 + // - "Tizen" 24.131 + var devicePlatform = device.platform; 24.132 + 24.133 + 24.134 +### Особенности Windows Phone 7 24.135 + 24.136 +Windows Phone 7 устройства сообщают платформу как `WinCE`. 24.137 + 24.138 +### Особенности Windows Phone 8 24.139 + 24.140 +Устройства Windows Phone 8 сообщают платформу как `Win32NT`. 24.141 + 24.142 +## device.uuid 24.143 + 24.144 +Возвращает универсальный уникального идентификатора ([UUID][3] устройства). 24.145 + 24.146 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 24.147 + 24.148 + var string = device.uuid; 24.149 + 24.150 + 24.151 +### Описание 24.152 + 24.153 +Подробная информация о том как UUID генерируется, определяются изготовителем устройства и являются специфическими для платформы или модели устройства. 24.154 + 24.155 +### Поддерживаемые платформы 24.156 + 24.157 +* Android 24.158 +* BlackBerry 10 24.159 +* iOS 24.160 +* Tizen 24.161 +* Windows Phone 7 и 8 24.162 +* Windows 8 24.163 + 24.164 +### Краткий пример 24.165 + 24.166 + // Android: Возвращает случайное 64-разрядное целое число (в виде строки, опять!) 24.167 + // целое число генерируется при первой загрузке устройства 24.168 + // 24.169 + // BlackBerry: Возвращает номер PIN устройства 24.170 + // это 9 значный уникальный целочисленный (как строка, хотя!) 24.171 + // 24.172 + // iPhone: (Перефразировано из документации класса UIDevice) 24.173 + // возвращает строку хэш-значения, созданные из нескольких аппаратных определяет. 24.174 + // Это значение гарантированно является уникальным для каждого устройства и не может быть привязано 24.175 + // к учетной записи пользователя. 24.176 + // Windows Phone 7: Возвращает хэш устройство + текущего пользователя, 24.177 + // если пользователь не определен, формируется guid который и будет сохраняться до тех пор, пока приложение не удалиться 24.178 + // Tizen: возвращает IMEI устройства (Международный идентификатор мобильного оборудования или IMEI это число 24.179 + // уникальное для каждого мобильного телефона GSM и UMTS. 24.180 + var deviceID = device.uuid; 24.181 + 24.182 + 24.183 +### Особенности iOS 24.184 + 24.185 +На iOS `uuid` не является уникальным для устройства, но варьируется для каждого приложения, и для каждой установки. Значение меняется, если удалить и повторно установить приложение, и возможно также когда вы обновите iOS, или даже обновить приложение до следующей версии (очевидно в iOS 5.1). Значение `uuid` не является надежным. 24.186 + 24.187 +### Особенности Windows Phone 7 и 8 24.188 + 24.189 +Для Windows Phone 7 `uuid` требует разрешения `ID_CAP_IDENTITY_DEVICE` . Microsoft скорее всего скоро сделает это свойство устаревшим. Если возможность недоступна, приложение создает постоянные guid, который сохраняется на все время установки приложения на устройстве. 24.190 + 24.191 +## device.version 24.192 + 24.193 +Возвращает версию операционной системы. 24.194 + 24.195 + var string = device.version; 24.196 + 24.197 + 24.198 +### Поддерживаемые платформы 24.199 + 24.200 +* Android 2.1 + 24.201 +* BlackBerry 10 24.202 +* Обозреватель 24.203 +* iOS 24.204 +* Tizen 24.205 +* Windows Phone 7 и 8 24.206 +* Windows 8 24.207 + 24.208 +### Краткий пример 24.209 + 24.210 + // Android: Froyo OS would return "2.2" 24.211 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 24.212 + // Version can also return update level "2.1-update1" 24.213 + // 24.214 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 24.215 + // 24.216 + // Browser: Returns version number for the browser 24.217 + // 24.218 + // iPhone: iOS 3.2 returns "3.2" 24.219 + // 24.220 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 24.221 + // Tizen: returns "TIZEN_20120425_2" 24.222 + var deviceVersion = device.version; 24.223 \ No newline at end of file
25.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 25.2 +++ b/Touchgui/plugins/org.apache.cordova.device/doc/zh/index.md Thu Jun 04 14:50:33 2015 +0200 25.3 @@ -0,0 +1,206 @@ 25.4 +<!--- 25.5 + Licensed to the Apache Software Foundation (ASF) under one 25.6 + or more contributor license agreements. See the NOTICE file 25.7 + distributed with this work for additional information 25.8 + regarding copyright ownership. The ASF licenses this file 25.9 + to you under the Apache License, Version 2.0 (the 25.10 + "License"); you may not use this file except in compliance 25.11 + with the License. You may obtain a copy of the License at 25.12 + 25.13 + http://www.apache.org/licenses/LICENSE-2.0 25.14 + 25.15 + Unless required by applicable law or agreed to in writing, 25.16 + software distributed under the License is distributed on an 25.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 25.18 + KIND, either express or implied. See the License for the 25.19 + specific language governing permissions and limitations 25.20 + under the License. 25.21 +--> 25.22 + 25.23 +# org.apache.cordova.device 25.24 + 25.25 +這個外掛程式定義全球 `device` 物件,描述該設備的硬體和軟體。 雖然物件是在全球範圍內,但不是可用,直到後 `deviceready` 事件。 25.26 + 25.27 + document.addEventListener("deviceready", onDeviceReady, false); 25.28 + function onDeviceReady() { 25.29 + console.log(device.cordova); 25.30 + } 25.31 + 25.32 + 25.33 +## 安裝 25.34 + 25.35 + cordova plugin add org.apache.cordova.device 25.36 + 25.37 + 25.38 +## 屬性 25.39 + 25.40 +* device.cordova 25.41 +* device.model 25.42 +* device.platform 25.43 +* device.uuid 25.44 +* device.version 25.45 + 25.46 +## device.cordova 25.47 + 25.48 +獲取科爾多瓦在設備上運行的版本。 25.49 + 25.50 +### 支援的平臺 25.51 + 25.52 +* 亞馬遜火 OS 25.53 +* Android 系統 25.54 +* 黑莓 10 25.55 +* 瀏覽器 25.56 +* 火狐瀏覽器的作業系統 25.57 +* iOS 25.58 +* 泰 25.59 +* Windows Phone 7 和 8 25.60 +* Windows 8 25.61 + 25.62 +## device.model 25.63 + 25.64 +`device.model`返回設備的模型或產品的名稱。值由設備製造商設置和同一產品的不同版本可能不同。 25.65 + 25.66 +### 支援的平臺 25.67 + 25.68 +* Android 系統 25.69 +* 黑莓 10 25.70 +* 瀏覽器 25.71 +* iOS 25.72 +* 泰 25.73 +* Windows Phone 7 和 8 25.74 +* Windows 8 25.75 + 25.76 +### 快速的示例 25.77 + 25.78 + // Android: Nexus One returns "Passion" (Nexus One code name) 25.79 + // Motorola Droid returns "voles" 25.80 + // BlackBerry: Torch 9800 returns "9800" 25.81 + // Browser: Google Chrome returns "Chrome" 25.82 + // Safari returns "Safari" 25.83 + // iOS: for the iPad Mini, returns iPad2,5; iPhone 5 is iPhone 5,1. 請參閱 HTTP://theiphonewiki.com/wiki/index.php?title=Models / / var 模型 = device.model ; 25.84 + 25.85 + 25.86 +### Android 的怪癖 25.87 + 25.88 +* 獲取[產品名稱][1]而不是[產品型號名稱][2],這往往是生產代碼名稱。 例如,Nexus One 返回 `Passion` ,和摩托羅拉 Droid 返回`voles`. 25.89 + 25.90 + [1]: http://developer.android.com/reference/android/os/Build.html#PRODUCT 25.91 + [2]: http://developer.android.com/reference/android/os/Build.html#MODEL 25.92 + 25.93 +### Tizen 怪癖 25.94 + 25.95 +* 例如,返回與供應商指派的設備模型`TIZEN` 25.96 + 25.97 +### Windows Phone 7 和 8 怪癖 25.98 + 25.99 +* 返回由製造商指定的設備模型。例如,三星焦點返回`SGH-i917`. 25.100 + 25.101 +## device.platform 25.102 + 25.103 +獲取設備的作業系統名稱。 25.104 + 25.105 + var string = device.platform; 25.106 + 25.107 + 25.108 +### 支援的平臺 25.109 + 25.110 +* Android 系統 25.111 +* 黑莓 10 25.112 +* Browser4 25.113 +* 火狐瀏覽器的作業系統 25.114 +* iOS 25.115 +* 泰 25.116 +* Windows Phone 7 和 8 25.117 +* Windows 8 25.118 + 25.119 +### 快速的示例 25.120 + 25.121 + // Depending on the device, a few examples are: 25.122 + // - "Android" 25.123 + // - "BlackBerry 10" 25.124 + // - Browser: returns "MacIntel" on Mac 25.125 + // returns "Win32" on Windows 25.126 + // - "iOS" 25.127 + // - "WinCE" 25.128 + // - "Tizen" 25.129 + var devicePlatform = device.platform; 25.130 + 25.131 + 25.132 +### Windows Phone 7 的怪癖 25.133 + 25.134 +Windows Phone 7 設備報告作為平臺`WinCE`. 25.135 + 25.136 +### Windows Phone 8 怪癖 25.137 + 25.138 +Windows Phone 8 設備報告作為平臺`Win32NT`. 25.139 + 25.140 +## device.uuid 25.141 + 25.142 +獲取設備的通用唯一識別碼 ([UUID][3]). 25.143 + 25.144 + [3]: http://en.wikipedia.org/wiki/Universally_Unique_Identifier 25.145 + 25.146 + var string = device.uuid; 25.147 + 25.148 + 25.149 +### 說明 25.150 + 25.151 +如何生成一個 UUID 的細節由設備製造商和特定于設備的平臺或模型。 25.152 + 25.153 +### 支援的平臺 25.154 + 25.155 +* Android 系統 25.156 +* 黑莓 10 25.157 +* iOS 25.158 +* Tizen 25.159 +* Windows Phone 7 和 8 25.160 +* Windows 8 25.161 + 25.162 +### 快速的示例 25.163 + 25.164 + / / Android: 一個隨機的 64 位整數 (作為字串返回,再次!) / / 上設備的第一次啟動生成的整數 / / / / 黑莓手機: 返回設備的 PIN 號碼 / / 這是九個數字的唯一整數 (作為字串,雖然!) / / / / iPhone: (從 UIDevice 類文檔解釋) / / 返回一個字串的雜湊值創建的多個硬體標識。 25.165 + / / 它保證是唯一的每個設備並不能綁 / / 到使用者帳戶。 25.166 + / / Windows Phone 7: 返回的雜湊代碼的設備 + 當前使用者,/ / 如果未定義使用者,則一個 guid 生成的並且將會保留直到卸載該應用程式 / / Tizen: 返回設備 IMEI (國際行動裝置身份或 IMEI 是一個數位 / / 獨有的每一個 UMTS 和 GSM 行動電話。 25.167 + var deviceID = device.uuid; 25.168 + 25.169 + 25.170 +### iOS 怪癖 25.171 + 25.172 +`uuid`在 iOS 不是唯一的一種裝置,但對於每個應用程式,為每個安裝而異。 如果您刪除並重新安裝該應用程式,它更改和可能還當你升級 iOS,或甚至升級每個版本 (iOS 5.1 中存在明顯的) 的應用程式。 `uuid`不是一個可靠的值。 25.173 + 25.174 +### Windows Phone 7 和 8 怪癖 25.175 + 25.176 +`uuid`為 Windows Phone 7 須經許可 `ID_CAP_IDENTITY_DEVICE` 。 Microsoft 可能會很快棄用此屬性。 如果沒有可用的能力,應用程式將生成設備上應用程式的安裝過程中保持持續的 guid。 25.177 + 25.178 +## device.version 25.179 + 25.180 +獲取作業系統版本。 25.181 + 25.182 + var string = device.version; 25.183 + 25.184 + 25.185 +### 支援的平臺 25.186 + 25.187 +* Android 2.1 + 25.188 +* 黑莓 10 25.189 +* 瀏覽器 25.190 +* iOS 25.191 +* 泰 25.192 +* Windows Phone 7 和 8 25.193 +* Windows 8 25.194 + 25.195 +### 快速的示例 25.196 + 25.197 + // Android: Froyo OS would return "2.2" 25.198 + // Eclair OS would return "2.1", "2.0.1", or "2.0" 25.199 + // Version can also return update level "2.1-update1" 25.200 + // 25.201 + // BlackBerry: Torch 9800 using OS 6.0 would return "6.0.0.600" 25.202 + // 25.203 + // Browser: Returns version number for the browser 25.204 + // 25.205 + // iPhone: iOS 3.2 returns "3.2" 25.206 + // 25.207 + // Windows Phone 7: returns current OS version number, ex. on Mango returns 7.10.7720 25.208 + // Tizen: returns "TIZEN_20120425_2" 25.209 + var deviceVersion = device.version; 25.210 \ No newline at end of file
26.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 26.2 +++ b/Touchgui/plugins/org.apache.cordova.device/plugin.xml Thu Jun 04 14:50:33 2015 +0200 26.3 @@ -0,0 +1,168 @@ 26.4 +<?xml version="1.0" encoding="UTF-8"?> 26.5 +<!-- 26.6 + Licensed to the Apache Software Foundation (ASF) under one 26.7 + or more contributor license agreements. See the NOTICE file 26.8 + distributed with this work for additional information 26.9 + regarding copyright ownership. The ASF licenses this file 26.10 + to you under the Apache License, Version 2.0 (the 26.11 + "License"); you may not use this file except in compliance 26.12 + with the License. You may obtain a copy of the License at 26.13 + 26.14 + http://www.apache.org/licenses/LICENSE-2.0 26.15 + 26.16 + Unless required by applicable law or agreed to in writing, 26.17 + software distributed under the License is distributed on an 26.18 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 26.19 + KIND, either express or implied. See the License for the 26.20 + specific language governing permissions and limitations 26.21 + under the License. 26.22 +--> 26.23 + 26.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 26.25 + xmlns:rim="http://www.blackberry.com/ns/widgets" 26.26 + xmlns:android="http://schemas.android.com/apk/res/android" 26.27 + id="org.apache.cordova.device" 26.28 + version="0.2.13"> 26.29 + <name>Device</name> 26.30 + <description>Cordova Device Plugin</description> 26.31 + <license>Apache 2.0</license> 26.32 + <keywords>cordova,device</keywords> 26.33 + <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git</repo> 26.34 + <issue>https://issues.apache.org/jira/browse/CB/component/12320648</issue> 26.35 + 26.36 + <js-module src="www/device.js" name="device"> 26.37 + <clobbers target="device" /> 26.38 + </js-module> 26.39 + 26.40 + <!-- firefoxos --> 26.41 + <platform name="firefoxos"> 26.42 + <config-file target="config.xml" parent="/*"> 26.43 + <feature name="Device"> 26.44 + <param name="firefoxos-package" value="Device" /> 26.45 + </feature> 26.46 + </config-file> 26.47 + 26.48 + <js-module src="src/firefoxos/DeviceProxy.js" name="DeviceProxy"> 26.49 + <runs /> 26.50 + </js-module> 26.51 + </platform> 26.52 + 26.53 + <!-- tizen --> 26.54 + <platform name="tizen"> 26.55 + <js-module src="src/tizen/DeviceProxy.js" name="DeviceProxy"> 26.56 + <runs /> 26.57 + </js-module> 26.58 + </platform> 26.59 + 26.60 + <!-- android --> 26.61 + <platform name="android"> 26.62 + <config-file target="res/xml/config.xml" parent="/*"> 26.63 + <feature name="Device" > 26.64 + <param name="android-package" value="org.apache.cordova.device.Device"/> 26.65 + </feature> 26.66 + </config-file> 26.67 + 26.68 + <source-file src="src/android/Device.java" target-dir="src/org/apache/cordova/device" /> 26.69 + </platform> 26.70 + 26.71 + <!-- amazon-fireos --> 26.72 + <platform name="amazon-fireos"> 26.73 + <config-file target="res/xml/config.xml" parent="/*"> 26.74 + <feature name="Device" > 26.75 + <param name="android-package" value="org.apache.cordova.device.Device"/> 26.76 + </feature> 26.77 + </config-file> 26.78 + 26.79 + <source-file src="src/android/Device.java" target-dir="src/org/apache/cordova/device" /> 26.80 + </platform> 26.81 + 26.82 + <!-- ubuntu --> 26.83 + <platform name="ubuntu"> 26.84 + <header-file src="src/ubuntu/device.h" /> 26.85 + <source-file src="src/ubuntu/device.cpp" /> 26.86 + <js-module src="src/ubuntu/device.js" name="DeviceProxy"> 26.87 + <merges target="device" /> 26.88 + </js-module> 26.89 + </platform> 26.90 + 26.91 + <!-- ios --> 26.92 + <platform name="ios"> 26.93 + <config-file target="config.xml" parent="/*"> 26.94 + <feature name="Device"> 26.95 + <param name="ios-package" value="CDVDevice"/> 26.96 + </feature> 26.97 + </config-file> 26.98 + 26.99 + <header-file src="src/ios/CDVDevice.h" /> 26.100 + <source-file src="src/ios/CDVDevice.m" /> 26.101 + </platform> 26.102 + 26.103 + <!-- blackberry10 --> 26.104 + <platform name="blackberry10"> 26.105 + <source-file src="src/blackberry10/index.js" target-dir="Device" /> 26.106 + <config-file target="www/config.xml" parent="/widget"> 26.107 + <feature name="Device" value="Device"/> 26.108 + </config-file> 26.109 + <config-file target="www/config.xml" parent="/widget/rim:permissions"> 26.110 + <rim:permit>read_device_identifying_information</rim:permit> 26.111 + </config-file> 26.112 + </platform> 26.113 + 26.114 + <!-- wp7 --> 26.115 + <platform name="wp7"> 26.116 + <config-file target="config.xml" parent="/*"> 26.117 + <feature name="Device"> 26.118 + <param name="wp-package" value="Device"/> 26.119 + </feature> 26.120 + </config-file> 26.121 + 26.122 + <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities"> 26.123 + <Capability Name="ID_CAP_IDENTITY_DEVICE" /> 26.124 + </config-file> 26.125 + 26.126 + <source-file src="src/wp/Device.cs" /> 26.127 + </platform> 26.128 + 26.129 + <!-- wp8 --> 26.130 + <platform name="wp8"> 26.131 + <config-file target="config.xml" parent="/*"> 26.132 + <feature name="Device"> 26.133 + <param name="wp-package" value="Device"/> 26.134 + </feature> 26.135 + </config-file> 26.136 + 26.137 + <config-file target="Properties/WMAppManifest.xml" parent="/Deployment/App/Capabilities"> 26.138 + <Capability Name="ID_CAP_IDENTITY_DEVICE" /> 26.139 + </config-file> 26.140 + 26.141 + <source-file src="src/wp/Device.cs" /> 26.142 + </platform> 26.143 + 26.144 + <!-- windows8 --> 26.145 + <platform name="windows8"> 26.146 + <js-module src="src/windows8/DeviceProxy.js" name="DeviceProxy"> 26.147 + <merges target="" /> 26.148 + </js-module> 26.149 + </platform> 26.150 + 26.151 + <!-- windows --> 26.152 + <platform name="windows"> 26.153 + <js-module src="src/windows/DeviceProxy.js" name="DeviceProxy"> 26.154 + <merges target="" /> 26.155 + </js-module> 26.156 + </platform> 26.157 + 26.158 + <!-- browser --> 26.159 + <platform name="browser"> 26.160 + <config-file target="config.xml" parent="/*"> 26.161 + <feature name="Device"> 26.162 + <param name="browser-package" value="Device" /> 26.163 + </feature> 26.164 + </config-file> 26.165 + 26.166 + <js-module src="src/browser/DeviceProxy.js" name="DeviceProxy"> 26.167 + <runs /> 26.168 + </js-module> 26.169 + </platform> 26.170 + 26.171 +</plugin>
27.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 27.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/android/Device.java Thu Jun 04 14:50:33 2015 +0200 27.3 @@ -0,0 +1,156 @@ 27.4 +/* 27.5 + Licensed to the Apache Software Foundation (ASF) under one 27.6 + or more contributor license agreements. See the NOTICE file 27.7 + distributed with this work for additional information 27.8 + regarding copyright ownership. The ASF licenses this file 27.9 + to you under the Apache License, Version 2.0 (the 27.10 + "License"); you may not use this file except in compliance 27.11 + with the License. You may obtain a copy of the License at 27.12 + 27.13 + http://www.apache.org/licenses/LICENSE-2.0 27.14 + 27.15 + Unless required by applicable law or agreed to in writing, 27.16 + software distributed under the License is distributed on an 27.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 27.18 + KIND, either express or implied. See the License for the 27.19 + specific language governing permissions and limitations 27.20 + under the License. 27.21 +*/ 27.22 +package org.apache.cordova.device; 27.23 + 27.24 +import java.util.TimeZone; 27.25 + 27.26 +import org.apache.cordova.CordovaWebView; 27.27 +import org.apache.cordova.CallbackContext; 27.28 +import org.apache.cordova.CordovaPlugin; 27.29 +import org.apache.cordova.CordovaInterface; 27.30 +import org.json.JSONArray; 27.31 +import org.json.JSONException; 27.32 +import org.json.JSONObject; 27.33 + 27.34 +import android.provider.Settings; 27.35 + 27.36 +public class Device extends CordovaPlugin { 27.37 + public static final String TAG = "Device"; 27.38 + 27.39 + public static String platform; // Device OS 27.40 + public static String uuid; // Device UUID 27.41 + 27.42 + private static final String ANDROID_PLATFORM = "Android"; 27.43 + private static final String AMAZON_PLATFORM = "amazon-fireos"; 27.44 + private static final String AMAZON_DEVICE = "Amazon"; 27.45 + 27.46 + /** 27.47 + * Constructor. 27.48 + */ 27.49 + public Device() { 27.50 + } 27.51 + 27.52 + /** 27.53 + * Sets the context of the Command. This can then be used to do things like 27.54 + * get file paths associated with the Activity. 27.55 + * 27.56 + * @param cordova The context of the main Activity. 27.57 + * @param webView The CordovaWebView Cordova is running in. 27.58 + */ 27.59 + public void initialize(CordovaInterface cordova, CordovaWebView webView) { 27.60 + super.initialize(cordova, webView); 27.61 + Device.uuid = getUuid(); 27.62 + } 27.63 + 27.64 + /** 27.65 + * Executes the request and returns PluginResult. 27.66 + * 27.67 + * @param action The action to execute. 27.68 + * @param args JSONArry of arguments for the plugin. 27.69 + * @param callbackContext The callback id used when calling back into JavaScript. 27.70 + * @return True if the action was valid, false if not. 27.71 + */ 27.72 + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 27.73 + if (action.equals("getDeviceInfo")) { 27.74 + JSONObject r = new JSONObject(); 27.75 + r.put("uuid", Device.uuid); 27.76 + r.put("version", this.getOSVersion()); 27.77 + r.put("platform", this.getPlatform()); 27.78 + r.put("model", this.getModel()); 27.79 + callbackContext.success(r); 27.80 + } 27.81 + else { 27.82 + return false; 27.83 + } 27.84 + return true; 27.85 + } 27.86 + 27.87 + //-------------------------------------------------------------------------- 27.88 + // LOCAL METHODS 27.89 + //-------------------------------------------------------------------------- 27.90 + 27.91 + /** 27.92 + * Get the OS name. 27.93 + * 27.94 + * @return 27.95 + */ 27.96 + public String getPlatform() { 27.97 + String platform; 27.98 + if (isAmazonDevice()) { 27.99 + platform = AMAZON_PLATFORM; 27.100 + } else { 27.101 + platform = ANDROID_PLATFORM; 27.102 + } 27.103 + return platform; 27.104 + } 27.105 + 27.106 + /** 27.107 + * Get the device's Universally Unique Identifier (UUID). 27.108 + * 27.109 + * @return 27.110 + */ 27.111 + public String getUuid() { 27.112 + String uuid = Settings.Secure.getString(this.cordova.getActivity().getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); 27.113 + return uuid; 27.114 + } 27.115 + 27.116 + public String getModel() { 27.117 + String model = android.os.Build.MODEL; 27.118 + return model; 27.119 + } 27.120 + 27.121 + public String getProductName() { 27.122 + String productname = android.os.Build.PRODUCT; 27.123 + return productname; 27.124 + } 27.125 + 27.126 + /** 27.127 + * Get the OS version. 27.128 + * 27.129 + * @return 27.130 + */ 27.131 + public String getOSVersion() { 27.132 + String osversion = android.os.Build.VERSION.RELEASE; 27.133 + return osversion; 27.134 + } 27.135 + 27.136 + public String getSDKVersion() { 27.137 + @SuppressWarnings("deprecation") 27.138 + String sdkversion = android.os.Build.VERSION.SDK; 27.139 + return sdkversion; 27.140 + } 27.141 + 27.142 + public String getTimeZoneID() { 27.143 + TimeZone tz = TimeZone.getDefault(); 27.144 + return (tz.getID()); 27.145 + } 27.146 + 27.147 + /** 27.148 + * Function to check if the device is manufactured by Amazon 27.149 + * 27.150 + * @return 27.151 + */ 27.152 + public boolean isAmazonDevice() { 27.153 + if (android.os.Build.MANUFACTURER.equals(AMAZON_DEVICE)) { 27.154 + return true; 27.155 + } 27.156 + return false; 27.157 + } 27.158 + 27.159 +}
28.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 28.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/blackberry10/index.js Thu Jun 04 14:50:33 2015 +0200 28.3 @@ -0,0 +1,68 @@ 28.4 +/* 28.5 + * 28.6 + * Licensed to the Apache Software Foundation (ASF) under one 28.7 + * or more contributor license agreements. See the NOTICE file 28.8 + * distributed with this work for additional information 28.9 + * regarding copyright ownership. The ASF licenses this file 28.10 + * to you under the Apache License, Version 2.0 (the 28.11 + * "License"); you may not use this file except in compliance 28.12 + * with the License. You may obtain a copy of the License at 28.13 + * 28.14 + * http://www.apache.org/licenses/LICENSE-2.0 28.15 + * 28.16 + * Unless required by applicable law or agreed to in writing, 28.17 + * software distributed under the License is distributed on an 28.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 28.19 + * KIND, either express or implied. See the License for the 28.20 + * specific language governing permissions and limitations 28.21 + * under the License. 28.22 + * 28.23 +*/ 28.24 + 28.25 +function getModelName () { 28.26 + var modelName = window.qnx.webplatform.device.modelName; 28.27 + //Pre 10.2 (meaning Z10 or Q10) 28.28 + if (typeof modelName === "undefined") { 28.29 + if (window.screen.height === 720 && window.screen.width === 720) { 28.30 + if ( window.matchMedia("(-blackberry-display-technology: -blackberry-display-oled)").matches) { 28.31 + modelName = "Q10"; 28.32 + } else { 28.33 + modelName = "Q5"; 28.34 + } 28.35 + } else if ((window.screen.height === 1280 && window.screen.width === 768) || 28.36 + (window.screen.height === 768 && window.screen.width === 1280)) { 28.37 + modelName = "Z10"; 28.38 + } else { 28.39 + modelName = window.qnx.webplatform.deviceName; 28.40 + } 28.41 + } 28.42 + 28.43 + return modelName; 28.44 +} 28.45 + 28.46 +function getUUID () { 28.47 + var uuid = ""; 28.48 + try { 28.49 + //Must surround by try catch because this will throw if the app is missing permissions 28.50 + uuid = window.qnx.webplatform.device.devicePin; 28.51 + } catch (e) { 28.52 + //DO Nothing 28.53 + } 28.54 + return uuid; 28.55 +} 28.56 + 28.57 +module.exports = { 28.58 + getDeviceInfo: function (success, fail, args, env) { 28.59 + var result = new PluginResult(args, env), 28.60 + modelName = getModelName(), 28.61 + uuid = getUUID(), 28.62 + info = { 28.63 + platform: "blackberry10", 28.64 + version: window.qnx.webplatform.device.scmBundle, 28.65 + model: modelName, 28.66 + uuid: uuid 28.67 + }; 28.68 + 28.69 + result.ok(info); 28.70 + } 28.71 +};
29.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 29.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/browser/DeviceProxy.js Thu Jun 04 14:50:33 2015 +0200 29.3 @@ -0,0 +1,78 @@ 29.4 +/* 29.5 + * 29.6 + * Licensed to the Apache Software Foundation (ASF) under one 29.7 + * or more contributor license agreements. See the NOTICE file 29.8 + * distributed with this work for additional information 29.9 + * regarding copyright ownership. The ASF licenses this file 29.10 + * to you under the Apache License, Version 2.0 (the 29.11 + * "License"); you may not use this file except in compliance 29.12 + * with the License. You may obtain a copy of the License at 29.13 + * 29.14 + * http://www.apache.org/licenses/LICENSE-2.0 29.15 + * 29.16 + * Unless required by applicable law or agreed to in writing, 29.17 + * software distributed under the License is distributed on an 29.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 29.19 + * KIND, either express or implied. See the License for the 29.20 + * specific language governing permissions and limitations 29.21 + * under the License. 29.22 + * 29.23 + */ 29.24 +var browser = require('cordova/platform'); 29.25 +var cordova = require('cordova'); 29.26 + 29.27 +function getPlatform() { 29.28 + return "browser"; 29.29 +} 29.30 + 29.31 +function getModel() { 29.32 + return getBrowserInfo(true); 29.33 +} 29.34 + 29.35 +function getVersion() { 29.36 + return getBrowserInfo(false); 29.37 +} 29.38 + 29.39 +function getBrowserInfo(getModel) { 29.40 + var userAgent = navigator.userAgent; 29.41 + var returnVal; 29.42 + 29.43 + if ((offset = userAgent.indexOf('Chrome')) !== -1) { 29.44 + returnVal = (getModel) ? 'Chrome' : userAgent.substring(offset + 7); 29.45 + } else if ((offset = userAgent.indexOf('Safari')) !== -1) { 29.46 + if (getModel) { 29.47 + returnVal = 'Safari'; 29.48 + } else { 29.49 + returnVal = userAgent.substring(offset + 7); 29.50 + 29.51 + if ((offset = userAgent.indexOf('Version')) !== -1) { 29.52 + returnVal = userAgent.substring(offset + 8); 29.53 + } 29.54 + } 29.55 + } else if ((offset = userAgent.indexOf('Firefox')) !== -1) { 29.56 + returnVal = (getModel) ? 'Firefox' : userAgent.substring(offset + 8); 29.57 + } 29.58 + 29.59 + if ((offset = returnVal.indexOf(';')) !== -1 || (offset = returnVal.indexOf(' ')) !== -1) { 29.60 + returnVal = returnVal.substring(0, offset); 29.61 + } 29.62 + 29.63 + return returnVal; 29.64 +} 29.65 + 29.66 + 29.67 +module.exports = { 29.68 + getDeviceInfo: function (success, error) { 29.69 + setTimeout(function () { 29.70 + success({ 29.71 + cordova: browser.cordovaVersion, 29.72 + platform: getPlatform(), 29.73 + model: getModel(), 29.74 + version: getVersion(), 29.75 + uuid: null 29.76 + }); 29.77 + }, 0); 29.78 + } 29.79 +}; 29.80 + 29.81 +require("cordova/exec/proxy").add("Device", module.exports);
30.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 30.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/firefoxos/DeviceProxy.js Thu Jun 04 14:50:33 2015 +0200 30.3 @@ -0,0 +1,79 @@ 30.4 +/* 30.5 + * 30.6 + * Licensed to the Apache Software Foundation (ASF) under one 30.7 + * or more contributor license agreements. See the NOTICE file 30.8 + * distributed with this work for additional information 30.9 + * regarding copyright ownership. The ASF licenses this file 30.10 + * to you under the Apache License, Version 2.0 (the 30.11 + * "License"); you may not use this file except in compliance 30.12 + * with the License. You may obtain a copy of the License at 30.13 + * 30.14 + * http://www.apache.org/licenses/LICENSE-2.0 30.15 + * 30.16 + * Unless required by applicable law or agreed to in writing, 30.17 + * software distributed under the License is distributed on an 30.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 30.19 + * KIND, either express or implied. See the License for the 30.20 + * specific language governing permissions and limitations 30.21 + * under the License. 30.22 + * 30.23 + */ 30.24 +//example UA String for Firefox OS 30.25 +//Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0 30.26 +var firefoxos = require('cordova/platform'); 30.27 +var cordova = require('cordova'); 30.28 + 30.29 +//UA parsing not recommended but currently this is the only way to get the Firefox OS version 30.30 +//https://developer.mozilla.org/en-US/docs/Gecko_user_agent_string_reference 30.31 + 30.32 +//Should be replaced when better conversion to Firefox OS Version is available 30.33 +function convertVersionNumber(ver) { 30.34 + var hashVersion = { 30.35 + '18.0': '1.0.1', 30.36 + '18.1': '1.1', 30.37 + '26.0': '1.2', 30.38 + '28.0': '1.3', 30.39 + '30.0': '1.4', 30.40 + '32.0': '2.0' 30.41 + }; 30.42 + var rver = ver; 30.43 + var sStr = ver.substring(0, 4); 30.44 + if (hashVersion[sStr]) { 30.45 + rver = hashVersion[sStr]; 30.46 + } 30.47 + return (rver); 30.48 + 30.49 +} 30.50 +function getVersion() { 30.51 + if (navigator.userAgent.match(/(mobile|tablet)/i)) { 30.52 + var ffVersionArray = (navigator.userAgent.match(/Firefox\/([\d]+\.[\w]?\.?[\w]+)/)); 30.53 + if (ffVersionArray.length === 2) { 30.54 + return (convertVersionNumber(ffVersionArray[1])); 30.55 + } 30.56 + } 30.57 + return (null); 30.58 +} 30.59 + 30.60 +function getModel() { 30.61 + var uaArray = navigator.userAgent.split(/\s*[;)(]\s*/); 30.62 + if (navigator.userAgent.match(/(mobile|tablet)/i)) { 30.63 + if (uaArray.length === 5) { 30.64 + return (uaArray[2]); 30.65 + } 30.66 + } 30.67 + return (null); 30.68 +} 30.69 +module.exports = { 30.70 + getDeviceInfo: function (success, error) { 30.71 + setTimeout(function () { 30.72 + success({ 30.73 + platform: 'firefoxos', 30.74 + model: getModel(), 30.75 + version: getVersion(), 30.76 + uuid: null 30.77 + }); 30.78 + }, 0); 30.79 + } 30.80 +}; 30.81 + 30.82 +require("cordova/exec/proxy").add("Device", module.exports);
31.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 31.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ios/CDVDevice.h Thu Jun 04 14:50:33 2015 +0200 31.3 @@ -0,0 +1,30 @@ 31.4 +/* 31.5 + Licensed to the Apache Software Foundation (ASF) under one 31.6 + or more contributor license agreements. See the NOTICE file 31.7 + distributed with this work for additional information 31.8 + regarding copyright ownership. The ASF licenses this file 31.9 + to you under the Apache License, Version 2.0 (the 31.10 + "License"); you may not use this file except in compliance 31.11 + with the License. You may obtain a copy of the License at 31.12 + 31.13 + http://www.apache.org/licenses/LICENSE-2.0 31.14 + 31.15 + Unless required by applicable law or agreed to in writing, 31.16 + software distributed under the License is distributed on an 31.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 31.18 + KIND, either express or implied. See the License for the 31.19 + specific language governing permissions and limitations 31.20 + under the License. 31.21 + */ 31.22 + 31.23 +#import <UIKit/UIKit.h> 31.24 +#import <Cordova/CDVPlugin.h> 31.25 + 31.26 +@interface CDVDevice : CDVPlugin 31.27 +{} 31.28 + 31.29 ++ (NSString*)cordovaVersion; 31.30 + 31.31 +- (void)getDeviceInfo:(CDVInvokedUrlCommand*)command; 31.32 + 31.33 +@end
32.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 32.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ios/CDVDevice.m Thu Jun 04 14:50:33 2015 +0200 32.3 @@ -0,0 +1,76 @@ 32.4 +/* 32.5 + Licensed to the Apache Software Foundation (ASF) under one 32.6 + or more contributor license agreements. See the NOTICE file 32.7 + distributed with this work for additional information 32.8 + regarding copyright ownership. The ASF licenses this file 32.9 + to you under the Apache License, Version 2.0 (the 32.10 + "License"); you may not use this file except in compliance 32.11 + with the License. You may obtain a copy of the License at 32.12 + 32.13 + http://www.apache.org/licenses/LICENSE-2.0 32.14 + 32.15 + Unless required by applicable law or agreed to in writing, 32.16 + software distributed under the License is distributed on an 32.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 32.18 + KIND, either express or implied. See the License for the 32.19 + specific language governing permissions and limitations 32.20 + under the License. 32.21 + */ 32.22 + 32.23 +#include <sys/types.h> 32.24 +#include <sys/sysctl.h> 32.25 + 32.26 +#import <Cordova/CDV.h> 32.27 +#import "CDVDevice.h" 32.28 + 32.29 +@implementation UIDevice (ModelVersion) 32.30 + 32.31 +- (NSString*)modelVersion 32.32 +{ 32.33 + size_t size; 32.34 + 32.35 + sysctlbyname("hw.machine", NULL, &size, NULL, 0); 32.36 + char* machine = malloc(size); 32.37 + sysctlbyname("hw.machine", machine, &size, NULL, 0); 32.38 + NSString* platform = [NSString stringWithUTF8String:machine]; 32.39 + free(machine); 32.40 + 32.41 + return platform; 32.42 +} 32.43 + 32.44 +@end 32.45 + 32.46 +@interface CDVDevice () {} 32.47 +@end 32.48 + 32.49 +@implementation CDVDevice 32.50 + 32.51 +- (void)getDeviceInfo:(CDVInvokedUrlCommand*)command 32.52 +{ 32.53 + NSDictionary* deviceProperties = [self deviceProperties]; 32.54 + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:deviceProperties]; 32.55 + 32.56 + [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 32.57 +} 32.58 + 32.59 +- (NSDictionary*)deviceProperties 32.60 +{ 32.61 + UIDevice* device = [UIDevice currentDevice]; 32.62 + NSMutableDictionary* devProps = [NSMutableDictionary dictionaryWithCapacity:4]; 32.63 + 32.64 + [devProps setObject:[device modelVersion] forKey:@"model"]; 32.65 + [devProps setObject:@"iOS" forKey:@"platform"]; 32.66 + [devProps setObject:[device systemVersion] forKey:@"version"]; 32.67 + [devProps setObject:[device uniqueAppInstanceIdentifier] forKey:@"uuid"]; 32.68 + [devProps setObject:[[self class] cordovaVersion] forKey:@"cordova"]; 32.69 + 32.70 + NSDictionary* devReturn = [NSDictionary dictionaryWithDictionary:devProps]; 32.71 + return devReturn; 32.72 +} 32.73 + 32.74 ++ (NSString*)cordovaVersion 32.75 +{ 32.76 + return CDV_VERSION; 32.77 +} 32.78 + 32.79 +@end
33.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 33.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/tizen/DeviceProxy.js Thu Jun 04 14:50:33 2015 +0200 33.3 @@ -0,0 +1,39 @@ 33.4 +/* 33.5 + * 33.6 + * Licensed to the Apache Software Foundation (ASF) under one 33.7 + * or more contributor license agreements. See the NOTICE file 33.8 + * distributed with this work for additional information 33.9 + * regarding copyright ownership. The ASF licenses this file 33.10 + * to you under the Apache License, Version 2.0 (the 33.11 + * "License"); you may not use this file except in compliance 33.12 + * with the License. You may obtain a copy of the License at 33.13 + * 33.14 + * http://www.apache.org/licenses/LICENSE-2.0 33.15 + * 33.16 + * Unless required by applicable law or agreed to in writing, 33.17 + * software distributed under the License is distributed on an 33.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 33.19 + * KIND, either express or implied. See the License for the 33.20 + * specific language governing permissions and limitations 33.21 + * under the License. 33.22 + * 33.23 +*/ 33.24 + 33.25 +var tizen = require('cordova/platform'); 33.26 +var cordova = require('cordova'); 33.27 + 33.28 +module.exports = { 33.29 + getDeviceInfo: function(success, error) { 33.30 + setTimeout(function () { 33.31 + success({ 33.32 + cordova: tizen.cordovaVersion, 33.33 + platform: 'tizen', 33.34 + model: null, 33.35 + version: null, 33.36 + uuid: null 33.37 + }); 33.38 + }, 0); 33.39 + } 33.40 +}; 33.41 + 33.42 +require("cordova/tizen/commandProxy").add("Device", module.exports);
34.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 34.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.cpp Thu Jun 04 14:50:33 2015 +0200 34.3 @@ -0,0 +1,64 @@ 34.4 +/* 34.5 + * Copyright 2011 Wolfgang Koller - http://www.gofg.at/ 34.6 + * 34.7 + * Licensed under the Apache License, Version 2.0 (the "License"); 34.8 + * you may not use this file except in compliance with the License. 34.9 + * You may obtain a copy of the License at 34.10 + * 34.11 + * http://www.apache.org/licenses/LICENSE-2.0 34.12 + * 34.13 + * Unless required by applicable law or agreed to in writing, software 34.14 + * distributed under the License is distributed on an "AS IS" BASIS, 34.15 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 34.16 + * See the License for the specific language governing permissions and 34.17 + * limitations under the License. 34.18 + */ 34.19 + 34.20 +#include <QDeviceInfo> 34.21 +#include <QtSystemInfo> 34.22 + 34.23 +#include"device.h" 34.24 + 34.25 +#define CORDOVA "3.0.0" 34.26 + 34.27 +Device::Device(Cordova *cordova) : CPlugin(cordova) { 34.28 +} 34.29 + 34.30 +static QString getOSName() { 34.31 +#ifdef Q_OS_SYMBIAN 34.32 + QString platform = "Symbian"; 34.33 +#endif 34.34 +#ifdef Q_OS_WIN 34.35 + QString platform = "Windows"; 34.36 +#endif 34.37 +#ifdef Q_OS_WINCE 34.38 + QString platform = "Windows CE"; 34.39 +#endif 34.40 +#ifdef Q_OS_LINUX 34.41 + QString platform = "Linux"; 34.42 +#endif 34.43 + return platform; 34.44 +} 34.45 + 34.46 +void Device::getInfo(int scId, int ecId) { 34.47 + Q_UNUSED(ecId) 34.48 + 34.49 + QDeviceInfo systemDeviceInfo; 34.50 + QDeviceInfo systemInfo; 34.51 + 34.52 + QString platform = getOSName(); 34.53 + 34.54 + QString uuid = systemDeviceInfo.uniqueDeviceID(); 34.55 + if (uuid.isEmpty()) { 34.56 + QString deviceDescription = systemInfo.imei(0) + ";" + systemInfo.manufacturer() + ";" + systemInfo.model() + ";" + systemInfo.productName() + ";" + platform; 34.57 + QString user = qgetenv("USER"); 34.58 + if (user.isEmpty()) { 34.59 + user = qgetenv("USERNAME"); 34.60 + if (user.isEmpty()) 34.61 + user = QDir::homePath(); 34.62 + } 34.63 + uuid = QString(QCryptographicHash::hash((deviceDescription + ";" + user).toUtf8(), QCryptographicHash::Md5).toHex()); 34.64 + } 34.65 + 34.66 + this->cb(scId, systemDeviceInfo.model(), CORDOVA, platform, uuid, systemInfo.version(QDeviceInfo::Os)); 34.67 +}
35.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 35.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.h Thu Jun 04 14:50:33 2015 +0200 35.3 @@ -0,0 +1,47 @@ 35.4 +/* 35.5 + * Copyright 2011 Wolfgang Koller - http://www.gofg.at/ 35.6 + * 35.7 + * Licensed under the Apache License, Version 2.0 (the "License"); 35.8 + * you may not use this file except in compliance with the License. 35.9 + * You may obtain a copy of the License at 35.10 + * 35.11 + * http://www.apache.org/licenses/LICENSE-2.0 35.12 + * 35.13 + * Unless required by applicable law or agreed to in writing, software 35.14 + * distributed under the License is distributed on an "AS IS" BASIS, 35.15 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 35.16 + * See the License for the specific language governing permissions and 35.17 + * limitations under the License. 35.18 + */ 35.19 + 35.20 +#ifndef DEVICE_H_FDSAFAS 35.21 +#define DEVICE_H_FDSAFAS 35.22 + 35.23 +#include <QtCore> 35.24 + 35.25 +#include <cplugin.h> 35.26 + 35.27 +class Device: public CPlugin { 35.28 + Q_OBJECT 35.29 +public: 35.30 + explicit Device(Cordova *cordova); 35.31 + 35.32 + virtual const QString fullName() override { 35.33 + return Device::fullID(); 35.34 + } 35.35 + 35.36 + virtual const QString shortName() override { 35.37 + return "Device"; 35.38 + } 35.39 + 35.40 + static const QString fullID() { 35.41 + return "com.cordova.Device"; 35.42 + } 35.43 + 35.44 +signals: 35.45 + 35.46 +public slots: 35.47 + void getInfo(int scId, int ecId); 35.48 +}; 35.49 + 35.50 +#endif
36.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 36.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/ubuntu/device.js Thu Jun 04 14:50:33 2015 +0200 36.3 @@ -0,0 +1,34 @@ 36.4 +/* 36.5 + * 36.6 + * Licensed to the Apache Software Foundation (ASF) under one 36.7 + * or more contributor license agreements. See the NOTICE file 36.8 + * distributed with this work for additional information 36.9 + * regarding copyright ownership. The ASF licenses this file 36.10 + * to you under the Apache License, Version 2.0 (the 36.11 + * "License"); you may not use this file except in compliance 36.12 + * with the License. You may obtain a copy of the License at 36.13 + * 36.14 + * http://www.apache.org/licenses/LICENSE-2.0 36.15 + * 36.16 + * Unless required by applicable law or agreed to in writing, 36.17 + * software distributed under the License is distributed on an 36.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 36.19 + * KIND, either express or implied. See the License for the 36.20 + * specific language governing permissions and limitations 36.21 + * under the License. 36.22 + * 36.23 +*/ 36.24 + 36.25 +var cordova = require('cordova'); 36.26 +var exec = require('cordova/exec'); 36.27 + 36.28 +module.exports = { 36.29 + getInfo:function(win,fail,args) { 36.30 + Cordova.exec(function (model, cordova, platform, uuid, version) { 36.31 + win({name: name, model: model, cordova: cordova, 36.32 + platform: platform, uuid: uuid, version: version}); 36.33 + }, null, "com.cordova.Device", "getInfo", []); 36.34 + } 36.35 +}; 36.36 + 36.37 +require("cordova/exec/proxy").add("Device", module.exports);
37.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 37.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/windows/DeviceProxy.js Thu Jun 04 14:50:33 2015 +0200 37.3 @@ -0,0 +1,80 @@ 37.4 +/* 37.5 + * 37.6 + * Licensed to the Apache Software Foundation (ASF) under one 37.7 + * or more contributor license agreements. See the NOTICE file 37.8 + * distributed with this work for additional information 37.9 + * regarding copyright ownership. The ASF licenses this file 37.10 + * to you under the Apache License, Version 2.0 (the 37.11 + * "License"); you may not use this file except in compliance 37.12 + * with the License. You may obtain a copy of the License at 37.13 + * 37.14 + * http://www.apache.org/licenses/LICENSE-2.0 37.15 + * 37.16 + * Unless required by applicable law or agreed to in writing, 37.17 + * software distributed under the License is distributed on an 37.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 37.19 + * KIND, either express or implied. See the License for the 37.20 + * specific language governing permissions and limitations 37.21 + * under the License. 37.22 + * 37.23 +*/ 37.24 + 37.25 +module.exports = { 37.26 + 37.27 + getDeviceInfo:function(win, fail, args) { 37.28 + 37.29 + // deviceId aka uuid, stored in Windows.Storage.ApplicationData.current.localSettings.values.deviceId 37.30 + var deviceId; 37.31 + var localSettings = Windows.Storage.ApplicationData.current.localSettings; 37.32 + if (localSettings.values.deviceId) { 37.33 + deviceId = localSettings.values.deviceId; 37.34 + } 37.35 + else { 37.36 + // App-specific hardware id could be used as uuid, but it changes if the hardware changes... 37.37 + try { 37.38 + var ASHWID = Windows.System.Profile.HardwareIdentification.getPackageSpecificToken(null).id; 37.39 + deviceId = Windows.Storage.Streams.DataReader.fromBuffer(ASHWID).readGuid(); 37.40 + } catch (e) { 37.41 + // Couldn't get the hardware UUID 37.42 + deviceId = createUUID(); 37.43 + } 37.44 + //...so cache it per-install 37.45 + localSettings.values.deviceId = deviceId; 37.46 + } 37.47 + 37.48 + var userAgent = window.clientInformation.userAgent, 37.49 + // this will report "windows" in windows8.1 and windows phone 8.1 apps 37.50 + // and "windows8" in windows 8.0 apps similar to cordova.js 37.51 + // See https://github.com/apache/cordova-js/blob/master/src/windows/platform.js#L25 37.52 + devicePlatform = userAgent.indexOf("MSAppHost/1.0") == -1 ? "windows" : "windows8", 37.53 + versionString = userAgent.match(/Windows (?:Phone |NT )?([0-9.]+)/)[1]; 37.54 + 37.55 + var ROOT_CONTAINER = "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"; 37.56 + var DEVICE_CLASS_KEY = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10"; 37.57 + var DEVICE_CLASS_KEY_NO_SEMICOLON = '{A45C254E-DF1C-4EFD-8020-67D146A850E0}10'; 37.58 + var ROOT_CONTAINER_QUERY = "System.Devices.ContainerId:=\"" + ROOT_CONTAINER + "\""; 37.59 + var HAL_DEVICE_CLASS = "4d36e966-e325-11ce-bfc1-08002be10318"; 37.60 + var DEVICE_DRIVER_VERSION_KEY = "{A8B865DD-2E3D-4094-AD97-E593A70C75D6},3"; 37.61 + var pnpObject = Windows.Devices.Enumeration.Pnp.PnpObject; 37.62 + pnpObject.findAllAsync(Windows.Devices.Enumeration.Pnp.PnpObjectType.device, 37.63 + [DEVICE_DRIVER_VERSION_KEY, DEVICE_CLASS_KEY], ROOT_CONTAINER_QUERY) 37.64 + .then(function(rootDevices) { 37.65 + for (var i = 0; i < rootDevices.length; i++) { 37.66 + var rootDevice = rootDevices[i]; 37.67 + if (!rootDevice.properties) continue; 37.68 + if (rootDevice.properties[DEVICE_CLASS_KEY_NO_SEMICOLON] == HAL_DEVICE_CLASS) { 37.69 + versionString = rootDevice.properties[DEVICE_DRIVER_VERSION_KEY]; 37.70 + break; 37.71 + } 37.72 + } 37.73 + 37.74 + setTimeout(function () { 37.75 + win({ platform: devicePlatform, version: versionString, 37.76 + uuid: deviceId, model: window.clientInformation.platform }); 37.77 + }, 0); 37.78 + }); 37.79 + } 37.80 + 37.81 +}; 37.82 + 37.83 +require("cordova/exec/proxy").add("Device", module.exports);
38.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 38.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/windows8/DeviceProxy.js Thu Jun 04 14:50:33 2015 +0200 38.3 @@ -0,0 +1,82 @@ 38.4 +/* 38.5 + * 38.6 + * Licensed to the Apache Software Foundation (ASF) under one 38.7 + * or more contributor license agreements. See the NOTICE file 38.8 + * distributed with this work for additional information 38.9 + * regarding copyright ownership. The ASF licenses this file 38.10 + * to you under the Apache License, Version 2.0 (the 38.11 + * "License"); you may not use this file except in compliance 38.12 + * with the License. You may obtain a copy of the License at 38.13 + * 38.14 + * http://www.apache.org/licenses/LICENSE-2.0 38.15 + * 38.16 + * Unless required by applicable law or agreed to in writing, 38.17 + * software distributed under the License is distributed on an 38.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 38.19 + * KIND, either express or implied. See the License for the 38.20 + * specific language governing permissions and limitations 38.21 + * under the License. 38.22 + * 38.23 +*/ 38.24 + 38.25 + 38.26 +var cordova = require('cordova'); 38.27 +var utils = require('cordova/utils'); 38.28 + 38.29 +module.exports = { 38.30 + 38.31 + getDeviceInfo:function(win,fail,args) { 38.32 + 38.33 + // deviceId aka uuid, stored in Windows.Storage.ApplicationData.current.localSettings.values.deviceId 38.34 + var deviceId; 38.35 + 38.36 + var localSettings = Windows.Storage.ApplicationData.current.localSettings; 38.37 + 38.38 + if (localSettings.values.deviceId) { 38.39 + deviceId = localSettings.values.deviceId; 38.40 + } 38.41 + else { 38.42 + // App-specific hardware id could be used as uuid, but it changes if the hardware changes... 38.43 + try { 38.44 + var ASHWID = Windows.System.Profile.HardwareIdentification.getPackageSpecificToken(null).id; 38.45 + deviceId = Windows.Storage.Streams.DataReader.fromBuffer(ASHWID).readGuid(); 38.46 + } catch (e) { 38.47 + // Couldn't get the hardware UUID 38.48 + deviceId = createUUID(); 38.49 + } 38.50 + //...so cache it per-install 38.51 + localSettings.values.deviceId = deviceId; 38.52 + } 38.53 + 38.54 + var versionString = window.clientInformation.userAgent.match(/Windows NT ([0-9.]+)/)[1]; 38.55 + 38.56 + (function(self){ 38.57 + var ROOT_CONTAINER = "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"; 38.58 + var DEVICE_CLASS_KEY = "{A45C254E-DF1C-4EFD-8020-67D146A850E0},10"; 38.59 + var DEVICE_CLASS_KEY_NO_SEMICOLON = '{A45C254E-DF1C-4EFD-8020-67D146A850E0}10'; 38.60 + var ROOT_CONTAINER_QUERY = "System.Devices.ContainerId:=\"" + ROOT_CONTAINER + "\""; 38.61 + var HAL_DEVICE_CLASS = "4d36e966-e325-11ce-bfc1-08002be10318"; 38.62 + var DEVICE_DRIVER_VERSION_KEY = "{A8B865DD-2E3D-4094-AD97-E593A70C75D6},3"; 38.63 + var pnpObject = Windows.Devices.Enumeration.Pnp.PnpObject; 38.64 + pnpObject.findAllAsync(Windows.Devices.Enumeration.Pnp.PnpObjectType.device, [DEVICE_DRIVER_VERSION_KEY, DEVICE_CLASS_KEY], ROOT_CONTAINER_QUERY).then(function(rootDevices) { 38.65 + 38.66 + for (var i = 0; i < rootDevices.length; i++) { 38.67 + var rootDevice = rootDevices[i]; 38.68 + if (!rootDevice.properties) continue; 38.69 + if (rootDevice.properties[DEVICE_CLASS_KEY_NO_SEMICOLON] == HAL_DEVICE_CLASS) { 38.70 + versionString = rootDevice.properties[DEVICE_DRIVER_VERSION_KEY]; 38.71 + break; 38.72 + } 38.73 + } 38.74 + 38.75 + setTimeout(function () { 38.76 + win({ platform: "windows8", version: versionString, uuid: deviceId, model: window.clientInformation.platform }); 38.77 + }, 0); 38.78 + }); 38.79 + })(this); 38.80 + } 38.81 + 38.82 +}; 38.83 + 38.84 +require("cordova/exec/proxy").add("Device", module.exports); 38.85 +
39.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 39.2 +++ b/Touchgui/plugins/org.apache.cordova.device/src/wp/Device.cs Thu Jun 04 14:50:33 2015 +0200 39.3 @@ -0,0 +1,123 @@ 39.4 +/* 39.5 + Licensed under the Apache License, Version 2.0 (the "License"); 39.6 + you may not use this file except in compliance with the License. 39.7 + You may obtain a copy of the License at 39.8 + 39.9 + http://www.apache.org/licenses/LICENSE-2.0 39.10 + 39.11 + Unless required by applicable law or agreed to in writing, software 39.12 + distributed under the License is distributed on an "AS IS" BASIS, 39.13 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 39.14 + See the License for the specific language governing permissions and 39.15 + limitations under the License. 39.16 +*/ 39.17 + 39.18 +using System; 39.19 +using System.Net; 39.20 +using System.Windows; 39.21 +using System.Windows.Controls; 39.22 +using System.Windows.Documents; 39.23 +using System.Windows.Ink; 39.24 +using System.Windows.Input; 39.25 +using System.Windows.Media; 39.26 +using System.Windows.Media.Animation; 39.27 +using System.Windows.Shapes; 39.28 +using Microsoft.Phone.Info; 39.29 +using System.IO.IsolatedStorage; 39.30 +using System.Windows.Resources; 39.31 +using System.IO; 39.32 +using System.Diagnostics; 39.33 + 39.34 +namespace WPCordovaClassLib.Cordova.Commands 39.35 +{ 39.36 + public class Device : BaseCommand 39.37 + { 39.38 + public void getDeviceInfo(string notused) 39.39 + { 39.40 + 39.41 + string res = String.Format("\"name\":\"{0}\",\"platform\":\"{1}\",\"uuid\":\"{2}\",\"version\":\"{3}\",\"model\":\"{4}\"", 39.42 + this.name, 39.43 + this.platform, 39.44 + this.uuid, 39.45 + this.version, 39.46 + this.model); 39.47 + 39.48 + res = "{" + res + "}"; 39.49 + //Debug.WriteLine("Result::" + res); 39.50 + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, res)); 39.51 + } 39.52 + 39.53 + public string model 39.54 + { 39.55 + get 39.56 + { 39.57 + return DeviceStatus.DeviceName; 39.58 + //return String.Format("{0},{1},{2}", DeviceStatus.DeviceManufacturer, DeviceStatus.DeviceHardwareVersion, DeviceStatus.DeviceFirmwareVersion); 39.59 + } 39.60 + } 39.61 + 39.62 + public string name 39.63 + { 39.64 + get 39.65 + { 39.66 + return DeviceStatus.DeviceName; 39.67 + 39.68 + } 39.69 + } 39.70 + 39.71 + public string platform 39.72 + { 39.73 + get 39.74 + { 39.75 + return Environment.OSVersion.Platform.ToString(); 39.76 + } 39.77 + } 39.78 + 39.79 + public string uuid 39.80 + { 39.81 + get 39.82 + { 39.83 + string returnVal = ""; 39.84 + object id; 39.85 + UserExtendedProperties.TryGetValue("ANID", out id); 39.86 + 39.87 + if (id != null) 39.88 + { 39.89 + returnVal = id.ToString().Substring(2, 32); 39.90 + } 39.91 + else 39.92 + { 39.93 + returnVal = "???unknown???"; 39.94 + 39.95 + using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication()) 39.96 + { 39.97 + try 39.98 + { 39.99 + IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream("DeviceID.txt", FileMode.Open, FileAccess.Read, appStorage); 39.100 + 39.101 + using (StreamReader reader = new StreamReader(fileStream)) 39.102 + { 39.103 + returnVal = reader.ReadLine(); 39.104 + } 39.105 + } 39.106 + catch (Exception /*ex*/) 39.107 + { 39.108 + 39.109 + } 39.110 + } 39.111 + } 39.112 + 39.113 + return returnVal; 39.114 + } 39.115 + } 39.116 + 39.117 + public string version 39.118 + { 39.119 + get 39.120 + { 39.121 + return Environment.OSVersion.Version.ToString(); 39.122 + } 39.123 + } 39.124 + 39.125 + } 39.126 +}
40.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 40.2 +++ b/Touchgui/plugins/org.apache.cordova.device/tests/plugin.xml Thu Jun 04 14:50:33 2015 +0200 40.3 @@ -0,0 +1,31 @@ 40.4 +<?xml version="1.0" encoding="UTF-8"?> 40.5 +<!-- 40.6 + Licensed to the Apache Software Foundation (ASF) under one 40.7 + or more contributor license agreements. See the NOTICE file 40.8 + distributed with this work for additional information 40.9 + regarding copyright ownership. The ASF licenses this file 40.10 + to you under the Apache License, Version 2.0 (the 40.11 + "License"); you may not use this file except in compliance 40.12 + with the License. You may obtain a copy of the License at 40.13 + 40.14 + http://www.apache.org/licenses/LICENSE-2.0 40.15 + 40.16 + Unless required by applicable law or agreed to in writing, 40.17 + software distributed under the License is distributed on an 40.18 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 40.19 + KIND, either express or implied. See the License for the 40.20 + specific language governing permissions and limitations 40.21 + under the License. 40.22 +--> 40.23 + 40.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 40.25 + xmlns:rim="http://www.blackberry.com/ns/widgets" 40.26 + xmlns:android="http://schemas.android.com/apk/res/android" 40.27 + id="org.apache.cordova.device.tests" 40.28 + version="0.2.13"> 40.29 + <name>Cordova Device Plugin Tests</name> 40.30 + <license>Apache 2.0</license> 40.31 + 40.32 + <js-module src="tests.js" name="tests"> 40.33 + </js-module> 40.34 +</plugin>
41.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 41.2 +++ b/Touchgui/plugins/org.apache.cordova.device/tests/tests.js Thu Jun 04 14:50:33 2015 +0200 41.3 @@ -0,0 +1,94 @@ 41.4 +/* 41.5 + * 41.6 + * Licensed to the Apache Software Foundation (ASF) under one 41.7 + * or more contributor license agreements. See the NOTICE file 41.8 + * distributed with this work for additional information 41.9 + * regarding copyright ownership. The ASF licenses this file 41.10 + * to you under the Apache License, Version 2.0 (the 41.11 + * "License"); you may not use this file except in compliance 41.12 + * with the License. You may obtain a copy of the License at 41.13 + * 41.14 + * http://www.apache.org/licenses/LICENSE-2.0 41.15 + * 41.16 + * Unless required by applicable law or agreed to in writing, 41.17 + * software distributed under the License is distributed on an 41.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 41.19 + * KIND, either express or implied. See the License for the 41.20 + * specific language governing permissions and limitations 41.21 + * under the License. 41.22 + * 41.23 +*/ 41.24 + 41.25 +exports.defineAutoTests = function() { 41.26 + describe('Device Information (window.device)', function () { 41.27 + it("should exist", function() { 41.28 + expect(window.device).toBeDefined(); 41.29 + }); 41.30 + 41.31 + it("should contain a platform specification that is a string", function() { 41.32 + expect(window.device.platform).toBeDefined(); 41.33 + expect((new String(window.device.platform)).length > 0).toBe(true); 41.34 + }); 41.35 + 41.36 + it("should contain a version specification that is a string", function() { 41.37 + expect(window.device.version).toBeDefined(); 41.38 + expect((new String(window.device.version)).length > 0).toBe(true); 41.39 + }); 41.40 + 41.41 + it("should contain a UUID specification that is a string or a number", function() { 41.42 + expect(window.device.uuid).toBeDefined(); 41.43 + if (typeof window.device.uuid == 'string' || typeof window.device.uuid == 'object') { 41.44 + expect((new String(window.device.uuid)).length > 0).toBe(true); 41.45 + } else { 41.46 + expect(window.device.uuid > 0).toBe(true); 41.47 + } 41.48 + }); 41.49 + 41.50 + it("should contain a cordova specification that is a string", function() { 41.51 + expect(window.device.cordova).toBeDefined(); 41.52 + expect((new String(window.device.cordova)).length > 0).toBe(true); 41.53 + }); 41.54 + 41.55 + it("should depend on the precense of cordova.version string", function() { 41.56 + expect(window.cordova.version).toBeDefined(); 41.57 + expect((new String(window.cordova.version)).length > 0).toBe(true); 41.58 + }); 41.59 + 41.60 + it("should contain device.cordova equal to cordova.version", function() { 41.61 + expect(window.device.cordova).toBe(window.cordova.version); 41.62 + }); 41.63 + 41.64 + it("should contain a model specification that is a string", function() { 41.65 + expect(window.device.model).toBeDefined(); 41.66 + expect((new String(window.device.model)).length > 0).toBe(true); 41.67 + }); 41.68 + }); 41.69 +}; 41.70 + 41.71 +exports.defineManualTests = function(contentEl, createActionButton) { 41.72 + var logMessage = function (message, color) { 41.73 + var log = document.getElementById('info'); 41.74 + var logLine = document.createElement('div'); 41.75 + if (color) { 41.76 + logLine.style.color = color; 41.77 + } 41.78 + logLine.innerHTML = message; 41.79 + log.appendChild(logLine); 41.80 + } 41.81 + 41.82 + var clearLog = function () { 41.83 + var log = document.getElementById('info'); 41.84 + log.innerHTML = ''; 41.85 + } 41.86 + 41.87 + var device_tests = '<h3>Press Dump Device button to get device information</h3>' + 41.88 + '<div id="dump_device"></div>' + 41.89 + 'Expected result: Status box will get updated with device info. (i.e. platform, version, uuid, model, etc)'; 41.90 + 41.91 + contentEl.innerHTML = '<div id="info"></div>' + device_tests; 41.92 + 41.93 + createActionButton('Dump device', function() { 41.94 + clearLog(); 41.95 + logMessage(JSON.stringify(window.device, null, '\t')); 41.96 + }, "dump_device"); 41.97 +};
42.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 42.2 +++ b/Touchgui/plugins/org.apache.cordova.device/www/device.js Thu Jun 04 14:50:33 2015 +0200 42.3 @@ -0,0 +1,77 @@ 42.4 +/* 42.5 + * 42.6 + * Licensed to the Apache Software Foundation (ASF) under one 42.7 + * or more contributor license agreements. See the NOTICE file 42.8 + * distributed with this work for additional information 42.9 + * regarding copyright ownership. The ASF licenses this file 42.10 + * to you under the Apache License, Version 2.0 (the 42.11 + * "License"); you may not use this file except in compliance 42.12 + * with the License. You may obtain a copy of the License at 42.13 + * 42.14 + * http://www.apache.org/licenses/LICENSE-2.0 42.15 + * 42.16 + * Unless required by applicable law or agreed to in writing, 42.17 + * software distributed under the License is distributed on an 42.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 42.19 + * KIND, either express or implied. See the License for the 42.20 + * specific language governing permissions and limitations 42.21 + * under the License. 42.22 + * 42.23 +*/ 42.24 + 42.25 +var argscheck = require('cordova/argscheck'), 42.26 + channel = require('cordova/channel'), 42.27 + utils = require('cordova/utils'), 42.28 + exec = require('cordova/exec'), 42.29 + cordova = require('cordova'); 42.30 + 42.31 +channel.createSticky('onCordovaInfoReady'); 42.32 +// Tell cordova channel to wait on the CordovaInfoReady event 42.33 +channel.waitForInitialization('onCordovaInfoReady'); 42.34 + 42.35 +/** 42.36 + * This represents the mobile device, and provides properties for inspecting the model, version, UUID of the 42.37 + * phone, etc. 42.38 + * @constructor 42.39 + */ 42.40 +function Device() { 42.41 + this.available = false; 42.42 + this.platform = null; 42.43 + this.version = null; 42.44 + this.uuid = null; 42.45 + this.cordova = null; 42.46 + this.model = null; 42.47 + 42.48 + var me = this; 42.49 + 42.50 + channel.onCordovaReady.subscribe(function() { 42.51 + me.getInfo(function(info) { 42.52 + //ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js 42.53 + //TODO: CB-5105 native implementations should not return info.cordova 42.54 + var buildLabel = cordova.version; 42.55 + me.available = true; 42.56 + me.platform = info.platform; 42.57 + me.version = info.version; 42.58 + me.uuid = info.uuid; 42.59 + me.cordova = buildLabel; 42.60 + me.model = info.model; 42.61 + channel.onCordovaInfoReady.fire(); 42.62 + },function(e) { 42.63 + me.available = false; 42.64 + utils.alert("[ERROR] Error initializing Cordova: " + e); 42.65 + }); 42.66 + }); 42.67 +} 42.68 + 42.69 +/** 42.70 + * Get device info 42.71 + * 42.72 + * @param {Function} successCallback The function to call when the heading data is available 42.73 + * @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL) 42.74 + */ 42.75 +Device.prototype.getInfo = function(successCallback, errorCallback) { 42.76 + argscheck.checkArgs('fF', 'Device.getInfo', arguments); 42.77 + exec(successCallback, errorCallback, "Device", "getDeviceInfo", []); 42.78 +}; 42.79 + 42.80 +module.exports = new Device();
43.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 43.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/.fetch.json Thu Jun 04 14:50:33 2015 +0200 43.3 @@ -0,0 +1,1 @@ 43.4 +{"source":{"type":"local","path":"/opt/intel/XDK_IoT_Edition/xdk/components/server/cordova-plugins/org.apache.cordova.dialogs"}} 43.5 \ No newline at end of file
44.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 44.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/CONTRIBUTING.md Thu Jun 04 14:50:33 2015 +0200 44.3 @@ -0,0 +1,37 @@ 44.4 +<!-- 44.5 +# 44.6 +# Licensed to the Apache Software Foundation (ASF) under one 44.7 +# or more contributor license agreements. See the NOTICE file 44.8 +# distributed with this work for additional information 44.9 +# regarding copyright ownership. The ASF licenses this file 44.10 +# to you under the Apache License, Version 2.0 (the 44.11 +# "License"); you may not use this file except in compliance 44.12 +# with the License. You may obtain a copy of the License at 44.13 +# 44.14 +# http://www.apache.org/licenses/LICENSE-2.0 44.15 +# 44.16 +# Unless required by applicable law or agreed to in writing, 44.17 +# software distributed under the License is distributed on an 44.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 44.19 +# KIND, either express or implied. See the License for the 44.20 +# specific language governing permissions and limitations 44.21 +# under the License. 44.22 +# 44.23 +--> 44.24 + 44.25 +# Contributing to Apache Cordova 44.26 + 44.27 +Anyone can contribute to Cordova. And we need your contributions. 44.28 + 44.29 +There are multiple ways to contribute: report bugs, improve the docs, and 44.30 +contribute code. 44.31 + 44.32 +For instructions on this, start with the 44.33 +[contribution overview](http://cordova.apache.org/#contribute). 44.34 + 44.35 +The details are explained there, but the important items are: 44.36 + - Sign and submit an Apache ICLA (Contributor License Agreement). 44.37 + - Have a Jira issue open that corresponds to your contribution. 44.38 + - Run the tests so your patch doesn't break existing functionality. 44.39 + 44.40 +We look forward to your contributions!
45.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 45.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/LICENSE Thu Jun 04 14:50:33 2015 +0200 45.3 @@ -0,0 +1,202 @@ 45.4 + 45.5 + Apache License 45.6 + Version 2.0, January 2004 45.7 + http://www.apache.org/licenses/ 45.8 + 45.9 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 45.10 + 45.11 + 1. Definitions. 45.12 + 45.13 + "License" shall mean the terms and conditions for use, reproduction, 45.14 + and distribution as defined by Sections 1 through 9 of this document. 45.15 + 45.16 + "Licensor" shall mean the copyright owner or entity authorized by 45.17 + the copyright owner that is granting the License. 45.18 + 45.19 + "Legal Entity" shall mean the union of the acting entity and all 45.20 + other entities that control, are controlled by, or are under common 45.21 + control with that entity. For the purposes of this definition, 45.22 + "control" means (i) the power, direct or indirect, to cause the 45.23 + direction or management of such entity, whether by contract or 45.24 + otherwise, or (ii) ownership of fifty percent (50%) or more of the 45.25 + outstanding shares, or (iii) beneficial ownership of such entity. 45.26 + 45.27 + "You" (or "Your") shall mean an individual or Legal Entity 45.28 + exercising permissions granted by this License. 45.29 + 45.30 + "Source" form shall mean the preferred form for making modifications, 45.31 + including but not limited to software source code, documentation 45.32 + source, and configuration files. 45.33 + 45.34 + "Object" form shall mean any form resulting from mechanical 45.35 + transformation or translation of a Source form, including but 45.36 + not limited to compiled object code, generated documentation, 45.37 + and conversions to other media types. 45.38 + 45.39 + "Work" shall mean the work of authorship, whether in Source or 45.40 + Object form, made available under the License, as indicated by a 45.41 + copyright notice that is included in or attached to the work 45.42 + (an example is provided in the Appendix below). 45.43 + 45.44 + "Derivative Works" shall mean any work, whether in Source or Object 45.45 + form, that is based on (or derived from) the Work and for which the 45.46 + editorial revisions, annotations, elaborations, or other modifications 45.47 + represent, as a whole, an original work of authorship. For the purposes 45.48 + of this License, Derivative Works shall not include works that remain 45.49 + separable from, or merely link (or bind by name) to the interfaces of, 45.50 + the Work and Derivative Works thereof. 45.51 + 45.52 + "Contribution" shall mean any work of authorship, including 45.53 + the original version of the Work and any modifications or additions 45.54 + to that Work or Derivative Works thereof, that is intentionally 45.55 + submitted to Licensor for inclusion in the Work by the copyright owner 45.56 + or by an individual or Legal Entity authorized to submit on behalf of 45.57 + the copyright owner. For the purposes of this definition, "submitted" 45.58 + means any form of electronic, verbal, or written communication sent 45.59 + to the Licensor or its representatives, including but not limited to 45.60 + communication on electronic mailing lists, source code control systems, 45.61 + and issue tracking systems that are managed by, or on behalf of, the 45.62 + Licensor for the purpose of discussing and improving the Work, but 45.63 + excluding communication that is conspicuously marked or otherwise 45.64 + designated in writing by the copyright owner as "Not a Contribution." 45.65 + 45.66 + "Contributor" shall mean Licensor and any individual or Legal Entity 45.67 + on behalf of whom a Contribution has been received by Licensor and 45.68 + subsequently incorporated within the Work. 45.69 + 45.70 + 2. Grant of Copyright License. Subject to the terms and conditions of 45.71 + this License, each Contributor hereby grants to You a perpetual, 45.72 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 45.73 + copyright license to reproduce, prepare Derivative Works of, 45.74 + publicly display, publicly perform, sublicense, and distribute the 45.75 + Work and such Derivative Works in Source or Object form. 45.76 + 45.77 + 3. Grant of Patent License. Subject to the terms and conditions of 45.78 + this License, each Contributor hereby grants to You a perpetual, 45.79 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 45.80 + (except as stated in this section) patent license to make, have made, 45.81 + use, offer to sell, sell, import, and otherwise transfer the Work, 45.82 + where such license applies only to those patent claims licensable 45.83 + by such Contributor that are necessarily infringed by their 45.84 + Contribution(s) alone or by combination of their Contribution(s) 45.85 + with the Work to which such Contribution(s) was submitted. If You 45.86 + institute patent litigation against any entity (including a 45.87 + cross-claim or counterclaim in a lawsuit) alleging that the Work 45.88 + or a Contribution incorporated within the Work constitutes direct 45.89 + or contributory patent infringement, then any patent licenses 45.90 + granted to You under this License for that Work shall terminate 45.91 + as of the date such litigation is filed. 45.92 + 45.93 + 4. Redistribution. You may reproduce and distribute copies of the 45.94 + Work or Derivative Works thereof in any medium, with or without 45.95 + modifications, and in Source or Object form, provided that You 45.96 + meet the following conditions: 45.97 + 45.98 + (a) You must give any other recipients of the Work or 45.99 + Derivative Works a copy of this License; and 45.100 + 45.101 + (b) You must cause any modified files to carry prominent notices 45.102 + stating that You changed the files; and 45.103 + 45.104 + (c) You must retain, in the Source form of any Derivative Works 45.105 + that You distribute, all copyright, patent, trademark, and 45.106 + attribution notices from the Source form of the Work, 45.107 + excluding those notices that do not pertain to any part of 45.108 + the Derivative Works; and 45.109 + 45.110 + (d) If the Work includes a "NOTICE" text file as part of its 45.111 + distribution, then any Derivative Works that You distribute must 45.112 + include a readable copy of the attribution notices contained 45.113 + within such NOTICE file, excluding those notices that do not 45.114 + pertain to any part of the Derivative Works, in at least one 45.115 + of the following places: within a NOTICE text file distributed 45.116 + as part of the Derivative Works; within the Source form or 45.117 + documentation, if provided along with the Derivative Works; or, 45.118 + within a display generated by the Derivative Works, if and 45.119 + wherever such third-party notices normally appear. The contents 45.120 + of the NOTICE file are for informational purposes only and 45.121 + do not modify the License. You may add Your own attribution 45.122 + notices within Derivative Works that You distribute, alongside 45.123 + or as an addendum to the NOTICE text from the Work, provided 45.124 + that such additional attribution notices cannot be construed 45.125 + as modifying the License. 45.126 + 45.127 + You may add Your own copyright statement to Your modifications and 45.128 + may provide additional or different license terms and conditions 45.129 + for use, reproduction, or distribution of Your modifications, or 45.130 + for any such Derivative Works as a whole, provided Your use, 45.131 + reproduction, and distribution of the Work otherwise complies with 45.132 + the conditions stated in this License. 45.133 + 45.134 + 5. Submission of Contributions. Unless You explicitly state otherwise, 45.135 + any Contribution intentionally submitted for inclusion in the Work 45.136 + by You to the Licensor shall be under the terms and conditions of 45.137 + this License, without any additional terms or conditions. 45.138 + Notwithstanding the above, nothing herein shall supersede or modify 45.139 + the terms of any separate license agreement you may have executed 45.140 + with Licensor regarding such Contributions. 45.141 + 45.142 + 6. Trademarks. This License does not grant permission to use the trade 45.143 + names, trademarks, service marks, or product names of the Licensor, 45.144 + except as required for reasonable and customary use in describing the 45.145 + origin of the Work and reproducing the content of the NOTICE file. 45.146 + 45.147 + 7. Disclaimer of Warranty. Unless required by applicable law or 45.148 + agreed to in writing, Licensor provides the Work (and each 45.149 + Contributor provides its Contributions) on an "AS IS" BASIS, 45.150 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 45.151 + implied, including, without limitation, any warranties or conditions 45.152 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 45.153 + PARTICULAR PURPOSE. You are solely responsible for determining the 45.154 + appropriateness of using or redistributing the Work and assume any 45.155 + risks associated with Your exercise of permissions under this License. 45.156 + 45.157 + 8. Limitation of Liability. In no event and under no legal theory, 45.158 + whether in tort (including negligence), contract, or otherwise, 45.159 + unless required by applicable law (such as deliberate and grossly 45.160 + negligent acts) or agreed to in writing, shall any Contributor be 45.161 + liable to You for damages, including any direct, indirect, special, 45.162 + incidental, or consequential damages of any character arising as a 45.163 + result of this License or out of the use or inability to use the 45.164 + Work (including but not limited to damages for loss of goodwill, 45.165 + work stoppage, computer failure or malfunction, or any and all 45.166 + other commercial damages or losses), even if such Contributor 45.167 + has been advised of the possibility of such damages. 45.168 + 45.169 + 9. Accepting Warranty or Additional Liability. While redistributing 45.170 + the Work or Derivative Works thereof, You may choose to offer, 45.171 + and charge a fee for, acceptance of support, warranty, indemnity, 45.172 + or other liability obligations and/or rights consistent with this 45.173 + License. However, in accepting such obligations, You may act only 45.174 + on Your own behalf and on Your sole responsibility, not on behalf 45.175 + of any other Contributor, and only if You agree to indemnify, 45.176 + defend, and hold each Contributor harmless for any liability 45.177 + incurred by, or claims asserted against, such Contributor by reason 45.178 + of your accepting any such warranty or additional liability. 45.179 + 45.180 + END OF TERMS AND CONDITIONS 45.181 + 45.182 + APPENDIX: How to apply the Apache License to your work. 45.183 + 45.184 + To apply the Apache License to your work, attach the following 45.185 + boilerplate notice, with the fields enclosed by brackets "[]" 45.186 + replaced with your own identifying information. (Don't include 45.187 + the brackets!) The text should be enclosed in the appropriate 45.188 + comment syntax for the file format. We also recommend that a 45.189 + file or class name and description of purpose be included on the 45.190 + same "printed page" as the copyright notice for easier 45.191 + identification within third-party archives. 45.192 + 45.193 + Copyright [yyyy] [name of copyright owner] 45.194 + 45.195 + Licensed under the Apache License, Version 2.0 (the "License"); 45.196 + you may not use this file except in compliance with the License. 45.197 + You may obtain a copy of the License at 45.198 + 45.199 + http://www.apache.org/licenses/LICENSE-2.0 45.200 + 45.201 + Unless required by applicable law or agreed to in writing, software 45.202 + distributed under the License is distributed on an "AS IS" BASIS, 45.203 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 45.204 + See the License for the specific language governing permissions and 45.205 + limitations under the License. 45.206 \ No newline at end of file
46.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 46.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/NOTICE Thu Jun 04 14:50:33 2015 +0200 46.3 @@ -0,0 +1,5 @@ 46.4 +Apache Cordova 46.5 +Copyright 2012 The Apache Software Foundation 46.6 + 46.7 +This product includes software developed at 46.8 +The Apache Software Foundation (http://www.apache.org/).
47.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 47.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/README.md Thu Jun 04 14:50:33 2015 +0200 47.3 @@ -0,0 +1,22 @@ 47.4 +<!--- 47.5 + license: Licensed to the Apache Software Foundation (ASF) under one 47.6 + or more contributor license agreements. See the NOTICE file 47.7 + distributed with this work for additional information 47.8 + regarding copyright ownership. The ASF licenses this file 47.9 + to you under the Apache License, Version 2.0 (the 47.10 + "License"); you may not use this file except in compliance 47.11 + with the License. You may obtain a copy of the License at 47.12 + 47.13 + http://www.apache.org/licenses/LICENSE-2.0 47.14 + 47.15 + Unless required by applicable law or agreed to in writing, 47.16 + software distributed under the License is distributed on an 47.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 47.18 + KIND, either express or implied. See the License for the 47.19 + specific language governing permissions and limitations 47.20 + under the License. 47.21 +--> 47.22 + 47.23 +# org.apache.cordova.dialogs 47.24 + 47.25 +Plugin documentation: [doc/index.md](doc/index.md)
48.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 48.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/RELEASENOTES.md Thu Jun 04 14:50:33 2015 +0200 48.3 @@ -0,0 +1,112 @@ 48.4 +<!-- 48.5 +# 48.6 +# Licensed to the Apache Software Foundation (ASF) under one 48.7 +# or more contributor license agreements. See the NOTICE file 48.8 +# distributed with this work for additional information 48.9 +# regarding copyright ownership. The ASF licenses this file 48.10 +# to you under the Apache License, Version 2.0 (the 48.11 +# "License"); you may not use this file except in compliance 48.12 +# with the License. You may obtain a copy of the License at 48.13 +# 48.14 +# http://www.apache.org/licenses/LICENSE-2.0 48.15 +# 48.16 +# Unless required by applicable law or agreed to in writing, 48.17 +# software distributed under the License is distributed on an 48.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 48.19 +# KIND, either express or implied. See the License for the 48.20 +# specific language governing permissions and limitations 48.21 +# under the License. 48.22 +# 48.23 +--> 48.24 +# Release Notes 48.25 + 48.26 +### 0.2.2 (Sept 25, 2013) 48.27 +* CB-4889 bumping&resetting version 48.28 +* [windows8] commandProxy was moved 48.29 +* CB-4889 renaming reference in Notification.cs 48.30 +* CB-4889 renaming org.apache.cordova.core.dialogs to org.apache.cordova.dialogs 48.31 +* Rename CHANGELOG.md -> RELEASENOTES.md 48.32 +* [CB-4592] [Blackberry10] Added beep support 48.33 +* [CB-4752] Incremented plugin version on dev branch. 48.34 + 48.35 + ### 0.2.3 (Oct 28, 2013) 48.36 +* CB-5128: added repo + issue tag to plugin.xml for dialogs plugin 48.37 +* new plugin execute arguments supported 48.38 +* new plugin style 48.39 +* smaller fonts styling input 48.40 +* img files copied inside plugin 48.41 +* style added 48.42 +* prompt added 48.43 +* styling from James 48.44 +* fixed "exec" calls addedd css, but not working yet 48.45 +* first (blind) try 48.46 +* [CB-4915] Incremented plugin version on dev branch. 48.47 + 48.48 + 48.49 +### 0.2.4 (Dec 4, 2013) 48.50 +* add ubuntu platform 48.51 +* 1. Added amazon-fireos platform. 2. Change to use amazon-fireos as a platform if user agent string contains 'cordova-amazon-fireos'. 48.52 +* added beep funtionality using ms-winsoundevent:Notfication.Default 48.53 + 48.54 +### 0.2.5 (Jan 02, 2014) 48.55 +* CB-4696 Fix compile error for Xcode 4.5. 48.56 +* CB-5658 Add doc/index.md for Dialogs plugin 48.57 +* CB-3762 Change prompt default to empty string 48.58 +* Move images from css to img 48.59 + 48.60 +### 0.2.6 (Feb 05, 2014) 48.61 +* no need to recreate the manifest.webapp file after each `cordova prepare` for FFOS 48.62 +* FFOS description added 48.63 + 48.64 +### 0.2.7 (Apr 17, 2014) 48.65 +* CB-6212: [iOS] fix warnings compiled under arm64 64-bit 48.66 +* CB-6411: [BlackBerry10] Work around Audio playback issue 48.67 +* CB-6411: [BlackBerry10] Updates to beep 48.68 +* CB-6422: [windows8] use cordova/exec/proxy 48.69 +* CB-6460: Update license headers 48.70 +* Add NOTICE file 48.71 + 48.72 +### 0.2.8 (Jun 05, 2014) 48.73 +* CB-6801 Add license 48.74 +* running original windows.open, inAppBrowser is overriding it no need to place CSS in every page anymore 48.75 +* CB-5945 [Windows8] do not call success callbacks until dialog is dismissed 48.76 +* CB-4616 Returned index 0 was not documented for notification.prompt 48.77 +* update docs to state that prompt is supported on windowsphone 48.78 +* CB-6528 allow scroll on alert message content 48.79 +* [CB-6628][amazon-fireos]dialogs plugin's confirm and prompt methods dont work confirm() method was missing amazon-fireos platform check. added that. prompt() method had bug. It is executed in a worker thread that does not have a message queue(or Looper object) associated with it and hence "can't create a handler" exception is thrown. To fix this issue, we need to create the EditText widget from within the UI thread. This was fixed sometime ago when we added fireos platform but commit got lost somewhere. So fixing it again now. 48.80 +* CB-6491 add CONTRIBUTING.md 48.81 +* Added check for isFinishing() on the parent activity to prevent crashes when trying to display dialogs when activity is in this phase of it's lifecycle 48.82 +* CB-4966 Dialogs are in window now No need to add anything to manifest or index.html 48.83 +* Removing FirefoxOS Quirks * no need to add special permission (it's different API with the same name) * notification.css is added automatically 48.84 + 48.85 +### 0.2.9 (Aug 06, 2014) 48.86 +* ubuntu: pass proper arguments to prompt callback 48.87 +* ubuntu: use TextField instead of TextInput 48.88 +* ubuntu: proper message escaping before passing to qml 48.89 +* **FFOS** update notification.js 48.90 +* CB-6127 Updated translations for docs 48.91 +* android: Explicitly apply default theme to dialogs 48.92 +* Fix Beep exception on Android when no argument passed 48.93 + 48.94 +### 0.2.10 (Sep 17, 2014) 48.95 +* CB-7538 Android beep thread fix Beep now executes in it's own thread. It was previously executing in the main UI thread which was causing the application to lock up will the beep was occurring. Closing pull request 48.96 +* Set dialog text dir to locale 48.97 +* Renamed test dir, added nested plugin.xml 48.98 +* added documentation for manual tests 48.99 +* CB-6965 Added manual tests 48.100 +* CB-6965 Port notification tests to test-framework 48.101 + 48.102 +### 0.2.11 (Dec 02, 2014) 48.103 +* [CB-7737] lower min height for alert 48.104 +* CB-8038 backslash getting escaped twice in **BB10** 48.105 +* CB-8029 test 1-based indexing for confirm 48.106 +* CB-7639 Update docs + manual tests 48.107 +* CB-7639 Revert back `isAlertShowing` flag in case of exception to prevent queuing of future dialogs. 48.108 +* CB-7639 Handle button labels as array on windows 48.109 +* CB-7977 Mention `deviceready` in plugin docs 48.110 +* Check for `setTextDirection` API level 48.111 +* **Android** Make spinner dialog to use `THEME_DEVICE_DEFAULT_LIGHT` (same as the other dialogs) 48.112 +* **Android** Unbreak `API` level < `14` 48.113 +* CB-7414 **BB10** Document callback parameter for `navigator.notification.alert` 48.114 +* CB-7700 cordova-plugin-dialogs documentation translation: cordova-plugin-dialogs 48.115 +* CB-7571 Bump version of nested plugin to match parent plugin
49.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 49.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/de/index.md Thu Jun 04 14:50:33 2015 +0200 49.3 @@ -0,0 +1,247 @@ 49.4 +<!--- 49.5 + Licensed to the Apache Software Foundation (ASF) under one 49.6 + or more contributor license agreements. See the NOTICE file 49.7 + distributed with this work for additional information 49.8 + regarding copyright ownership. The ASF licenses this file 49.9 + to you under the Apache License, Version 2.0 (the 49.10 + "License"); you may not use this file except in compliance 49.11 + with the License. You may obtain a copy of the License at 49.12 + 49.13 + http://www.apache.org/licenses/LICENSE-2.0 49.14 + 49.15 + Unless required by applicable law or agreed to in writing, 49.16 + software distributed under the License is distributed on an 49.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 49.18 + KIND, either express or implied. See the License for the 49.19 + specific language governing permissions and limitations 49.20 + under the License. 49.21 +--> 49.22 + 49.23 +# org.apache.cordova.dialogs 49.24 + 49.25 +Dieses Plugin ermöglicht den Zugriff auf einige native Dialog-UI-Elemente. 49.26 + 49.27 +## Installation 49.28 + 49.29 + cordova plugin add org.apache.cordova.dialogs 49.30 + 49.31 + 49.32 +## Methoden 49.33 + 49.34 +* `navigator.notification.alert` 49.35 +* `navigator.notification.confirm` 49.36 +* `navigator.notification.prompt` 49.37 +* `navigator.notification.beep` 49.38 + 49.39 +## navigator.notification.alert 49.40 + 49.41 +Zeigt eine benutzerdefinierte Warnung oder Dialogfeld Feld. Die meisten Implementierungen von Cordova ein native Dialogfeld für dieses Feature verwenden, aber einige Plattformen des Browsers `alert` Funktion, die in der Regel weniger anpassbar ist. 49.42 + 49.43 + Navigator.Notification.Alert (Message, AlertCallback, [Titel], [ButtonName]) 49.44 + 49.45 + 49.46 +* **Nachricht**: Dialogfeld Nachricht. *(String)* 49.47 + 49.48 +* **AlertCallback**: Callback aufgerufen wird, wenn Warnungs-Dialogfeld geschlossen wird. *(Funktion)* 49.49 + 49.50 +* **Titel**: Dialog "Titel". *(String)* (Optional, Standard ist`Alert`) 49.51 + 49.52 +* **ButtonName**: Name der Schaltfläche. *(String)* (Optional, Standard ist`OK`) 49.53 + 49.54 +### Beispiel 49.55 + 49.56 + function alertDismissed() { 49.57 + // do something 49.58 + } 49.59 + 49.60 + navigator.notification.alert( 49.61 + 'You are the winner!', // message 49.62 + alertDismissed, // callback 49.63 + 'Game Over', // title 49.64 + 'Done' // buttonName 49.65 + ); 49.66 + 49.67 + 49.68 +### Unterstützte Plattformen 49.69 + 49.70 +* Amazon Fire OS 49.71 +* Android 49.72 +* BlackBerry 10 49.73 +* Firefox OS 49.74 +* iOS 49.75 +* Tizen 49.76 +* Windows Phone 7 und 8 49.77 +* Windows 8 49.78 + 49.79 +### Windows Phone 7 und 8 Eigenarten 49.80 + 49.81 +* Es gibt keine eingebaute Datenbanksuchroutine-Warnung, aber Sie können binden, wie folgt zu nennen `alert()` im globalen Gültigkeitsbereich: 49.82 + 49.83 + window.alert = navigator.notification.alert; 49.84 + 49.85 + 49.86 +* Beide `alert` und `confirm` sind nicht blockierende Aufrufe, die Ergebnisse davon nur asynchron sind. 49.87 + 49.88 +### Firefox OS Macken: 49.89 + 49.90 +Beide Native blockierenden `window.alert()` und nicht-blockierende `navigator.notification.alert()` stehen zur Verfügung. 49.91 + 49.92 +## navigator.notification.confirm 49.93 + 49.94 +Zeigt das Dialogfeld anpassbare Bestätigung. 49.95 + 49.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 49.97 + 49.98 + 49.99 +* **Nachricht**: Dialogfeld Nachricht. *(String)* 49.100 + 49.101 +* **ConfirmCallback**: Callback aufgerufen wird, mit Index gedrückt (1, 2 oder 3) oder wenn das Dialogfeld geschlossen wird, ohne einen Tastendruck (0). *(Funktion)* 49.102 + 49.103 +* **Titel**: Dialog "Titel". *(String)* (Optional, Standard ist`Confirm`) 49.104 + 49.105 +* **ButtonLabels**: Array von Zeichenfolgen, die Schaltflächenbezeichnungen angeben. *(Array)* (Optional, Standard ist [ `OK,Cancel` ]) 49.106 + 49.107 +### confirmCallback 49.108 + 49.109 +Die `confirmCallback` wird ausgeführt, wenn der Benutzer eine der Schaltflächen im Dialogfeld zur Bestätigung drückt. 49.110 + 49.111 +Der Rückruf dauert das Argument `buttonIndex` *(Anzahl)*, die der Index der Schaltfläche gedrückt ist. Beachten Sie, dass der Index 1-basierte Indizierung, verwendet, sodass der Wert ist `1` , `2` , `3` , etc.. 49.112 + 49.113 +### Beispiel 49.114 + 49.115 + function onConfirm(buttonIndex) { 49.116 + alert('You selected button ' + buttonIndex); 49.117 + } 49.118 + 49.119 + navigator.notification.confirm( 49.120 + 'You are the winner!', // message 49.121 + onConfirm, // callback to invoke with index of button pressed 49.122 + 'Game Over', // title 49.123 + ['Restart','Exit'] // buttonLabels 49.124 + ); 49.125 + 49.126 + 49.127 +### Unterstützte Plattformen 49.128 + 49.129 +* Amazon Fire OS 49.130 +* Android 49.131 +* BlackBerry 10 49.132 +* Firefox OS 49.133 +* iOS 49.134 +* Tizen 49.135 +* Windows Phone 7 und 8 49.136 +* Windows 8 49.137 + 49.138 +### Windows Phone 7 und 8 Eigenarten 49.139 + 49.140 +* Es gibt keine integrierte Browser-Funktion für `window.confirm` , aber Sie können es binden, indem Sie zuweisen: 49.141 + 49.142 + window.confirm = navigator.notification.confirm; 49.143 + 49.144 + 49.145 +* Aufrufe von `alert` und `confirm` sind nicht blockierend, so dass das Ergebnis nur asynchron zur Verfügung steht. 49.146 + 49.147 +### Firefox OS Macken: 49.148 + 49.149 +Beide Native blockierenden `window.confirm()` und nicht-blockierende `navigator.notification.confirm()` stehen zur Verfügung. 49.150 + 49.151 +## navigator.notification.prompt 49.152 + 49.153 +Zeigt eine native Dialogfeld, das mehr als des Browsers anpassbar ist `prompt` Funktion. 49.154 + 49.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 49.156 + 49.157 + 49.158 +* **Nachricht**: Dialogfeld Nachricht. *(String)* 49.159 + 49.160 +* **PromptCallback**: Callback aufgerufen wird, mit Index gedrückt (1, 2 oder 3) oder wenn das Dialogfeld geschlossen wird, ohne einen Tastendruck (0). *(Funktion)* 49.161 + 49.162 +* **Titel**: Dialog Title *(String)* (Optional, Standard ist`Prompt`) 49.163 + 49.164 +* **ButtonLabels**: Array von Zeichenfolgen angeben Schaltfläche Etiketten *(Array)* (Optional, Standard ist`["OK","Cancel"]`) 49.165 + 49.166 +* **DefaultText**: Standard-Textbox Eingabewert ( `String` ) (Optional, Standard: leere Zeichenfolge) 49.167 + 49.168 +### promptCallback 49.169 + 49.170 +Die `promptCallback` wird ausgeführt, wenn der Benutzer eine der Schaltflächen im Eingabedialogfeld drückt. Die `results` an den Rückruf übergebene Objekt enthält die folgenden Eigenschaften: 49.171 + 49.172 +* **ButtonIndex**: der Index der Schaltfläche gedrückt. *(Anzahl)* Beachten Sie, dass der Index 1-basierte Indizierung, verwendet, sodass der Wert ist `1` , `2` , `3` , etc.. 49.173 + 49.174 +* **Eingang1**: in Eingabedialogfeld eingegebenen Text. *(String)* 49.175 + 49.176 +### Beispiel 49.177 + 49.178 + function onPrompt(results) { 49.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 49.180 + } 49.181 + 49.182 + navigator.notification.prompt( 49.183 + 'Please enter your name', // message 49.184 + onPrompt, // callback to invoke 49.185 + 'Registration', // title 49.186 + ['Ok','Exit'], // buttonLabels 49.187 + 'Jane Doe' // defaultText 49.188 + ); 49.189 + 49.190 + 49.191 +### Unterstützte Plattformen 49.192 + 49.193 +* Amazon Fire OS 49.194 +* Android 49.195 +* Firefox OS 49.196 +* iOS 49.197 +* Windows Phone 7 und 8 49.198 + 49.199 +### Android Eigenarten 49.200 + 49.201 +* Android unterstützt maximal drei Schaltflächen und mehr als das ignoriert. 49.202 + 49.203 +* Auf Android 3.0 und höher, werden die Schaltflächen in umgekehrter Reihenfolge für Geräte angezeigt, die das Holo-Design verwenden. 49.204 + 49.205 +### Firefox OS Macken: 49.206 + 49.207 +Beide Native blockierenden `window.prompt()` und nicht-blockierende `navigator.notification.prompt()` stehen zur Verfügung. 49.208 + 49.209 +## navigator.notification.beep 49.210 + 49.211 +Das Gerät spielt einen Signalton sound. 49.212 + 49.213 + navigator.notification.beep(times); 49.214 + 49.215 + 49.216 +* **Zeiten**: die Anzahl der Wiederholungen des Signaltons. *(Anzahl)* 49.217 + 49.218 +### Beispiel 49.219 + 49.220 + // Beep twice! 49.221 + navigator.notification.beep(2); 49.222 + 49.223 + 49.224 +### Unterstützte Plattformen 49.225 + 49.226 +* Amazon Fire OS 49.227 +* Android 49.228 +* BlackBerry 10 49.229 +* iOS 49.230 +* Tizen 49.231 +* Windows Phone 7 und 8 49.232 +* Windows 8 49.233 + 49.234 +### Amazon Fire OS Macken 49.235 + 49.236 +* Amazon Fire OS spielt die Standardeinstellung **Akustische Benachrichtigung** unter **Einstellungen/Display & Sound** Bereich angegeben. 49.237 + 49.238 +### Android Eigenarten 49.239 + 49.240 +* Android spielt die Standardeinstellung **Benachrichtigung Klingelton** unter **Einstellungen/Sound & Display** -Panel angegeben. 49.241 + 49.242 +### Windows Phone 7 und 8 Eigenarten 49.243 + 49.244 +* Stützt sich auf eine generische Piepton-Datei aus der Cordova-Distribution. 49.245 + 49.246 +### Tizen Macken 49.247 + 49.248 +* Tizen implementiert Signaltöne durch Abspielen einer Audiodatei über die Medien API. 49.249 + 49.250 +* Die Beep-Datei muss kurz sein, befinden muss einem `sounds` Unterverzeichnis des Stammverzeichnisses der Anwendung, und muss den Namen`beep.wav`. 49.251 \ No newline at end of file
50.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 50.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/es/index.md Thu Jun 04 14:50:33 2015 +0200 50.3 @@ -0,0 +1,247 @@ 50.4 +<!--- 50.5 + Licensed to the Apache Software Foundation (ASF) under one 50.6 + or more contributor license agreements. See the NOTICE file 50.7 + distributed with this work for additional information 50.8 + regarding copyright ownership. The ASF licenses this file 50.9 + to you under the Apache License, Version 2.0 (the 50.10 + "License"); you may not use this file except in compliance 50.11 + with the License. You may obtain a copy of the License at 50.12 + 50.13 + http://www.apache.org/licenses/LICENSE-2.0 50.14 + 50.15 + Unless required by applicable law or agreed to in writing, 50.16 + software distributed under the License is distributed on an 50.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 50.18 + KIND, either express or implied. See the License for the 50.19 + specific language governing permissions and limitations 50.20 + under the License. 50.21 +--> 50.22 + 50.23 +# org.apache.cordova.dialogs 50.24 + 50.25 +Este plugin proporciona acceso a algunos elementos de la interfaz nativa de diálogo. 50.26 + 50.27 +## Instalación 50.28 + 50.29 + cordova plugin add org.apache.cordova.dialogs 50.30 + 50.31 + 50.32 +## Métodos 50.33 + 50.34 +* `navigator.notification.alert` 50.35 +* `navigator.notification.confirm` 50.36 +* `navigator.notification.prompt` 50.37 +* `navigator.notification.beep` 50.38 + 50.39 +## navigator.notification.alert 50.40 + 50.41 +Muestra un cuadro de alerta o diálogo personalizado. La mayoría de las implementaciones de Cordova utilizan un cuadro de diálogo nativa para esta característica, pero algunas plataformas utilizan el navegador `alert` la función, que es típicamente menos personalizable. 50.42 + 50.43 + navigator.notification.alert(message, alertCallback, [title], [buttonName]) 50.44 + 50.45 + 50.46 +* **message**: mensaje de diálogo. *(String)* 50.47 + 50.48 +* **alertCallback**: Callback para invocar al diálogo de alerta es desestimada. *(Función)* 50.49 + 50.50 +* **title**: título de diálogo. *(String)* (Opcional, el valor predeterminado de `Alert`) 50.51 + 50.52 +* **buttonName**: nombre del botón. *(String)* (Opcional, por defecto `Aceptar`) 50.53 + 50.54 +### Ejemplo 50.55 + 50.56 + function alertDismissed() { 50.57 + // do something 50.58 + } 50.59 + 50.60 + navigator.notification.alert( 50.61 + 'You are the winner!', // message 50.62 + alertDismissed, // callback 50.63 + 'Game Over', // title 50.64 + 'Done' // buttonName 50.65 + ); 50.66 + 50.67 + 50.68 +### Plataformas soportadas 50.69 + 50.70 +* Amazon fire OS 50.71 +* Android 50.72 +* BlackBerry 10 50.73 +* Firefox OS 50.74 +* iOS 50.75 +* Tizen 50.76 +* Windows Phone 7 y 8 50.77 +* Windows 8 50.78 + 50.79 +### Windows Phone 7 y 8 rarezas 50.80 + 50.81 +* No hay ninguna alerta del navegador integrado, pero puede enlazar uno proceda a llamar `alert()` en el ámbito global: 50.82 + 50.83 + window.alert = navigator.notification.alert; 50.84 + 50.85 + 50.86 +* `alert` y `confirm` son non-blocking llamadas, cuyos resultados sólo están disponibles de forma asincrónica. 50.87 + 50.88 +### Firefox OS rarezas: 50.89 + 50.90 +Dos nativos de bloqueo `window.alert()` y no-bloqueo `navigator.notification.alert()` están disponibles. 50.91 + 50.92 +## navigator.notification.confirm 50.93 + 50.94 +Muestra un cuadro de diálogo de confirmación personalizables. 50.95 + 50.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 50.97 + 50.98 + 50.99 +* **message**: mensaje de diálogo. *(String)* 50.100 + 50.101 +* **confirmCallback**: Callback para invocar con índice de botón pulsado (1, 2 o 3) o cuando el diálogo es despedido sin la presión del botón (0). *(Función)* 50.102 + 50.103 +* **title**: título de diálogo. *(String)* (Opcional, por defecto a `confirmar`) 50.104 + 50.105 +* **buttonLabels**: matriz de cadenas especificando las etiquetas de botón. *(Matriz)* (Opcional, por defecto [`OK, cancelar`]) 50.106 + 50.107 +### confirmCallback 50.108 + 50.109 +El `confirmCallback` se ejecuta cuando el usuario presiona uno de los botones en el cuadro de diálogo de confirmación. 50.110 + 50.111 +La devolución de llamada toma el argumento `buttonIndex` *(número)*, que es el índice del botón presionado. Tenga en cuenta que el índice utiliza uno basado en la indexación, así que el valor es `1`, `2`, `3`, etc.. 50.112 + 50.113 +### Ejemplo 50.114 + 50.115 + function onConfirm(buttonIndex) { 50.116 + alert('You selected button ' + buttonIndex); 50.117 + } 50.118 + 50.119 + navigator.notification.confirm( 50.120 + 'You are the winner!', // message 50.121 + onConfirm, // callback to invoke with index of button pressed 50.122 + 'Game Over', // title 50.123 + ['Restart','Exit'] // buttonLabels 50.124 + ); 50.125 + 50.126 + 50.127 +### Plataformas soportadas 50.128 + 50.129 +* Amazon fire OS 50.130 +* Android 50.131 +* BlackBerry 10 50.132 +* Firefox OS 50.133 +* iOS 50.134 +* Tizen 50.135 +* Windows Phone 7 y 8 50.136 +* Windows 8 50.137 + 50.138 +### Windows Phone 7 y 8 rarezas 50.139 + 50.140 +* No hay ninguna función de navegador incorporado para `window.confirm`, pero lo puede enlazar mediante la asignación: 50.141 + 50.142 + window.confirm = navigator.notification.confirm; 50.143 + 50.144 + 50.145 +* Llamadas de `alert` y `confirm` son non-blocking, así que el resultado sólo está disponible de forma asincrónica. 50.146 + 50.147 +### Firefox OS rarezas: 50.148 + 50.149 +Dos nativos de bloqueo `window.confirm()` y no-bloqueo `navigator.notification.confirm()` están disponibles. 50.150 + 50.151 +## navigator.notification.prompt 50.152 + 50.153 +Muestra un cuadro de diálogo nativa que es más personalizable que del navegador `prompt` función. 50.154 + 50.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 50.156 + 50.157 + 50.158 +* **message**: mensaje de diálogo. *(String)* 50.159 + 50.160 +* **promptCallback**: Callback para invocar con índice del botón pulsado (1, 2 ó 3) o cuando el cuadro de diálogo es despedido sin la presión del botón (0). *(Función)* 50.161 + 50.162 +* **title**: título *(String)* (opcional, por defecto `puntual` de diálogo) 50.163 + 50.164 +* **buttonLabels**: matriz de cadenas especificando el botón etiquetas *(Array)* (opcional, por defecto `["OK", "Cancelar"]`) 50.165 + 50.166 +* **defaultText**: valor de la entrada predeterminada textbox ( `String` ) (opcional, por defecto: cadena vacía) 50.167 + 50.168 +### promptCallback 50.169 + 50.170 +El `promptCallback` se ejecuta cuando el usuario presiona uno de los botones en el cuadro de diálogo pronto. El objeto de `resultados` pasado a la devolución de llamada contiene las siguientes propiedades: 50.171 + 50.172 +* **buttonIndex**: el índice del botón presionado. *(Número)* Tenga en cuenta que el índice utiliza uno basado en la indexación, así que el valor es `1`, `2`, `3`, etc.. 50.173 + 50.174 +* **input1**: el texto introducido en el cuadro de diálogo pronto. *(String)* 50.175 + 50.176 +### Ejemplo 50.177 + 50.178 + function onPrompt(results) { 50.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 50.180 + } 50.181 + 50.182 + navigator.notification.prompt( 50.183 + 'Please enter your name', // message 50.184 + onPrompt, // callback to invoke 50.185 + 'Registration', // title 50.186 + ['Ok','Exit'], // buttonLabels 50.187 + 'Jane Doe' // defaultText 50.188 + ); 50.189 + 50.190 + 50.191 +### Plataformas soportadas 50.192 + 50.193 +* Amazon fire OS 50.194 +* Android 50.195 +* Firefox OS 50.196 +* iOS 50.197 +* Windows Phone 7 y 8 50.198 + 50.199 +### Rarezas Android 50.200 + 50.201 +* Android soporta un máximo de tres botones e ignora nada más. 50.202 + 50.203 +* En Android 3.0 y posteriores, los botones se muestran en orden inverso para dispositivos que utilizan el tema de Holo. 50.204 + 50.205 +### Firefox OS rarezas: 50.206 + 50.207 +Dos nativos de bloqueo `window.prompt()` y no-bloqueo `navigator.notification.prompt()` están disponibles. 50.208 + 50.209 +## navigator.notification.beep 50.210 + 50.211 +El dispositivo reproduce un sonido sonido. 50.212 + 50.213 + navigator.notification.beep(times); 50.214 + 50.215 + 50.216 +* **times**: el número de veces a repetir la señal. *(Número)* 50.217 + 50.218 +### Ejemplo 50.219 + 50.220 + / / Pitido dos veces! 50.221 + navigator.notification.beep(2); 50.222 + 50.223 + 50.224 +### Plataformas soportadas 50.225 + 50.226 +* Amazon fire OS 50.227 +* Android 50.228 +* BlackBerry 10 50.229 +* iOS 50.230 +* Tizen 50.231 +* Windows Phone 7 y 8 50.232 +* Windows 8 50.233 + 50.234 +### Amazon fuego OS rarezas 50.235 + 50.236 +* Amazon fuego OS reproduce el **Sonido de notificación** especificados en el panel de **configuración/pantalla y sonido** por defecto. 50.237 + 50.238 +### Rarezas Android 50.239 + 50.240 +* Android juega el **tono de notificación** especificados en el panel **ajustes de sonido y pantalla** por defecto. 50.241 + 50.242 +### Windows Phone 7 y 8 rarezas 50.243 + 50.244 +* Se basa en un archivo de sonido genérico de la distribución de Cordova. 50.245 + 50.246 +### Rarezas Tizen 50.247 + 50.248 +* Tizen implementa pitidos por reproducir un archivo de audio a través de los medios de comunicación API. 50.249 + 50.250 +* El archivo de sonido debe ser corto, debe estar ubicado en un `sounds` subdirectorio del directorio raíz de la aplicación y deben ser nombrados`beep.wav`. 50.251 \ No newline at end of file
51.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 51.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/fr/index.md Thu Jun 04 14:50:33 2015 +0200 51.3 @@ -0,0 +1,247 @@ 51.4 +<!--- 51.5 + Licensed to the Apache Software Foundation (ASF) under one 51.6 + or more contributor license agreements. See the NOTICE file 51.7 + distributed with this work for additional information 51.8 + regarding copyright ownership. The ASF licenses this file 51.9 + to you under the Apache License, Version 2.0 (the 51.10 + "License"); you may not use this file except in compliance 51.11 + with the License. You may obtain a copy of the License at 51.12 + 51.13 + http://www.apache.org/licenses/LICENSE-2.0 51.14 + 51.15 + Unless required by applicable law or agreed to in writing, 51.16 + software distributed under the License is distributed on an 51.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 51.18 + KIND, either express or implied. See the License for the 51.19 + specific language governing permissions and limitations 51.20 + under the License. 51.21 +--> 51.22 + 51.23 +# org.apache.cordova.dialogs 51.24 + 51.25 +Ce plugin permet d'accéder à certains éléments d'interface utilisateur native de dialogue. 51.26 + 51.27 +## Installation 51.28 + 51.29 + cordova plugin add org.apache.cordova.dialogs 51.30 + 51.31 + 51.32 +## Méthodes 51.33 + 51.34 +* `navigator.notification.alert` 51.35 +* `navigator.notification.confirm` 51.36 +* `navigator.notification.prompt` 51.37 +* `navigator.notification.beep` 51.38 + 51.39 +## navigator.notification.alert 51.40 + 51.41 +Affiche une boîte de dialogue ou d'alerte personnalisé. La plupart des implémentations de Cordova utilisent une boîte de dialogue natives pour cette fonctionnalité, mais certaines plates-formes du navigateur `alert` fonction, qui est généralement moins personnalisable. 51.42 + 51.43 + Navigator.notification.Alert (message, alertCallback, [titre], [buttonName]) 51.44 + 51.45 + 51.46 +* **message**: message de la boîte de dialogue. *(String)* 51.47 + 51.48 +* **alertCallback**: callback à appeler lorsque la boîte de dialogue d'alerte est rejetée. *(Fonction)* 51.49 + 51.50 +* **titre**: titre de la boîte de dialogue. *(String)* (Facultatif, par défaut`Alert`) 51.51 + 51.52 +* **buttonName**: nom du bouton. *(String)* (Facultatif, par défaut`OK`) 51.53 + 51.54 +### Exemple 51.55 + 51.56 + function alertDismissed() { 51.57 + // do something 51.58 + } 51.59 + 51.60 + navigator.notification.alert( 51.61 + 'You are the winner!', // message 51.62 + alertDismissed, // callback 51.63 + 'Game Over', // title 51.64 + 'Done' // buttonName 51.65 + ); 51.66 + 51.67 + 51.68 +### Plates-formes prises en charge 51.69 + 51.70 +* Amazon Fire OS 51.71 +* Android 51.72 +* BlackBerry 10 51.73 +* Firefox OS 51.74 +* iOS 51.75 +* Tizen 51.76 +* Windows Phone 7 et 8 51.77 +* Windows 8 51.78 + 51.79 +### Windows Phone 7 et 8 Quirks 51.80 + 51.81 +* Il n'y a aucune boîte de dialogue d'alerte intégrée au navigateur, mais vous pouvez en lier une pour appeler `alert()` dans le scope global: 51.82 + 51.83 + window.alert = navigator.notification.alert; 51.84 + 51.85 + 51.86 +* Les deux appels `alert` et `confirm` sont non-blocants, leurs résultats ne sont disponibles que de façon asynchrone. 51.87 + 51.88 +### Firefox OS Quirks : 51.89 + 51.90 +Les deux indigènes bloquant `window.alert()` et non-bloquante `navigator.notification.alert()` sont disponibles. 51.91 + 51.92 +## navigator.notification.confirm 51.93 + 51.94 +Affiche une boîte de dialogue de confirmation personnalisable. 51.95 + 51.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 51.97 + 51.98 + 51.99 +* **message**: message de la boîte de dialogue. *(String)* 51.100 + 51.101 +* **confirmCallback**: callback à appeler avec l'index du bouton pressé (1, 2 ou 3) ou lorsque la boîte de dialogue est fermée sans qu'un bouton ne soit pressé (0). *(Fonction)* 51.102 + 51.103 +* **titre**: titre de dialogue. *(String)* (Facultatif, par défaut`Confirm`) 51.104 + 51.105 +* **buttonLabels**: tableau de chaînes spécifiant les étiquettes des boutons. *(Array)* (Optionnel, par défaut, [ `OK,Cancel` ]) 51.106 + 51.107 +### confirmCallback 51.108 + 51.109 +Le `confirmCallback` s'exécute lorsque l'utilisateur appuie sur un bouton dans la boîte de dialogue de confirmation. 51.110 + 51.111 +Le rappel prend l'argument `buttonIndex` *(nombre)*, qui est l'index du bouton activé. Notez que l'index utilise base d'indexation, la valeur est `1` , `2` , `3` , etc.. 51.112 + 51.113 +### Exemple 51.114 + 51.115 + function onConfirm(buttonIndex) { 51.116 + alert('You selected button ' + buttonIndex); 51.117 + } 51.118 + 51.119 + navigator.notification.confirm( 51.120 + 'You are the winner!', // message 51.121 + onConfirm, // callback to invoke with index of button pressed 51.122 + 'Game Over', // title 51.123 + ['Restart','Exit'] // buttonLabels 51.124 + ); 51.125 + 51.126 + 51.127 +### Plates-formes prises en charge 51.128 + 51.129 +* Amazon Fire OS 51.130 +* Android 51.131 +* BlackBerry 10 51.132 +* Firefox OS 51.133 +* iOS 51.134 +* Paciarelli 51.135 +* Windows Phone 7 et 8 51.136 +* Windows 8 51.137 + 51.138 +### Windows Phone 7 et 8 Quirks 51.139 + 51.140 +* Il n'y a aucune fonction intégrée au navigateur pour `window.confirm`, mais vous pouvez en lier une en affectant: 51.141 + 51.142 + window.confirm = navigator.notification.confirm ; 51.143 + 51.144 + 51.145 +* Les appels à `alert` et `confirm` sont non-bloquants, donc le résultat est seulement disponible de façon asynchrone. 51.146 + 51.147 +### Firefox OS Quirks : 51.148 + 51.149 +Les deux indigènes bloquant `window.confirm()` et non-bloquante `navigator.notification.confirm()` sont disponibles. 51.150 + 51.151 +## navigator.notification.prompt 51.152 + 51.153 +Affiche une boîte de dialogue natif qui est plus personnalisable que le navigateur `prompt` fonction. 51.154 + 51.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 51.156 + 51.157 + 51.158 +* **message**: message de la boîte de dialogue. *(String)* 51.159 + 51.160 +* **promptCallback**: rappel d'invoquer avec l'index du bouton pressé (1, 2 ou 3) ou lorsque la boîte de dialogue est fermée sans une presse de bouton (0). *(Fonction)* 51.161 + 51.162 +* **titre**: titre de la boîte de dialogue. *(String)* (Facultatif, par défaut`Alert`) 51.163 + 51.164 +* **buttonLabels**: tableau de chaînes spécifiant les étiquettes de boutons *(Array)* (facultatif, par défaut, les étiquettes `["OK","Cancel"]`) 51.165 + 51.166 +* **defaultText**: texte par défaut de la zone de texte ( `String` ) (en option, par défaut : chaîne vide) 51.167 + 51.168 +### promptCallback 51.169 + 51.170 +Le `promptCallback` s'exécute lorsque l'utilisateur appuie sur un bouton dans la boîte de dialogue d'invite. Le `results` objet passé au rappel contient les propriétés suivantes : 51.171 + 51.172 +* **buttonIndex**: l'index du bouton activé. *(Nombre)* Notez que l'index utilise une indexation de base 1, donc la valeur est `1` , `2` , `3` , etc. 51.173 + 51.174 +* **entrée 1**: le texte entré dans la boîte de dialogue d'invite. *(String)* 51.175 + 51.176 +### Exemple 51.177 + 51.178 + function onPrompt(results) { 51.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 51.180 + } 51.181 + 51.182 + navigator.notification.prompt( 51.183 + 'Please enter your name', // message 51.184 + onPrompt, // callback to invoke 51.185 + 'Registration', // title 51.186 + ['Ok','Exit'], // buttonLabels 51.187 + 'Jane Doe' // defaultText 51.188 + ); 51.189 + 51.190 + 51.191 +### Plates-formes prises en charge 51.192 + 51.193 +* Amazon Fire OS 51.194 +* Android 51.195 +* Firefox OS 51.196 +* iOS 51.197 +* Windows Phone 7 et 8 51.198 + 51.199 +### Quirks Android 51.200 + 51.201 +* Android prend en charge un maximum de trois boutons et ignore plus que cela. 51.202 + 51.203 +* Sur Android 3.0 et versions ultérieures, les boutons sont affichés dans l'ordre inverse pour les appareils qui utilisent le thème Holo. 51.204 + 51.205 +### Firefox OS Quirks : 51.206 + 51.207 +Les deux indigènes bloquant `window.prompt()` et non-bloquante `navigator.notification.prompt()` sont disponibles. 51.208 + 51.209 +## navigator.notification.beep 51.210 + 51.211 +Le dispositif joue un bip sonore. 51.212 + 51.213 + navigator.notification.beep(times); 51.214 + 51.215 + 51.216 +* **temps**: le nombre de fois répéter le bip. *(Nombre)* 51.217 + 51.218 +### Exemple 51.219 + 51.220 + // Beep twice! 51.221 + navigator.notification.beep(2); 51.222 + 51.223 + 51.224 +### Plates-formes prises en charge 51.225 + 51.226 +* Amazon Fire OS 51.227 +* Android 51.228 +* BlackBerry 10 51.229 +* iOS 51.230 +* Paciarelli 51.231 +* Windows Phone 7 et 8 51.232 +* Windows 8 51.233 + 51.234 +### Amazon Fire OS Quirks 51.235 + 51.236 +* Amazon Fire OS joue la valeur par défaut le **Son de Notification** spécifié sous le panneau **d'affichage des réglages/& Sound** . 51.237 + 51.238 +### Quirks Android 51.239 + 51.240 +* Android joue la **sonnerie de Notification** spécifié sous le panneau des **réglages/son et affichage** de valeur par défaut. 51.241 + 51.242 +### Windows Phone 7 et 8 Quirks 51.243 + 51.244 +* S'appuie sur un fichier générique bip de la distribution de Cordova. 51.245 + 51.246 +### Bizarreries de paciarelli 51.247 + 51.248 +* Paciarelli implémente les bips en lisant un fichier audio via les médias API. 51.249 + 51.250 +* Le fichier sonore doit être court, doit se trouver dans un `sounds` sous-répertoire du répertoire racine de l'application et doit être nommé`beep.wav`. 51.251 \ No newline at end of file
52.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 52.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/index.md Thu Jun 04 14:50:33 2015 +0200 52.3 @@ -0,0 +1,267 @@ 52.4 +<!--- 52.5 + Licensed to the Apache Software Foundation (ASF) under one 52.6 + or more contributor license agreements. See the NOTICE file 52.7 + distributed with this work for additional information 52.8 + regarding copyright ownership. The ASF licenses this file 52.9 + to you under the Apache License, Version 2.0 (the 52.10 + "License"); you may not use this file except in compliance 52.11 + with the License. You may obtain a copy of the License at 52.12 + 52.13 + http://www.apache.org/licenses/LICENSE-2.0 52.14 + 52.15 + Unless required by applicable law or agreed to in writing, 52.16 + software distributed under the License is distributed on an 52.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 52.18 + KIND, either express or implied. See the License for the 52.19 + specific language governing permissions and limitations 52.20 + under the License. 52.21 +--> 52.22 + 52.23 +# org.apache.cordova.dialogs 52.24 + 52.25 +This plugin provides access to some native dialog UI elements 52.26 +via a global `navigator.notification` object. 52.27 + 52.28 +Although the object is attached to the global scoped `navigator`, it is not available until after the `deviceready` event. 52.29 + 52.30 + document.addEventListener("deviceready", onDeviceReady, false); 52.31 + function onDeviceReady() { 52.32 + console.log(navigator.notification); 52.33 + } 52.34 + 52.35 +## Installation 52.36 + 52.37 + cordova plugin add org.apache.cordova.dialogs 52.38 + 52.39 +## Methods 52.40 + 52.41 +- `navigator.notification.alert` 52.42 +- `navigator.notification.confirm` 52.43 +- `navigator.notification.prompt` 52.44 +- `navigator.notification.beep` 52.45 + 52.46 +## navigator.notification.alert 52.47 + 52.48 +Shows a custom alert or dialog box. Most Cordova implementations use a native 52.49 +dialog box for this feature, but some platforms use the browser's `alert` 52.50 +function, which is typically less customizable. 52.51 + 52.52 + navigator.notification.alert(message, alertCallback, [title], [buttonName]) 52.53 + 52.54 +- __message__: Dialog message. _(String)_ 52.55 + 52.56 +- __alertCallback__: Callback to invoke when alert dialog is dismissed. _(Function)_ 52.57 + 52.58 +- __title__: Dialog title. _(String)_ (Optional, defaults to `Alert`) 52.59 + 52.60 +- __buttonName__: Button name. _(String)_ (Optional, defaults to `OK`) 52.61 + 52.62 + 52.63 +### Example 52.64 + 52.65 + function alertDismissed() { 52.66 + // do something 52.67 + } 52.68 + 52.69 + navigator.notification.alert( 52.70 + 'You are the winner!', // message 52.71 + alertDismissed, // callback 52.72 + 'Game Over', // title 52.73 + 'Done' // buttonName 52.74 + ); 52.75 + 52.76 +### Supported Platforms 52.77 + 52.78 +- Amazon Fire OS 52.79 +- Android 52.80 +- BlackBerry 10 52.81 +- Firefox OS 52.82 +- iOS 52.83 +- Tizen 52.84 +- Windows Phone 7 and 8 52.85 +- Windows 8 52.86 +- Windows 52.87 + 52.88 +### Windows Phone 7 and 8 Quirks 52.89 + 52.90 +- There is no built-in browser alert, but you can bind one as follows to call `alert()` in the global scope: 52.91 + 52.92 + window.alert = navigator.notification.alert; 52.93 + 52.94 +- Both `alert` and `confirm` are non-blocking calls, results of which are only available asynchronously. 52.95 + 52.96 +### Firefox OS Quirks: 52.97 + 52.98 +Both native-blocking `window.alert()` and non-blocking `navigator.notification.alert()` are available. 52.99 + 52.100 +### BlackBerry 10 Quirks 52.101 +`navigator.notification.alert('text', callback, 'title', 'text')` callback parameter is passed the number 1. 52.102 + 52.103 +## navigator.notification.confirm 52.104 + 52.105 +Displays a customizable confirmation dialog box. 52.106 + 52.107 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 52.108 + 52.109 +- __message__: Dialog message. _(String)_ 52.110 + 52.111 +- __confirmCallback__: Callback to invoke with index of button pressed (1, 2, or 3) or when the dialog is dismissed without a button press (0). _(Function)_ 52.112 + 52.113 +- __title__: Dialog title. _(String)_ (Optional, defaults to `Confirm`) 52.114 + 52.115 +- __buttonLabels__: Array of strings specifying button labels. _(Array)_ (Optional, defaults to [`OK,Cancel`]) 52.116 + 52.117 + 52.118 +### confirmCallback 52.119 + 52.120 +The `confirmCallback` executes when the user presses one of the 52.121 +buttons in the confirmation dialog box. 52.122 + 52.123 +The callback takes the argument `buttonIndex` _(Number)_, which is the 52.124 +index of the pressed button. Note that the index uses one-based 52.125 +indexing, so the value is `1`, `2`, `3`, etc. 52.126 + 52.127 +### Example 52.128 + 52.129 + function onConfirm(buttonIndex) { 52.130 + alert('You selected button ' + buttonIndex); 52.131 + } 52.132 + 52.133 + navigator.notification.confirm( 52.134 + 'You are the winner!', // message 52.135 + onConfirm, // callback to invoke with index of button pressed 52.136 + 'Game Over', // title 52.137 + ['Restart','Exit'] // buttonLabels 52.138 + ); 52.139 + 52.140 +### Supported Platforms 52.141 + 52.142 +- Amazon Fire OS 52.143 +- Android 52.144 +- BlackBerry 10 52.145 +- Firefox OS 52.146 +- iOS 52.147 +- Tizen 52.148 +- Windows Phone 7 and 8 52.149 +- Windows 8 52.150 +- Windows 52.151 + 52.152 +### Windows Phone 7 and 8 Quirks 52.153 + 52.154 +- There is no built-in browser function for `window.confirm`, but you can bind it by assigning: 52.155 + 52.156 + window.confirm = navigator.notification.confirm; 52.157 + 52.158 +- Calls to `alert` and `confirm` are non-blocking, so the result is only available asynchronously. 52.159 + 52.160 +### Windows Quirks 52.161 + 52.162 +- On Windows8/8.1 it is not possible to add more than three buttons to MessageDialog instance. 52.163 + 52.164 +- On Windows Phone 8.1 it's not possible to show dialog with more than two buttons. 52.165 + 52.166 +### Firefox OS Quirks: 52.167 + 52.168 +Both native-blocking `window.confirm()` and non-blocking `navigator.notification.confirm()` are available. 52.169 + 52.170 +## navigator.notification.prompt 52.171 + 52.172 +Displays a native dialog box that is more customizable than the browser's `prompt` function. 52.173 + 52.174 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 52.175 + 52.176 +- __message__: Dialog message. _(String)_ 52.177 + 52.178 +- __promptCallback__: Callback to invoke with index of button pressed (1, 2, or 3) or when the dialog is dismissed without a button press (0). _(Function)_ 52.179 + 52.180 +- __title__: Dialog title _(String)_ (Optional, defaults to `Prompt`) 52.181 + 52.182 +- __buttonLabels__: Array of strings specifying button labels _(Array)_ (Optional, defaults to `["OK","Cancel"]`) 52.183 + 52.184 +- __defaultText__: Default textbox input value (`String`) (Optional, Default: empty string) 52.185 + 52.186 +### promptCallback 52.187 + 52.188 +The `promptCallback` executes when the user presses one of the buttons 52.189 +in the prompt dialog box. The `results` object passed to the callback 52.190 +contains the following properties: 52.191 + 52.192 +- __buttonIndex__: The index of the pressed button. _(Number)_ Note that the index uses one-based indexing, so the value is `1`, `2`, `3`, etc. 52.193 + 52.194 + 52.195 + 52.196 +- __input1__: The text entered in the prompt dialog box. _(String)_ 52.197 + 52.198 +### Example 52.199 + 52.200 + function onPrompt(results) { 52.201 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 52.202 + } 52.203 + 52.204 + navigator.notification.prompt( 52.205 + 'Please enter your name', // message 52.206 + onPrompt, // callback to invoke 52.207 + 'Registration', // title 52.208 + ['Ok','Exit'], // buttonLabels 52.209 + 'Jane Doe' // defaultText 52.210 + ); 52.211 + 52.212 +### Supported Platforms 52.213 + 52.214 +- Amazon Fire OS 52.215 +- Android 52.216 +- Firefox OS 52.217 +- iOS 52.218 +- Windows Phone 7 and 8 52.219 + 52.220 +### Android Quirks 52.221 + 52.222 +- Android supports a maximum of three buttons, and ignores any more than that. 52.223 + 52.224 +- On Android 3.0 and later, buttons are displayed in reverse order for devices that use the Holo theme. 52.225 + 52.226 +### Firefox OS Quirks: 52.227 + 52.228 +Both native-blocking `window.prompt()` and non-blocking `navigator.notification.prompt()` are available. 52.229 + 52.230 +## navigator.notification.beep 52.231 + 52.232 +The device plays a beep sound. 52.233 + 52.234 + navigator.notification.beep(times); 52.235 + 52.236 +- __times__: The number of times to repeat the beep. _(Number)_ 52.237 + 52.238 +### Example 52.239 + 52.240 + // Beep twice! 52.241 + navigator.notification.beep(2); 52.242 + 52.243 +### Supported Platforms 52.244 + 52.245 +- Amazon Fire OS 52.246 +- Android 52.247 +- BlackBerry 10 52.248 +- iOS 52.249 +- Tizen 52.250 +- Windows Phone 7 and 8 52.251 +- Windows 8 52.252 + 52.253 +### Amazon Fire OS Quirks 52.254 + 52.255 +- Amazon Fire OS plays the default __Notification Sound__ specified under the __Settings/Display & Sound__ panel. 52.256 + 52.257 +### Android Quirks 52.258 + 52.259 +- Android plays the default __Notification ringtone__ specified under the __Settings/Sound & Display__ panel. 52.260 + 52.261 +### Windows Phone 7 and 8 Quirks 52.262 + 52.263 +- Relies on a generic beep file from the Cordova distribution. 52.264 + 52.265 +### Tizen Quirks 52.266 + 52.267 +- Tizen implements beeps by playing an audio file via the media API. 52.268 + 52.269 +- The beep file must be short, must be located in a `sounds` subdirectory of the application's root directory, and must be named `beep.wav`. 52.270 +
53.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 53.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/it/index.md Thu Jun 04 14:50:33 2015 +0200 53.3 @@ -0,0 +1,247 @@ 53.4 +<!--- 53.5 + Licensed to the Apache Software Foundation (ASF) under one 53.6 + or more contributor license agreements. See the NOTICE file 53.7 + distributed with this work for additional information 53.8 + regarding copyright ownership. The ASF licenses this file 53.9 + to you under the Apache License, Version 2.0 (the 53.10 + "License"); you may not use this file except in compliance 53.11 + with the License. You may obtain a copy of the License at 53.12 + 53.13 + http://www.apache.org/licenses/LICENSE-2.0 53.14 + 53.15 + Unless required by applicable law or agreed to in writing, 53.16 + software distributed under the License is distributed on an 53.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 53.18 + KIND, either express or implied. See the License for the 53.19 + specific language governing permissions and limitations 53.20 + under the License. 53.21 +--> 53.22 + 53.23 +# org.apache.cordova.dialogs 53.24 + 53.25 +Questo plugin consente di accedere ad alcuni elementi di interfaccia utente nativa del dialogo. 53.26 + 53.27 +## Installazione 53.28 + 53.29 + cordova plugin add org.apache.cordova.dialogs 53.30 + 53.31 + 53.32 +## Metodi 53.33 + 53.34 +* `navigator.notification.alert` 53.35 +* `navigator.notification.confirm` 53.36 +* `navigator.notification.prompt` 53.37 +* `navigator.notification.beep` 53.38 + 53.39 +## navigator.notification.alert 53.40 + 53.41 +Mostra una finestra di avviso o la finestra di dialogo personalizzata. La maggior parte delle implementazioni di Cordova una dialogo nativa per questa caratteristica, ma alcune piattaforme utilizzano il browser `alert` funzione, che è in genere meno personalizzabile. 53.42 + 53.43 + navigator.notification.alert(message, alertCallback, [title], [buttonName]) 53.44 + 53.45 + 53.46 +* **messaggio**: messaggio finestra di dialogo. *(String)* 53.47 + 53.48 +* **alertCallback**: Callback da richiamare quando viene chiusa la finestra di avviso. *(Funzione)* 53.49 + 53.50 +* **titolo**: titolo di dialogo. *(String)* (Opzionale, default è`Alert`) 53.51 + 53.52 +* **buttonName**: nome del pulsante. *(String)* (Opzionale, default è`OK`) 53.53 + 53.54 +### Esempio 53.55 + 53.56 + function alertDismissed() { 53.57 + // do something 53.58 + } 53.59 + 53.60 + navigator.notification.alert( 53.61 + 'You are the winner!', // message 53.62 + alertDismissed, // callback 53.63 + 'Game Over', // title 53.64 + 'Done' // buttonName 53.65 + ); 53.66 + 53.67 + 53.68 +### Piattaforme supportate 53.69 + 53.70 +* Amazon fuoco OS 53.71 +* Android 53.72 +* BlackBerry 10 53.73 +* Firefox OS 53.74 +* iOS 53.75 +* Tizen 53.76 +* Windows Phone 7 e 8 53.77 +* Windows 8 53.78 + 53.79 +### Windows Phone 7 e 8 stranezze 53.80 + 53.81 +* Non non c'è nessun avviso del browser integrato, ma è possibile associare uno come segue per chiamare `alert()` in ambito globale: 53.82 + 53.83 + window.alert = navigator.notification.alert; 53.84 + 53.85 + 53.86 +* Entrambi `alert` e `confirm` sono non di blocco chiamate, risultati di cui sono disponibili solo in modo asincrono. 53.87 + 53.88 +### Firefox OS Stranezze: 53.89 + 53.90 +Entrambi nativi di blocco `window.alert()` e non bloccante `navigator.notification.alert()` sono disponibili. 53.91 + 53.92 +## navigator.notification.confirm 53.93 + 53.94 +Visualizza una finestra di dialogo conferma personalizzabile. 53.95 + 53.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 53.97 + 53.98 + 53.99 +* **messaggio**: messaggio finestra di dialogo. *(String)* 53.100 + 53.101 +* **confirmCallback**: Callback da richiamare con l'indice del pulsante premuto (1, 2 o 3) o quando la finestra di dialogo viene chiusa senza una pressione del pulsante (0). *(Funzione)* 53.102 + 53.103 +* **titolo**: titolo di dialogo. *(String)* (Opzionale, default è`Confirm`) 53.104 + 53.105 +* **buttonLabels**: matrice di stringhe che specificano le etichette dei pulsanti. *(Matrice)* (Opzionale, default è [ `OK,Cancel` ]) 53.106 + 53.107 +### confirmCallback 53.108 + 53.109 +Il `confirmCallback` viene eseguito quando l'utente preme uno dei pulsanti nella finestra di dialogo conferma. 53.110 + 53.111 +Il callback accetta l'argomento `buttonIndex` *(numero)*, che è l'indice del pulsante premuto. Nota che l'indice utilizza l'indicizzazione base uno, quindi il valore è `1` , `2` , `3` , ecc. 53.112 + 53.113 +### Esempio 53.114 + 53.115 + function onConfirm(buttonIndex) { 53.116 + alert('You selected button ' + buttonIndex); 53.117 + } 53.118 + 53.119 + navigator.notification.confirm( 53.120 + 'You are the winner!', // message 53.121 + onConfirm, // callback to invoke with index of button pressed 53.122 + 'Game Over', // title 53.123 + ['Restart','Exit'] // buttonLabels 53.124 + ); 53.125 + 53.126 + 53.127 +### Piattaforme supportate 53.128 + 53.129 +* Amazon fuoco OS 53.130 +* Android 53.131 +* BlackBerry 10 53.132 +* Firefox OS 53.133 +* iOS 53.134 +* Tizen 53.135 +* Windows Phone 7 e 8 53.136 +* Windows 8 53.137 + 53.138 +### Windows Phone 7 e 8 stranezze 53.139 + 53.140 +* Non non c'è nessuna funzione browser incorporato per `window.confirm` , ma è possibile associare assegnando: 53.141 + 53.142 + window.confirm = navigator.notification.confirm; 53.143 + 53.144 + 53.145 +* Chiama al `alert` e `confirm` sono non bloccante, quindi il risultato è disponibile solo in modo asincrono. 53.146 + 53.147 +### Firefox OS Stranezze: 53.148 + 53.149 +Entrambi nativi di blocco `window.confirm()` e non bloccante `navigator.notification.confirm()` sono disponibili. 53.150 + 53.151 +## navigator.notification.prompt 53.152 + 53.153 +Visualizza una finestra di dialogo nativa che è più personalizzabile del browser `prompt` funzione. 53.154 + 53.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 53.156 + 53.157 + 53.158 +* **messaggio**: messaggio finestra di dialogo. *(String)* 53.159 + 53.160 +* **promptCallback**: Callback da richiamare con l'indice del pulsante premuto (1, 2 o 3) o quando la finestra di dialogo viene chiusa senza una pressione del pulsante (0). *(Funzione)* 53.161 + 53.162 +* **titolo**: dialogo titolo *(String)* (opzionale, default è`Prompt`) 53.163 + 53.164 +* **buttonLabels**: matrice di stringhe specificando il pulsante etichette *(Array)* (opzionale, default è`["OK","Cancel"]`) 53.165 + 53.166 +* **defaultText**: valore di input predefinito textbox ( `String` ) (opzionale, Default: stringa vuota) 53.167 + 53.168 +### promptCallback 53.169 + 53.170 +Il `promptCallback` viene eseguito quando l'utente preme uno dei pulsanti nella finestra di dialogo richiesta. Il `results` oggetto passato al metodo di callback contiene le seguenti proprietà: 53.171 + 53.172 +* **buttonIndex**: l'indice del pulsante premuto. *(Numero)* Nota che l'indice utilizza l'indicizzazione base uno, quindi il valore è `1` , `2` , `3` , ecc. 53.173 + 53.174 +* **INPUT1**: il testo immesso nella finestra di dialogo richiesta. *(String)* 53.175 + 53.176 +### Esempio 53.177 + 53.178 + function onPrompt(results) { 53.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 53.180 + } 53.181 + 53.182 + navigator.notification.prompt( 53.183 + 'Please enter your name', // message 53.184 + onPrompt, // callback to invoke 53.185 + 'Registration', // title 53.186 + ['Ok','Exit'], // buttonLabels 53.187 + 'Jane Doe' // defaultText 53.188 + ); 53.189 + 53.190 + 53.191 +### Piattaforme supportate 53.192 + 53.193 +* Amazon fuoco OS 53.194 +* Android 53.195 +* Firefox OS 53.196 +* iOS 53.197 +* Windows Phone 7 e 8 53.198 + 53.199 +### Stranezze Android 53.200 + 53.201 +* Android supporta un massimo di tre pulsanti e ignora di più di quello. 53.202 + 53.203 +* Su Android 3.0 e versioni successive, i pulsanti vengono visualizzati in ordine inverso per dispositivi che utilizzano il tema Holo. 53.204 + 53.205 +### Firefox OS Stranezze: 53.206 + 53.207 +Entrambi nativi di blocco `window.prompt()` e non bloccante `navigator.notification.prompt()` sono disponibili. 53.208 + 53.209 +## navigator.notification.beep 53.210 + 53.211 +Il dispositivo riproduce un bip sonoro. 53.212 + 53.213 + navigator.notification.beep(times); 53.214 + 53.215 + 53.216 +* **volte**: il numero di volte per ripetere il segnale acustico. *(Numero)* 53.217 + 53.218 +### Esempio 53.219 + 53.220 + // Beep twice! 53.221 + navigator.notification.beep(2); 53.222 + 53.223 + 53.224 +### Piattaforme supportate 53.225 + 53.226 +* Amazon fuoco OS 53.227 +* Android 53.228 +* BlackBerry 10 53.229 +* iOS 53.230 +* Tizen 53.231 +* Windows Phone 7 e 8 53.232 +* Windows 8 53.233 + 53.234 +### Amazon fuoco OS stranezze 53.235 + 53.236 +* Amazon fuoco OS riproduce il **Suono di notifica** specificato sotto il pannello **Impostazioni/Display e il suono** predefinito. 53.237 + 53.238 +### Stranezze Android 53.239 + 53.240 +* Android giochi default **Notification ringtone** specificato sotto il pannello **impostazioni/audio e Display** . 53.241 + 53.242 +### Windows Phone 7 e 8 stranezze 53.243 + 53.244 +* Si basa su un file generico bip dalla distribuzione di Cordova. 53.245 + 53.246 +### Tizen stranezze 53.247 + 53.248 +* Tizen implementa bip di riproduzione di un file audio tramite i media API. 53.249 + 53.250 +* Il file beep deve essere breve, deve essere situato un `sounds` sottodirectory della directory radice dell'applicazione e deve essere denominato`beep.wav`. 53.251 \ No newline at end of file
54.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 54.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/ja/index.md Thu Jun 04 14:50:33 2015 +0200 54.3 @@ -0,0 +1,247 @@ 54.4 +<!--- 54.5 + Licensed to the Apache Software Foundation (ASF) under one 54.6 + or more contributor license agreements. See the NOTICE file 54.7 + distributed with this work for additional information 54.8 + regarding copyright ownership. The ASF licenses this file 54.9 + to you under the Apache License, Version 2.0 (the 54.10 + "License"); you may not use this file except in compliance 54.11 + with the License. You may obtain a copy of the License at 54.12 + 54.13 + http://www.apache.org/licenses/LICENSE-2.0 54.14 + 54.15 + Unless required by applicable law or agreed to in writing, 54.16 + software distributed under the License is distributed on an 54.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 54.18 + KIND, either express or implied. See the License for the 54.19 + specific language governing permissions and limitations 54.20 + under the License. 54.21 +--> 54.22 + 54.23 +# org.apache.cordova.dialogs 54.24 + 54.25 +このプラグインはいくつかのネイティブのダイアログの UI 要素へのアクセスを提供します。 54.26 + 54.27 +## インストール 54.28 + 54.29 + cordova plugin add org.apache.cordova.dialogs 54.30 + 54.31 + 54.32 +## メソッド 54.33 + 54.34 +* `navigator.notification.alert` 54.35 +* `navigator.notification.confirm` 54.36 +* `navigator.notification.prompt` 54.37 +* `navigator.notification.beep` 54.38 + 54.39 +## navigator.notification.alert 54.40 + 54.41 +カスタムの警告またはダイアログ ボックスが表示されます。 ほとんどコルドバ ネイティブ] ダイアログ ボックスの使用この機能がいくつかのプラットフォームを使用して、ブラウザーの `alert` 関数は、通常より少なくカスタマイズ可能です。 54.42 + 54.43 + navigator.notification.alert(message, alertCallback, [title], [buttonName]) 54.44 + 54.45 + 54.46 +* **メッセージ**: ダイアログ メッセージ。*(文字列)* 54.47 + 54.48 +* **alertCallback**: 警告ダイアログが閉じられたときに呼び出すコールバック。*(機能)* 54.49 + 54.50 +* **タイトル**: ダイアログのタイトル。*(文字列)*(省略可能、既定値は`Alert`) 54.51 + 54.52 +* **buttonName**: ボタンの名前。*(文字列)*(省略可能、既定値は`OK`) 54.53 + 54.54 +### 例 54.55 + 54.56 + function alertDismissed() { 54.57 + // do something 54.58 + } 54.59 + 54.60 + navigator.notification.alert( 54.61 + 'You are the winner!', // message 54.62 + alertDismissed, // callback 54.63 + 'Game Over', // title 54.64 + 'Done' // buttonName 54.65 + ); 54.66 + 54.67 + 54.68 +### サポートされているプラットフォーム 54.69 + 54.70 +* アマゾン火 OS 54.71 +* アンドロイド 54.72 +* ブラックベリー 10 54.73 +* Firefox の OS 54.74 +* iOS 54.75 +* Tizen 54.76 +* Windows Phone 7 と 8 54.77 +* Windows 8 54.78 + 54.79 +### Windows Phone 7 と 8 癖 54.80 + 54.81 +* 組み込みのブラウザー警告がない呼び出しを次のように 1 つをバインドすることができます `alert()` 、グローバル スコープで。 54.82 + 54.83 + window.alert = navigator.notification.alert; 54.84 + 54.85 + 54.86 +* 両方の `alert` と `confirm` は非ブロッキング呼び出し、結果は非同期的にのみ利用できます。 54.87 + 54.88 +### Firefox OS 互換: 54.89 + 54.90 +両方のネイティブ ブロック `window.alert()` ノン ブロッキングと `navigator.notification.alert()` は利用できます。 54.91 + 54.92 +## navigator.notification.confirm 54.93 + 54.94 +カスタマイズ可能な確認のダイアログ ボックスが表示されます。 54.95 + 54.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 54.97 + 54.98 + 54.99 +* **メッセージ**: ダイアログ メッセージ。*(文字列)* 54.100 + 54.101 +* **confirmCallback**: インデックス (1、2、または 3) を押されたボタンまたはダイアログ ボックスは、ボタンを押す (0) なしに解雇されたときに呼び出すコールバック。*(機能)* 54.102 + 54.103 +* **タイトル**: ダイアログのタイトル。*(文字列)*(省略可能、既定値は`Confirm`) 54.104 + 54.105 +* **buttonLabels**: ボタンのラベルを指定する文字列の配列。*(配列)*(省略可能、既定値は [ `OK,Cancel` ]) 54.106 + 54.107 +### confirmCallback 54.108 + 54.109 +`confirmCallback`の確認ダイアログ ボックスでボタンを押したときに実行されます。 54.110 + 54.111 +コールバック引数 `buttonIndex` *(番号)*は、押されたボタンのインデックス。 メモこと、インデックスを使用して 1 ベースのインデックス化、ので、値は `1` 、 `2` 、 `3` 、等。 54.112 + 54.113 +### 例 54.114 + 54.115 + function onConfirm(buttonIndex) { 54.116 + alert('You selected button ' + buttonIndex); 54.117 + } 54.118 + 54.119 + navigator.notification.confirm( 54.120 + 'You are the winner!', // message 54.121 + onConfirm, // callback to invoke with index of button pressed 54.122 + 'Game Over', // title 54.123 + ['Restart','Exit'] // buttonLabels 54.124 + ); 54.125 + 54.126 + 54.127 +### サポートされているプラットフォーム 54.128 + 54.129 +* アマゾン火 OS 54.130 +* アンドロイド 54.131 +* ブラックベリー 10 54.132 +* Firefox の OS 54.133 +* iOS 54.134 +* Tizen 54.135 +* Windows Phone 7 と 8 54.136 +* Windows 8 54.137 + 54.138 +### Windows Phone 7 と 8 癖 54.139 + 54.140 +* 組み込みブラウザーの機能はありません `window.confirm` が割り当てることによってバインドすることができます。 54.141 + 54.142 + window.confirm = navigator.notification.confirm; 54.143 + 54.144 + 54.145 +* 呼び出しを `alert` と `confirm` では非ブロッキング、結果は非同期的にのみ使用できます。 54.146 + 54.147 +### Firefox OS 互換: 54.148 + 54.149 +両方のネイティブ ブロック `window.confirm()` ノン ブロッキングと `navigator.notification.confirm()` は利用できます。 54.150 + 54.151 +## navigator.notification.prompt 54.152 + 54.153 +ブラウザーのより詳細にカスタマイズはネイティブのダイアログ ボックスが表示されます `prompt` 関数。 54.154 + 54.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 54.156 + 54.157 + 54.158 +* **メッセージ**: ダイアログ メッセージ。*(文字列)* 54.159 + 54.160 +* **promptCallback**: インデックス (1、2、または 3) を押されたボタンまたはダイアログ ボックスは、ボタンを押す (0) なしに解雇されたときに呼び出すコールバック。*(機能)* 54.161 + 54.162 +* **タイトル**: *(文字列)* (省略可能、既定値のタイトル] ダイアログ`Prompt`) 54.163 + 54.164 +* **buttonLabels**: ボタンを指定する文字列の配列*(配列)* (省略可能、既定値のラベル`["OK","Cancel"]`) 54.165 + 54.166 +* **これら**: 既定テキスト ボックスの入力値 ( `String` ) (省略可能、既定: 空の文字列) 54.167 + 54.168 +### promptCallback 54.169 + 54.170 +`promptCallback`プロンプト ダイアログ ボックス内のボタンのいずれかを押したときに実行されます。`results`コールバックに渡されるオブジェクトに、次のプロパティが含まれています。 54.171 + 54.172 +* **buttonIndex**: 押されたボタンのインデックス。*(数)*メモこと、インデックスを使用して 1 ベースのインデックス化、ので、値は `1` 、 `2` 、 `3` 、等。 54.173 + 54.174 +* **input1**: プロンプト ダイアログ ボックスに入力したテキスト。*(文字列)* 54.175 + 54.176 +### 例 54.177 + 54.178 + function onPrompt(results) { 54.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 54.180 + } 54.181 + 54.182 + navigator.notification.prompt( 54.183 + 'Please enter your name', // message 54.184 + onPrompt, // callback to invoke 54.185 + 'Registration', // title 54.186 + ['Ok','Exit'], // buttonLabels 54.187 + 'Jane Doe' // defaultText 54.188 + ); 54.189 + 54.190 + 54.191 +### サポートされているプラットフォーム 54.192 + 54.193 +* アマゾン火 OS 54.194 +* アンドロイド 54.195 +* Firefox の OS 54.196 +* iOS 54.197 +* Windows Phone 7 と 8 54.198 + 54.199 +### Android の癖 54.200 + 54.201 +* Android は最大 3 つのボタンをサポートしているし、それ以上無視します。 54.202 + 54.203 +* アンドロイド 3.0 と後、ホロのテーマを使用するデバイスを逆の順序でボタンが表示されます。 54.204 + 54.205 +### Firefox OS 互換: 54.206 + 54.207 +両方のネイティブ ブロック `window.prompt()` ノン ブロッキングと `navigator.notification.prompt()` は利用できます。 54.208 + 54.209 +## navigator.notification.beep 54.210 + 54.211 +デバイス サウンドをビープ音を再生します。 54.212 + 54.213 + navigator.notification.beep(times); 54.214 + 54.215 + 54.216 +* **回**: ビープ音を繰り返す回数。*(数)* 54.217 + 54.218 +### 例 54.219 + 54.220 + // Beep twice! 54.221 + navigator.notification.beep(2); 54.222 + 54.223 + 54.224 +### サポートされているプラットフォーム 54.225 + 54.226 +* アマゾン火 OS 54.227 +* アンドロイド 54.228 +* ブラックベリー 10 54.229 +* iOS 54.230 +* Tizen 54.231 +* Windows Phone 7 と 8 54.232 +* Windows 8 54.233 + 54.234 +### アマゾン火 OS 癖 54.235 + 54.236 +* アマゾン火 OS デフォルト**設定/表示 & サウンド**パネルの下に指定した**通知音**を果たしています。 54.237 + 54.238 +### Android の癖 54.239 + 54.240 +* アンドロイド デフォルト**通知着信音****設定/サウンド & ディスプレイ**パネルの下に指定を果たしています。 54.241 + 54.242 +### Windows Phone 7 と 8 癖 54.243 + 54.244 +* コルドバ分布からジェネリック ビープ音ファイルに依存します。 54.245 + 54.246 +### Tizen の癖 54.247 + 54.248 +* Tizen は、メディア API 経由でオーディオ ファイルを再生してビープ音を実装します。 54.249 + 54.250 +* ビープ音ファイルする必要があります短いである必要があります、 `sounds` 、アプリケーションのルート ディレクトリのサブディレクトリと命名する必要があります`beep.wav`. 54.251 \ No newline at end of file
55.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 55.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/ko/index.md Thu Jun 04 14:50:33 2015 +0200 55.3 @@ -0,0 +1,247 @@ 55.4 +<!--- 55.5 + Licensed to the Apache Software Foundation (ASF) under one 55.6 + or more contributor license agreements. See the NOTICE file 55.7 + distributed with this work for additional information 55.8 + regarding copyright ownership. The ASF licenses this file 55.9 + to you under the Apache License, Version 2.0 (the 55.10 + "License"); you may not use this file except in compliance 55.11 + with the License. You may obtain a copy of the License at 55.12 + 55.13 + http://www.apache.org/licenses/LICENSE-2.0 55.14 + 55.15 + Unless required by applicable law or agreed to in writing, 55.16 + software distributed under the License is distributed on an 55.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 55.18 + KIND, either express or implied. See the License for the 55.19 + specific language governing permissions and limitations 55.20 + under the License. 55.21 +--> 55.22 + 55.23 +# org.apache.cordova.dialogs 55.24 + 55.25 +이 플러그인 몇 가지 기본 대화 상자 UI 요소에 액세스할 수 있습니다. 55.26 + 55.27 +## 설치 55.28 + 55.29 + cordova plugin add org.apache.cordova.dialogs 55.30 + 55.31 + 55.32 +## 메서드 55.33 + 55.34 +* `navigator.notification.alert` 55.35 +* `navigator.notification.confirm` 55.36 +* `navigator.notification.prompt` 55.37 +* `navigator.notification.beep` 55.38 + 55.39 +## navigator.notification.alert 55.40 + 55.41 +사용자 지정 경고 또는 대화 상자를 보여 줍니다. 이 기능에 대 한 기본 대화 상자를 사용 하는 대부분의 코르도바 구현 하지만 일부 플랫폼 사용 브라우저의 `alert` 함수는 일반적으로 덜 사용자 정의할 수 있습니다. 55.42 + 55.43 + navigator.notification.alert(message, alertCallback, [title], [buttonName]) 55.44 + 55.45 + 55.46 +* **메시지**: 대화 메시지. *(문자열)* 55.47 + 55.48 +* **alertCallback**: 콜백을 호출할 때 경고 대화 기 각. *(기능)* 55.49 + 55.50 +* **제목**: 제목 대화 상자. *(문자열)* (옵션, 기본값:`Alert`) 55.51 + 55.52 +* **buttonName**: 단추 이름. *(문자열)* (옵션, 기본값:`OK`) 55.53 + 55.54 +### 예를 들어 55.55 + 55.56 + function alertDismissed() { 55.57 + // do something 55.58 + } 55.59 + 55.60 + navigator.notification.alert( 55.61 + 'You are the winner!', // message 55.62 + alertDismissed, // callback 55.63 + 'Game Over', // title 55.64 + 'Done' // buttonName 55.65 + ); 55.66 + 55.67 + 55.68 +### 지원 되는 플랫폼 55.69 + 55.70 +* 아마존 화재 운영 체제 55.71 +* 안 드 로이드 55.72 +* 블랙베리 10 55.73 +* Firefox 운영 체제 55.74 +* iOS 55.75 +* Tizen 55.76 +* Windows Phone 7과 8 55.77 +* 윈도우 8 55.78 + 55.79 +### Windows Phone 7, 8 특수 55.80 + 55.81 +* 아니 내장 브라우저 경고 하지만 다음과 같이 전화를 바인딩할 수 있습니다 `alert()` 전역 범위에서: 55.82 + 55.83 + window.alert = navigator.notification.alert; 55.84 + 55.85 + 55.86 +* 둘 다 `alert` 와 `confirm` 는 비차단 호출, 결과 비동기적으로 사용할 수 있습니다. 55.87 + 55.88 +### 파이어 폭스 OS 단점: 55.89 + 55.90 +두 기본 차단 `window.alert()` 및 비차단 `navigator.notification.alert()` 사용할 수 있습니다. 55.91 + 55.92 +## navigator.notification.confirm 55.93 + 55.94 +사용자 정의 확인 대화 상자가 표시 됩니다. 55.95 + 55.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 55.97 + 55.98 + 55.99 +* **메시지**: 대화 메시지. *(문자열)* 55.100 + 55.101 +* **confirmCallback**: 인덱스 버튼 (1, 2 또는 3) 또는 대화 상자 버튼을 누르면 (0) 없이 기 각 될 때 호출할 콜백 합니다. *(기능)* 55.102 + 55.103 +* **제목**: 제목 대화 상자. *(문자열)* (옵션, 기본값:`Confirm`) 55.104 + 55.105 +* **buttonLabels**: 단추 레이블을 지정 하는 문자열 배열입니다. *(배열)* (옵션, 기본값은 [ `OK,Cancel` ]) 55.106 + 55.107 +### confirmCallback 55.108 + 55.109 +`confirmCallback`사용자가 확인 대화 상자에서 단추 중 하나를 누를 때 실행 됩니다. 55.110 + 55.111 +콜백 인수 `buttonIndex` *(번호)를*누르면된 버튼의 인덱스입니다. 참고 인덱스에서는 인덱스 1부터 값은 `1` , `2` , `3` , 등등. 55.112 + 55.113 +### 예를 들어 55.114 + 55.115 + function onConfirm(buttonIndex) { 55.116 + alert('You selected button ' + buttonIndex); 55.117 + } 55.118 + 55.119 + navigator.notification.confirm( 55.120 + 'You are the winner!', // message 55.121 + onConfirm, // callback to invoke with index of button pressed 55.122 + 'Game Over', // title 55.123 + ['Restart','Exit'] // buttonLabels 55.124 + ); 55.125 + 55.126 + 55.127 +### 지원 되는 플랫폼 55.128 + 55.129 +* 아마존 화재 운영 체제 55.130 +* 안 드 로이드 55.131 +* 블랙베리 10 55.132 +* Firefox 운영 체제 55.133 +* iOS 55.134 +* Tizen 55.135 +* Windows Phone 7과 8 55.136 +* 윈도우 8 55.137 + 55.138 +### Windows Phone 7, 8 특수 55.139 + 55.140 +* 에 대 한 기본 제공 브라우저 함수가 `window.confirm` , 그러나 할당 하 여 바인딩할 수 있습니다: 55.141 + 55.142 + window.confirm = navigator.notification.confirm; 55.143 + 55.144 + 55.145 +* 호출 `alert` 및 `confirm` 되므로 차단 되지 않은 결과만 비동기적으로 사용할 수 있습니다. 55.146 + 55.147 +### 파이어 폭스 OS 단점: 55.148 + 55.149 +두 기본 차단 `window.confirm()` 및 비차단 `navigator.notification.confirm()` 사용할 수 있습니다. 55.150 + 55.151 +## navigator.notification.prompt 55.152 + 55.153 +브라우저의 보다 더 많은 사용자 정의 기본 대화 상자 표시 `prompt` 기능. 55.154 + 55.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 55.156 + 55.157 + 55.158 +* **메시지**: 대화 메시지. *(문자열)* 55.159 + 55.160 +* **promptCallback**: 인덱스 버튼 (1, 2 또는 3) 또는 대화 상자 버튼을 누르면 (0) 없이 기 각 될 때 호출할 콜백 합니다. *(기능)* 55.161 + 55.162 +* **제목**: 제목 *(문자열)* (옵션, 기본값 대화 상자`Prompt`) 55.163 + 55.164 +* **buttonLabels**: 단추를 지정 하는 문자열의 배열 *(배열)* (옵션, 기본값은 레이블`["OK","Cancel"]`) 55.165 + 55.166 +* **defaultText**: 기본 텍스트 상자 입력 값 ( `String` ) (옵션, 기본값: 빈 문자열) 55.167 + 55.168 +### promptCallback 55.169 + 55.170 +`promptCallback`사용자가 프롬프트 대화 상자에서 단추 중 하나를 누를 때 실행 됩니다. `results`콜백에 전달 된 개체에는 다음 속성이 포함 되어 있습니다: 55.171 + 55.172 +* **buttonIndex**: 눌려진된 버튼의 인덱스. *(수)* 참고 인덱스에서는 인덱스 1부터 값은 `1` , `2` , `3` , 등등. 55.173 + 55.174 +* **input1**: 프롬프트 대화 상자에 입력 한 텍스트. *(문자열)* 55.175 + 55.176 +### 예를 들어 55.177 + 55.178 + function onPrompt(results) { 55.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 55.180 + } 55.181 + 55.182 + navigator.notification.prompt( 55.183 + 'Please enter your name', // message 55.184 + onPrompt, // callback to invoke 55.185 + 'Registration', // title 55.186 + ['Ok','Exit'], // buttonLabels 55.187 + 'Jane Doe' // defaultText 55.188 + ); 55.189 + 55.190 + 55.191 +### 지원 되는 플랫폼 55.192 + 55.193 +* 아마존 화재 운영 체제 55.194 +* 안 드 로이드 55.195 +* Firefox 운영 체제 55.196 +* iOS 55.197 +* Windows Phone 7과 8 55.198 + 55.199 +### 안 드 로이드 단점 55.200 + 55.201 +* 안 드 로이드 최대 3 개의 단추를 지원 하 고 그것 보다는 더 이상 무시 합니다. 55.202 + 55.203 +* 안 드 로이드 3.0 및 나중에, 단추는 홀로 테마를 사용 하는 장치에 대 한 반대 순서로 표시 됩니다. 55.204 + 55.205 +### 파이어 폭스 OS 단점: 55.206 + 55.207 +두 기본 차단 `window.prompt()` 및 비차단 `navigator.notification.prompt()` 사용할 수 있습니다. 55.208 + 55.209 +## navigator.notification.beep 55.210 + 55.211 +장치는 경고음 소리를 재생 합니다. 55.212 + 55.213 + navigator.notification.beep(times); 55.214 + 55.215 + 55.216 +* **시간**: 경고음을 반복 하는 횟수. *(수)* 55.217 + 55.218 +### 예를 들어 55.219 + 55.220 + // Beep twice! 55.221 + navigator.notification.beep(2); 55.222 + 55.223 + 55.224 +### 지원 되는 플랫폼 55.225 + 55.226 +* 아마존 화재 운영 체제 55.227 +* 안 드 로이드 55.228 +* 블랙베리 10 55.229 +* iOS 55.230 +* Tizen 55.231 +* Windows Phone 7과 8 55.232 +* 윈도우 8 55.233 + 55.234 +### 아마존 화재 OS 단점 55.235 + 55.236 +* 아마존 화재 운영 체제 기본 **설정/디스플레이 및 사운드** 패널에 지정 된 **알림 소리** 재생 됩니다. 55.237 + 55.238 +### 안 드 로이드 단점 55.239 + 55.240 +* 안 드 로이드 기본 **알림 벨소리** **설정/사운드 및 디스플레이** 패널에서 지정 합니다. 55.241 + 55.242 +### Windows Phone 7, 8 특수 55.243 + 55.244 +* 코르 도우 바 분포에서 일반 경고음 파일에 의존합니다. 55.245 + 55.246 +### Tizen 특수 55.247 + 55.248 +* Tizen은 미디어 API 통해 오디오 파일을 재생 하 여 경고음을 구현 합니다. 55.249 + 55.250 +* 경고음 파일에 위치 해야 합니다, 짧은 해야 한 `sounds` 응용 프로그램의 루트 디렉터리의 하위 디렉터리 명명 해야 합니다`beep.wav`. 55.251 \ No newline at end of file
56.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 56.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/pl/index.md Thu Jun 04 14:50:33 2015 +0200 56.3 @@ -0,0 +1,247 @@ 56.4 +<!--- 56.5 + Licensed to the Apache Software Foundation (ASF) under one 56.6 + or more contributor license agreements. See the NOTICE file 56.7 + distributed with this work for additional information 56.8 + regarding copyright ownership. The ASF licenses this file 56.9 + to you under the Apache License, Version 2.0 (the 56.10 + "License"); you may not use this file except in compliance 56.11 + with the License. You may obtain a copy of the License at 56.12 + 56.13 + http://www.apache.org/licenses/LICENSE-2.0 56.14 + 56.15 + Unless required by applicable law or agreed to in writing, 56.16 + software distributed under the License is distributed on an 56.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 56.18 + KIND, either express or implied. See the License for the 56.19 + specific language governing permissions and limitations 56.20 + under the License. 56.21 +--> 56.22 + 56.23 +# org.apache.cordova.dialogs 56.24 + 56.25 +Ten plugin umożliwia dostęp do niektórych rodzimych okna dialogowego elementy interfejsu użytkownika. 56.26 + 56.27 +## Instalacja 56.28 + 56.29 + cordova plugin add org.apache.cordova.dialogs 56.30 + 56.31 + 56.32 +## Metody 56.33 + 56.34 +* `navigator.notification.alert` 56.35 +* `navigator.notification.confirm` 56.36 +* `navigator.notification.prompt` 56.37 +* `navigator.notification.beep` 56.38 + 56.39 +## navigator.notification.alert 56.40 + 56.41 +Pokazuje niestandardowe wpisu lub okno dialogowe. Większość implementacji Cordova używać rodzimych okno dialogowe dla tej funkcji, ale niektóre platformy używać przeglądarki `alert` funkcja, który jest zazwyczaj mniej konfigurowalny. 56.42 + 56.43 + navigator.notification.alert(message, alertCallback, [title], [buttonName]) 56.44 + 56.45 + 56.46 +* **wiadomość**: komunikat okna dialogowego. *(String)* 56.47 + 56.48 +* **alertCallback**: wywołanie zwrotne do wywołania, gdy okno dialogowe alert jest oddalona. *(Funkcja)* 56.49 + 56.50 +* **tytuł**: okno tytuł. *(String)* (Opcjonalna, domyślnie`Alert`) 56.51 + 56.52 +* **buttonName**: Nazwa przycisku. *(String)* (Opcjonalna, domyślnie`OK`) 56.53 + 56.54 +### Przykład 56.55 + 56.56 + function alertDismissed() { 56.57 + // do something 56.58 + } 56.59 + 56.60 + navigator.notification.alert( 56.61 + 'You are the winner!', // message 56.62 + alertDismissed, // callback 56.63 + 'Game Over', // title 56.64 + 'Done' // buttonName 56.65 + ); 56.66 + 56.67 + 56.68 +### Obsługiwane platformy 56.69 + 56.70 +* Amazon Fire OS 56.71 +* Android 56.72 +* BlackBerry 10 56.73 +* Firefox OS 56.74 +* iOS 56.75 +* Tizen 56.76 +* Windows Phone 7 i 8 56.77 +* Windows 8 56.78 + 56.79 +### Windows Phone 7 i 8 dziwactwa 56.80 + 56.81 +* Istnieje wpis nie wbudowana przeglądarka, ale można powiązać w następujący sposób na wywołanie `alert()` w globalnym zasięgu: 56.82 + 56.83 + window.alert = navigator.notification.alert; 56.84 + 56.85 + 56.86 +* Zarówno `alert` i `confirm` są bez blokowania połączeń, których wyniki są tylko dostępne asynchronicznie. 56.87 + 56.88 +### Firefox OS dziwactwa: 56.89 + 56.90 +Blokuje zarówno rodzimych `window.alert()` i bez blokowania `navigator.notification.alert()` są dostępne. 56.91 + 56.92 +## navigator.notification.confirm 56.93 + 56.94 +Wyświetla okno dialogowe potwierdzenia konfigurowalny. 56.95 + 56.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 56.97 + 56.98 + 56.99 +* **wiadomość**: komunikat okna dialogowego. *(String)* 56.100 + 56.101 +* **confirmCallback**: wywołanie zwrotne do wywołania z indeksu z przycisku (1, 2 lub 3), lub gdy okno jest zwolniony bez naciśnij przycisk (0). *(Funkcja)* 56.102 + 56.103 +* **tytuł**: okno tytuł. *(String)* (Opcjonalna, domyślnie`Confirm`) 56.104 + 56.105 +* **buttonLabels**: tablica ciągów, określając etykiety przycisków. *(Tablica)* (Opcjonalna, domyślnie [ `OK,Cancel` ]) 56.106 + 56.107 +### confirmCallback 56.108 + 56.109 +`confirmCallback`Wykonuje, gdy użytkownik naciśnie klawisz jeden z przycisków w oknie dialogowym potwierdzenia. 56.110 + 56.111 +Wywołania zwrotnego przyjmuje argument `buttonIndex` *(numer)*, który jest indeksem wciśnięty przycisk. Uwaga, że indeks używa, na podstawie jednego indeksowania, więc wartość jest `1` , `2` , `3` , itp. 56.112 + 56.113 +### Przykład 56.114 + 56.115 + function onConfirm(buttonIndex) { 56.116 + alert('You selected button ' + buttonIndex); 56.117 + } 56.118 + 56.119 + navigator.notification.confirm( 56.120 + 'You are the winner!', // message 56.121 + onConfirm, // callback to invoke with index of button pressed 56.122 + 'Game Over', // title 56.123 + ['Restart','Exit'] // buttonLabels 56.124 + ); 56.125 + 56.126 + 56.127 +### Obsługiwane platformy 56.128 + 56.129 +* Amazon Fire OS 56.130 +* Android 56.131 +* BlackBerry 10 56.132 +* Firefox OS 56.133 +* iOS 56.134 +* Tizen 56.135 +* Windows Phone 7 i 8 56.136 +* Windows 8 56.137 + 56.138 +### Windows Phone 7 i 8 dziwactwa 56.139 + 56.140 +* Istnieje funkcja wbudowana przeglądarka nie `window.confirm` , ale można go powiązać przypisując: 56.141 + 56.142 + window.confirm = navigator.notification.confirm; 56.143 + 56.144 + 56.145 +* Wzywa do `alert` i `confirm` są bez blokowania, więc wynik jest tylko dostępnych asynchronicznie. 56.146 + 56.147 +### Firefox OS dziwactwa: 56.148 + 56.149 +Blokuje zarówno rodzimych `window.confirm()` i bez blokowania `navigator.notification.confirm()` są dostępne. 56.150 + 56.151 +## navigator.notification.prompt 56.152 + 56.153 +Wyświetla okno dialogowe macierzystego, który bardziej niż przeglądarki `prompt` funkcja. 56.154 + 56.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 56.156 + 56.157 + 56.158 +* **wiadomość**: komunikat okna dialogowego. *(String)* 56.159 + 56.160 +* **promptCallback**: wywołanie zwrotne do wywołania z indeksu z przycisku (1, 2 lub 3), lub gdy okno jest zwolniony bez naciśnij przycisk (0). *(Funkcja)* 56.161 + 56.162 +* **tytuł**: okno tytuł *(String)* (opcjonalna, domyślnie`Prompt`) 56.163 + 56.164 +* **buttonLabels**: tablica ciągów, określając przycisk etykiety *(tablica)* (opcjonalna, domyślnie`["OK","Cancel"]`) 56.165 + 56.166 +* **defaultText**: wartość wejściowa tekstowym domyślnego ( `String` ) (opcjonalna, domyślnie: pusty ciąg) 56.167 + 56.168 +### promptCallback 56.169 + 56.170 +`promptCallback`Wykonuje, gdy użytkownik naciśnie klawisz jeden z przycisków w oknie dialogowym polecenia. `results`Obiekt przekazywany do wywołania zwrotnego zawiera następujące właściwości: 56.171 + 56.172 +* **buttonIndex**: indeks wciśnięty przycisk. *(Liczba)* Uwaga, że indeks używa, na podstawie jednego indeksowania, więc wartość jest `1` , `2` , `3` , itp. 56.173 + 56.174 +* **input1**: Tekst wprowadzony w oknie polecenia. *(String)* 56.175 + 56.176 +### Przykład 56.177 + 56.178 + function onPrompt(results) { 56.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 56.180 + } 56.181 + 56.182 + navigator.notification.prompt( 56.183 + 'Please enter your name', // message 56.184 + onPrompt, // callback to invoke 56.185 + 'Registration', // title 56.186 + ['Ok','Exit'], // buttonLabels 56.187 + 'Jane Doe' // defaultText 56.188 + ); 56.189 + 56.190 + 56.191 +### Obsługiwane platformy 56.192 + 56.193 +* Amazon Fire OS 56.194 +* Android 56.195 +* Firefox OS 56.196 +* iOS 56.197 +* Windows Phone 7 i 8 56.198 + 56.199 +### Dziwactwa Androida 56.200 + 56.201 +* Android obsługuje maksymalnie trzy przyciski i więcej niż to ignoruje. 56.202 + 56.203 +* Android 3.0 i nowszych przyciski są wyświetlane w kolejności odwrotnej do urządzenia, które używają tematu Holo. 56.204 + 56.205 +### Firefox OS dziwactwa: 56.206 + 56.207 +Blokuje zarówno rodzimych `window.prompt()` i bez blokowania `navigator.notification.prompt()` są dostępne. 56.208 + 56.209 +## navigator.notification.beep 56.210 + 56.211 +Urządzenie odtwarza sygnał ciągły dźwięk. 56.212 + 56.213 + navigator.notification.beep(times); 56.214 + 56.215 + 56.216 +* **razy**: liczba powtórzeń po sygnale. *(Liczba)* 56.217 + 56.218 +### Przykład 56.219 + 56.220 + // Beep twice! 56.221 + navigator.notification.beep(2); 56.222 + 56.223 + 56.224 +### Obsługiwane platformy 56.225 + 56.226 +* Amazon Fire OS 56.227 +* Android 56.228 +* BlackBerry 10 56.229 +* iOS 56.230 +* Tizen 56.231 +* Windows Phone 7 i 8 56.232 +* Windows 8 56.233 + 56.234 +### Amazon ogień OS dziwactwa 56.235 + 56.236 +* Amazon ogień OS gra domyślny **Dźwięk powiadomienia** określone w panelu **ekranu/ustawienia i dźwięk** . 56.237 + 56.238 +### Dziwactwa Androida 56.239 + 56.240 +* Android gra domyślnie **dzwonek powiadomienia** określone w panelu **ustawień/dźwięk i wyświetlacz** . 56.241 + 56.242 +### Windows Phone 7 i 8 dziwactwa 56.243 + 56.244 +* Opiera się na pliku rodzajowego sygnał z rozkładu Cordova. 56.245 + 56.246 +### Dziwactwa Tizen 56.247 + 56.248 +* Tizen implementuje dźwięków przez odtwarzania pliku audio za pośrednictwem mediów API. 56.249 + 56.250 +* Plik dźwiękowy muszą być krótkie, musi znajdować się w `sounds` podkatalogu katalogu głównego aplikacji i musi być nazwany`beep.wav`. 56.251 \ No newline at end of file
57.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 57.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/ru/index.md Thu Jun 04 14:50:33 2015 +0200 57.3 @@ -0,0 +1,247 @@ 57.4 +<!--- 57.5 + Licensed to the Apache Software Foundation (ASF) under one 57.6 + or more contributor license agreements. See the NOTICE file 57.7 + distributed with this work for additional information 57.8 + regarding copyright ownership. The ASF licenses this file 57.9 + to you under the Apache License, Version 2.0 (the 57.10 + "License"); you may not use this file except in compliance 57.11 + with the License. You may obtain a copy of the License at 57.12 + 57.13 + http://www.apache.org/licenses/LICENSE-2.0 57.14 + 57.15 + Unless required by applicable law or agreed to in writing, 57.16 + software distributed under the License is distributed on an 57.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 57.18 + KIND, either express or implied. See the License for the 57.19 + specific language governing permissions and limitations 57.20 + under the License. 57.21 +--> 57.22 + 57.23 +# org.apache.cordova.dialogs 57.24 + 57.25 +Этот плагин обеспечивает доступ к некоторым элементам собственного диалогового окна пользовательского интерфейса. 57.26 + 57.27 +## Установка 57.28 + 57.29 + cordova plugin add org.apache.cordova.dialogs 57.30 + 57.31 + 57.32 +## Методы 57.33 + 57.34 +* `navigator.notification.alert` 57.35 +* `navigator.notification.confirm` 57.36 +* `navigator.notification.prompt` 57.37 +* `navigator.notification.beep` 57.38 + 57.39 +## navigator.notification.alert 57.40 + 57.41 +Показывает окно пользовательские оповещения или диалоговое окно. Большинство реализаций Cordova использовать диалоговое окно родной для этой функции, но некоторые платформы браузера `alert` функция, которая как правило менее настраивается. 57.42 + 57.43 + Navigator.Notification.Alert (сообщение, alertCallback, [название], [buttonName]) 57.44 + 57.45 + 57.46 +* **сообщение**: сообщение диалога. *(Строка)* 57.47 + 57.48 +* **alertCallback**: обратного вызова для вызова, когда закрывается диалоговое окно оповещения. *(Функция)* 57.49 + 57.50 +* **название**: диалоговое окно название. *(Строка)* (Опционально, по умолчанию`Alert`) 57.51 + 57.52 +* **buttonName**: имя кнопки. *(Строка)* (Опционально, по умолчанию`OK`) 57.53 + 57.54 +### Пример 57.55 + 57.56 + function alertDismissed() { 57.57 + // do something 57.58 + } 57.59 + 57.60 + navigator.notification.alert( 57.61 + 'You are the winner!', // message 57.62 + alertDismissed, // callback 57.63 + 'Game Over', // title 57.64 + 'Done' // buttonName 57.65 + ); 57.66 + 57.67 + 57.68 +### Поддерживаемые платформы 57.69 + 57.70 +* Amazon Fire OS 57.71 +* Android 57.72 +* BlackBerry 10 57.73 +* Firefox OS 57.74 +* iOS 57.75 +* Tizen 57.76 +* Windows Phone 7 и 8 57.77 +* Windows 8 57.78 + 57.79 +### Особенности Windows Phone 7 и 8 57.80 + 57.81 +* Существует предупреждение не встроенный браузер, но можно привязать один следующим позвонить `alert()` в глобальной области действия: 57.82 + 57.83 + window.alert = navigator.notification.alert; 57.84 + 57.85 + 57.86 +* Оба `alert` и `confirm` являются не блокировка звонков, результаты которых доступны только асинхронно. 57.87 + 57.88 +### Firefox OS причуды: 57.89 + 57.90 +Как родной блокировка `window.alert()` и неблокирующий `navigator.notification.alert()` доступны. 57.91 + 57.92 +## navigator.notification.confirm 57.93 + 57.94 +Отображает диалоговое окно Настраиваемый подтверждения. 57.95 + 57.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 57.97 + 57.98 + 57.99 +* **сообщение**: сообщение диалога. *(Строка)* 57.100 + 57.101 +* **confirmCallback**: обратного вызова с индексом кнопка нажата (1, 2 или 3) или когда диалоговое окно закрывается без нажатия кнопки (0). *(Функция)* 57.102 + 57.103 +* **название**: диалоговое окно название. *(Строка)* (Опционально, по умолчанию`Confirm`) 57.104 + 57.105 +* **buttonLabels**: массив строк, указав названия кнопок. *(Массив)* (Не обязательно, по умолчанию [ `OK,Cancel` ]) 57.106 + 57.107 +### confirmCallback 57.108 + 57.109 +`confirmCallback`Выполняется, когда пользователь нажимает одну из кнопок в диалоговом окне подтверждения. 57.110 + 57.111 +Аргументом функции обратного вызова `buttonIndex` *(номер)*, который является индекс нажатой кнопки. Обратите внимание, что индекс использует единицы индексации, поэтому значение `1` , `2` , `3` , и т.д. 57.112 + 57.113 +### Пример 57.114 + 57.115 + function onConfirm(buttonIndex) { 57.116 + alert('You selected button ' + buttonIndex); 57.117 + } 57.118 + 57.119 + navigator.notification.confirm( 57.120 + 'You are the winner!', // message 57.121 + onConfirm, // callback to invoke with index of button pressed 57.122 + 'Game Over', // title 57.123 + ['Restart','Exit'] // buttonLabels 57.124 + ); 57.125 + 57.126 + 57.127 +### Поддерживаемые платформы 57.128 + 57.129 +* Amazon Fire OS 57.130 +* Android 57.131 +* BlackBerry 10 57.132 +* Firefox OS 57.133 +* iOS 57.134 +* Tizen 57.135 +* Windows Phone 7 и 8 57.136 +* Windows 8 57.137 + 57.138 +### Особенности Windows Phone 7 и 8 57.139 + 57.140 +* Нет встроенного браузера функция для `window.confirm` , но его можно привязать путем присвоения: 57.141 + 57.142 + window.confirm = navigator.notification.confirm; 57.143 + 57.144 + 57.145 +* Вызовы `alert` и `confirm` являются не блокируется, поэтому результат доступен только асинхронно. 57.146 + 57.147 +### Firefox OS причуды: 57.148 + 57.149 +Как родной блокировка `window.confirm()` и неблокирующий `navigator.notification.confirm()` доступны. 57.150 + 57.151 +## navigator.notification.prompt 57.152 + 57.153 +Отображает родной диалоговое окно более настраиваемый, чем в браузере `prompt` функции. 57.154 + 57.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 57.156 + 57.157 + 57.158 +* **сообщение**: сообщение диалога. *(Строка)* 57.159 + 57.160 +* **promptCallback**: обратного вызова с индексом кнопка нажата (1, 2 или 3) или когда диалоговое окно закрывается без нажатия кнопки (0). *(Функция)* 57.161 + 57.162 +* **название**: диалоговое окно название *(String)* (опционально, по умолчанию`Prompt`) 57.163 + 57.164 +* **buttonLabels**: массив строк, указав кнопку этикетки *(массив)* (опционально, по умолчанию`["OK","Cancel"]`) 57.165 + 57.166 +* **defaultText**: по умолчанию textbox входное значение ( `String` ) (опционально, по умолчанию: пустая строка) 57.167 + 57.168 +### promptCallback 57.169 + 57.170 +`promptCallback`Выполняется, когда пользователь нажимает одну из кнопок в диалоговом окне приглашения. `results`Объект, переданный в метод обратного вызова содержит следующие свойства: 57.171 + 57.172 +* **buttonIndex**: индекс нажатой кнопки. *(Число)* Обратите внимание, что индекс использует единицы индексации, поэтому значение `1` , `2` , `3` , и т.д. 57.173 + 57.174 +* **INPUT1**: текст, введенный в диалоговом окне приглашения. *(Строка)* 57.175 + 57.176 +### Пример 57.177 + 57.178 + function onPrompt(results) { 57.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 57.180 + } 57.181 + 57.182 + navigator.notification.prompt( 57.183 + 'Please enter your name', // message 57.184 + onPrompt, // callback to invoke 57.185 + 'Registration', // title 57.186 + ['Ok','Exit'], // buttonLabels 57.187 + 'Jane Doe' // defaultText 57.188 + ); 57.189 + 57.190 + 57.191 +### Поддерживаемые платформы 57.192 + 57.193 +* Amazon Fire OS 57.194 +* Android 57.195 +* Firefox OS 57.196 +* iOS 57.197 +* Windows Phone 7 и 8 57.198 + 57.199 +### Особенности Android 57.200 + 57.201 +* Android поддерживает максимум из трех кнопок и игнорирует больше, чем это. 57.202 + 57.203 +* На Android 3.0 и более поздних версиях кнопки отображаются в обратном порядке для устройств, которые используют тему холо. 57.204 + 57.205 +### Firefox OS причуды: 57.206 + 57.207 +Как родной блокировка `window.prompt()` и неблокирующий `navigator.notification.prompt()` доступны. 57.208 + 57.209 +## navigator.notification.beep 57.210 + 57.211 +Устройство воспроизводит звуковой сигнал звук. 57.212 + 57.213 + navigator.notification.beep(times); 57.214 + 57.215 + 57.216 +* **раз**: количество раз, чтобы повторить сигнал. *(Число)* 57.217 + 57.218 +### Пример 57.219 + 57.220 + // Beep twice! 57.221 + navigator.notification.beep(2); 57.222 + 57.223 + 57.224 +### Поддерживаемые платформы 57.225 + 57.226 +* Amazon Fire OS 57.227 +* Android 57.228 +* BlackBerry 10 57.229 +* iOS 57.230 +* Tizen 57.231 +* Windows Phone 7 и 8 57.232 +* Windows 8 57.233 + 57.234 +### Особенности Amazon Fire OS 57.235 + 57.236 +* Amazon Fire OS играет по умолчанию **Звук уведомления** , указанного на панели **параметров/дисплей и звук** . 57.237 + 57.238 +### Особенности Android 57.239 + 57.240 +* Android играет по умолчанию **уведомления рингтон** указанных в панели **настройки/звук и дисплей** . 57.241 + 57.242 +### Особенности Windows Phone 7 и 8 57.243 + 57.244 +* Опирается на общий звуковой файл из дистрибутива Кордова. 57.245 + 57.246 +### Особенности Tizen 57.247 + 57.248 +* Tizen реализует гудков, воспроизведении аудиофайла через СМИ API. 57.249 + 57.250 +* Звуковой файл должен быть коротким, должен быть расположен в `sounds` подкаталог корневого каталога приложения и должны быть названы`beep.wav`. 57.251 \ No newline at end of file
58.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 58.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/doc/zh/index.md Thu Jun 04 14:50:33 2015 +0200 58.3 @@ -0,0 +1,247 @@ 58.4 +<!--- 58.5 + Licensed to the Apache Software Foundation (ASF) under one 58.6 + or more contributor license agreements. See the NOTICE file 58.7 + distributed with this work for additional information 58.8 + regarding copyright ownership. The ASF licenses this file 58.9 + to you under the Apache License, Version 2.0 (the 58.10 + "License"); you may not use this file except in compliance 58.11 + with the License. You may obtain a copy of the License at 58.12 + 58.13 + http://www.apache.org/licenses/LICENSE-2.0 58.14 + 58.15 + Unless required by applicable law or agreed to in writing, 58.16 + software distributed under the License is distributed on an 58.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 58.18 + KIND, either express or implied. See the License for the 58.19 + specific language governing permissions and limitations 58.20 + under the License. 58.21 +--> 58.22 + 58.23 +# org.apache.cordova.dialogs 58.24 + 58.25 +這個外掛程式提供了對一些本機對話方塊的使用者介面元素的訪問。 58.26 + 58.27 +## 安裝 58.28 + 58.29 + cordova plugin add org.apache.cordova.dialogs 58.30 + 58.31 + 58.32 +## 方法 58.33 + 58.34 +* `navigator.notification.alert` 58.35 +* `navigator.notification.confirm` 58.36 +* `navigator.notification.prompt` 58.37 +* `navigator.notification.beep` 58.38 + 58.39 +## navigator.notification.alert 58.40 + 58.41 +顯示一個自訂的警報或對話方塊框。 大多數科爾多瓦實現使用本機對話方塊中的此項功能,但一些平臺使用瀏覽器的 `alert` 函數,這是通常不那麼可自訂。 58.42 + 58.43 + navigator.notification.alert(message, alertCallback, [title], [buttonName]) 58.44 + 58.45 + 58.46 +* **消息**: 消息對話方塊。*(字串)* 58.47 + 58.48 +* **alertCallback**: 當警報對話方塊的被解雇時要調用的回檔。*(函數)* 58.49 + 58.50 +* **標題**: 標題對話方塊。*(字串)*(可選,預設值為`Alert`) 58.51 + 58.52 +* **buttonName**: 按鈕名稱。*(字串)*(可選,預設值為`OK`) 58.53 + 58.54 +### 示例 58.55 + 58.56 + function alertDismissed() { 58.57 + // do something 58.58 + } 58.59 + 58.60 + navigator.notification.alert( 58.61 + 'You are the winner!', // message 58.62 + alertDismissed, // callback 58.63 + 'Game Over', // title 58.64 + 'Done' // buttonName 58.65 + ); 58.66 + 58.67 + 58.68 +### 支援的平臺 58.69 + 58.70 +* 亞馬遜火 OS 58.71 +* Android 系統 58.72 +* 黑莓 10 58.73 +* 火狐瀏覽器作業系統 58.74 +* iOS 58.75 +* Tizen 58.76 +* Windows Phone 7 和 8 58.77 +* Windows 8 58.78 + 58.79 +### Windows Phone 7 和 8 怪癖 58.80 + 58.81 +* 有沒有內置瀏覽器警報,但你可以綁定一個,如下所示調用 `alert()` 在全球範圍內: 58.82 + 58.83 + window.alert = navigator.notification.alert; 58.84 + 58.85 + 58.86 +* 兩個 `alert` 和 `confirm` 的非阻塞的調用,其中的結果才是可用的非同步。 58.87 + 58.88 +### 火狐瀏覽器作業系統怪癖: 58.89 + 58.90 +這兩個本機阻止 `window.alert()` 和非阻塞 `navigator.notification.alert()` 可用。 58.91 + 58.92 +## navigator.notification.confirm 58.93 + 58.94 +顯示一個可自訂的確認對話方塊。 58.95 + 58.96 + navigator.notification.confirm(message, confirmCallback, [title], [buttonLabels]) 58.97 + 58.98 + 58.99 +* **消息**: 消息對話方塊。*(字串)* 58.100 + 58.101 +* **confirmCallback**: 要用索引 (1、 2 或 3) 按下的按鈕,或者在沒有按下按鈕 (0) 駁回了對話方塊中時調用的回檔。*(函數)* 58.102 + 58.103 +* **標題**: 標題對話方塊。*(字串)*(可選,預設值為`Confirm`) 58.104 + 58.105 +* **buttonLabels**: 指定按鈕標籤的字串陣列。*(陣列)*(可選,預設值為 [ `OK,Cancel` ]) 58.106 + 58.107 +### confirmCallback 58.108 + 58.109 +`confirmCallback`當使用者按下確認對話方塊中的按鈕之一的時候執行。 58.110 + 58.111 +回檔將參數 `buttonIndex` *(編號)*,它是按下的按鈕的索引。 請注意索引使用基於 1 的索引,所以值是 `1` , `2` , `3` ,等等。 58.112 + 58.113 +### 示例 58.114 + 58.115 + function onConfirm(buttonIndex) { 58.116 + alert('You selected button ' + buttonIndex); 58.117 + } 58.118 + 58.119 + navigator.notification.confirm( 58.120 + 'You are the winner!', // message 58.121 + onConfirm, // callback to invoke with index of button pressed 58.122 + 'Game Over', // title 58.123 + ['Restart','Exit'] // buttonLabels 58.124 + ); 58.125 + 58.126 + 58.127 +### 支援的平臺 58.128 + 58.129 +* 亞馬遜火 OS 58.130 +* Android 系統 58.131 +* 黑莓 10 58.132 +* 火狐瀏覽器作業系統 58.133 +* iOS 58.134 +* Tizen 58.135 +* Windows Phone 7 和 8 58.136 +* Windows 8 58.137 + 58.138 +### Windows Phone 7 和 8 怪癖 58.139 + 58.140 +* 有沒有內置的瀏覽器功能的 `window.confirm` ,但你可以將它綁定通過分配: 58.141 + 58.142 + window.confirm = navigator.notification.confirm; 58.143 + 58.144 + 58.145 +* 調用到 `alert` 和 `confirm` 的非阻塞,所以結果就是只可用以非同步方式。 58.146 + 58.147 +### 火狐瀏覽器作業系統怪癖: 58.148 + 58.149 +這兩個本機阻止 `window.confirm()` 和非阻塞 `navigator.notification.confirm()` 可用。 58.150 + 58.151 +## navigator.notification.prompt 58.152 + 58.153 +顯示本機的對話方塊,更可自訂的瀏覽器比 `prompt` 函數。 58.154 + 58.155 + navigator.notification.prompt(message, promptCallback, [title], [buttonLabels], [defaultText]) 58.156 + 58.157 + 58.158 +* **消息**: 消息對話方塊。*(字串)* 58.159 + 58.160 +* **promptCallback**: 要用索引 (1、 2 或 3) 按下的按鈕,或者在沒有按下按鈕 (0) 駁回了對話方塊中時調用的回檔。*(函數)* 58.161 + 58.162 +* **標題**: 對話方塊的標題*(字串)* (可選,預設值為`Prompt`) 58.163 + 58.164 +* **buttonLabels**: 陣列,這些字串指定按鈕標籤*(陣列)* (可選,預設值為`["OK","Cancel"]`) 58.165 + 58.166 +* **defaultText**: 預設文字方塊中輸入值 ( `String` ) (可選,預設值: 空字串) 58.167 + 58.168 +### promptCallback 58.169 + 58.170 +`promptCallback`當使用者按下一個提示對話方塊中的按鈕時執行。`results`物件傳遞給回檔的包含以下屬性: 58.171 + 58.172 +* **buttonIndex**: 按下的按鈕的索引。*(人數)*請注意索引使用基於 1 的索引,所以值是 `1` , `2` , `3` ,等等。 58.173 + 58.174 +* **輸入 1**: 在提示對話方塊中輸入的文本。*(字串)* 58.175 + 58.176 +### 示例 58.177 + 58.178 + function onPrompt(results) { 58.179 + alert("You selected button number " + results.buttonIndex + " and entered " + results.input1); 58.180 + } 58.181 + 58.182 + navigator.notification.prompt( 58.183 + 'Please enter your name', // message 58.184 + onPrompt, // callback to invoke 58.185 + 'Registration', // title 58.186 + ['Ok','Exit'], // buttonLabels 58.187 + 'Jane Doe' // defaultText 58.188 + ); 58.189 + 58.190 + 58.191 +### 支援的平臺 58.192 + 58.193 +* 亞馬遜火 OS 58.194 +* Android 系統 58.195 +* 火狐瀏覽器作業系統 58.196 +* iOS 58.197 +* Windows Phone 7 和 8 58.198 + 58.199 +### Android 的怪癖 58.200 + 58.201 +* Android 支援最多的三個按鈕,並忽略任何更多。 58.202 + 58.203 +* 關於 Android 3.0 及更高版本,使用全息主題的設備按相反的順序顯示按鈕。 58.204 + 58.205 +### 火狐瀏覽器作業系統怪癖: 58.206 + 58.207 +這兩個本機阻止 `window.prompt()` 和非阻塞 `navigator.notification.prompt()` 可用。 58.208 + 58.209 +## navigator.notification.beep 58.210 + 58.211 +該設備播放提示音聲音。 58.212 + 58.213 + navigator.notification.beep(times); 58.214 + 58.215 + 58.216 +* **時間**: 的次數重複發出蜂鳴音。*(人數)* 58.217 + 58.218 +### 示例 58.219 + 58.220 + // Beep twice! 58.221 + navigator.notification.beep(2); 58.222 + 58.223 + 58.224 +### 支援的平臺 58.225 + 58.226 +* 亞馬遜火 OS 58.227 +* Android 系統 58.228 +* 黑莓 10 58.229 +* iOS 58.230 +* Tizen 58.231 +* Windows Phone 7 和 8 58.232 +* Windows 8 58.233 + 58.234 +### 亞馬遜火 OS 怪癖 58.235 + 58.236 +* 亞馬遜火 OS 播放預設**設置/顯示 & 聲音**面板下指定的**通知聲音**。 58.237 + 58.238 +### Android 的怪癖 58.239 + 58.240 +* Android 系統播放的預設**通知鈴聲****設置/聲音和顯示**面板下指定。 58.241 + 58.242 +### Windows Phone 7 和 8 怪癖 58.243 + 58.244 +* 依賴泛型蜂鳴音檔從科爾多瓦分佈。 58.245 + 58.246 +### Tizen 怪癖 58.247 + 58.248 +* Tizen 通過播放音訊檔通過媒體 API 實現會發出蜂鳴聲。 58.249 + 58.250 +* 蜂鳴音檔必須很短,必須設在 `sounds` 子目錄中的應用程式的根目錄中,並且必須命名`beep.wav`. 58.251 \ No newline at end of file
59.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 59.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/plugin.xml Thu Jun 04 14:50:33 2015 +0200 59.3 @@ -0,0 +1,157 @@ 59.4 +<?xml version="1.0" encoding="UTF-8"?> 59.5 +<!-- 59.6 + Licensed to the Apache Software Foundation (ASF) under one 59.7 + or more contributor license agreements. See the NOTICE file 59.8 + distributed with this work for additional information 59.9 + regarding copyright ownership. The ASF licenses this file 59.10 + to you under the Apache License, Version 2.0 (the 59.11 + "License"); you may not use this file except in compliance 59.12 + with the License. You may obtain a copy of the License at 59.13 + 59.14 + http://www.apache.org/licenses/LICENSE-2.0 59.15 + 59.16 + Unless required by applicable law or agreed to in writing, 59.17 + software distributed under the License is distributed on an 59.18 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 59.19 + KIND, either express or implied. See the License for the 59.20 + specific language governing permissions and limitations 59.21 + under the License. 59.22 +--> 59.23 + 59.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 59.25 + id="org.apache.cordova.dialogs" 59.26 + version="0.2.11"> 59.27 + 59.28 + <name>Notification</name> 59.29 + <description>Cordova Notification Plugin</description> 59.30 + <license>Apache 2.0</license> 59.31 + <keywords>cordova,notification</keywords> 59.32 + <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialogs.git</repo> 59.33 + <issue>https://issues.apache.org/jira/browse/CB/component/12320642</issue> 59.34 + 59.35 + <js-module src="www/notification.js" name="notification"> 59.36 + <merges target="navigator.notification" /> 59.37 + </js-module> 59.38 + 59.39 + <!-- firefoxos --> 59.40 + <platform name="firefoxos"> 59.41 + <config-file target="config.xml" parent="/*"> 59.42 + <feature name="Notification"> 59.43 + <param name="firefoxos-package" value="Notification" /> 59.44 + </feature> 59.45 + </config-file> 59.46 + 59.47 + <asset src="www/firefoxos/notification.css" target="css/notification.css" /> 59.48 + <asset src="www/firefoxos/danger-press.png" target="img/danger-press.png" /> 59.49 + <asset src="www/firefoxos/danger.png" target="img/danger.png" /> 59.50 + <asset src="www/firefoxos/default.png" target="img/default.png" /> 59.51 + <asset src="www/firefoxos/gradient.png" target="img/gradient.png" /> 59.52 + <asset src="www/firefoxos/pattern.png" target="img/pattern.png" /> 59.53 + <asset src="www/firefoxos/recommend.png" target="img/recommend.png" /> 59.54 + <js-module src="src/firefoxos/notification.js" name="dialogs-impl"> 59.55 + <runs /> 59.56 + </js-module> 59.57 + </platform> 59.58 + 59.59 + <!-- android --> 59.60 + <platform name="android"> 59.61 + <config-file target="res/xml/config.xml" parent="/*"> 59.62 + <feature name="Notification"> 59.63 + <param name="android-package" value="org.apache.cordova.dialogs.Notification"/> 59.64 + </feature> 59.65 + </config-file> 59.66 + 59.67 + <source-file src="src/android/Notification.java" target-dir="src/org/apache/cordova/dialogs" /> 59.68 + 59.69 + <!-- android specific notification apis --> 59.70 + <js-module src="www/android/notification.js" name="notification_android"> 59.71 + <merges target="navigator.notification" /> 59.72 + </js-module> 59.73 + 59.74 + </platform> 59.75 + 59.76 + <!-- amazon-fireos --> 59.77 + <platform name="amazon-fireos"> 59.78 + <config-file target="res/xml/config.xml" parent="/*"> 59.79 + <feature name="Notification"> 59.80 + <param name="android-package" value="org.apache.cordova.dialogs.Notification"/> 59.81 + </feature> 59.82 + </config-file> 59.83 + 59.84 + <source-file src="src/android/Notification.java" target-dir="src/org/apache/cordova/dialogs" /> 59.85 + 59.86 + <!-- android specific notification apis --> 59.87 + <js-module src="www/android/notification.js" name="notification_android"> 59.88 + <merges target="navigator.notification" /> 59.89 + </js-module> 59.90 + 59.91 + </platform> 59.92 + 59.93 + <!-- ubuntu --> 59.94 + <platform name="ubuntu"> 59.95 + <header-file src="src/ubuntu/notification.h" /> 59.96 + <source-file src="src/ubuntu/notification.cpp" /> 59.97 + <resource-file src="src/ubuntu/notification.qml" /> 59.98 + </platform> 59.99 + 59.100 + <!-- ios --> 59.101 + <platform name="ios"> 59.102 + <config-file target="config.xml" parent="/*"> 59.103 + <feature name="Notification"> 59.104 + <param name="ios-package" value="CDVNotification"/> 59.105 + </feature> 59.106 + </config-file> 59.107 + <header-file src="src/ios/CDVNotification.h" /> 59.108 + <source-file src="src/ios/CDVNotification.m" /> 59.109 + <resource-file src="src/ios/CDVNotification.bundle" /> 59.110 + <framework src="AudioToolbox.framework" weak="true" /> 59.111 + </platform> 59.112 + 59.113 + <!-- blackberry10 --> 59.114 + <platform name="blackberry10"> 59.115 + <source-file src="src/blackberry10/index.js" target-dir="Notification" /> 59.116 + <config-file target="www/config.xml" parent="/widget"> 59.117 + <feature name="Notification" value="Notification"/> 59.118 + </config-file> 59.119 + <js-module src="www/blackberry10/beep.js" name="beep"> 59.120 + <clobbers target="window.navigator.notification.beep" /> 59.121 + </js-module> 59.122 + <source-file src="www/blackberry10/notification-beep.wav" /> 59.123 + </platform> 59.124 + 59.125 + <!-- wp7 --> 59.126 + <platform name="wp7"> 59.127 + <config-file target="config.xml" parent="/*"> 59.128 + <feature name="Notification"> 59.129 + <param name="wp-package" value="Notification"/> 59.130 + </feature> 59.131 + </config-file> 59.132 + 59.133 + <source-file src="src/wp/Notification.cs" /> 59.134 + <source-file src="src/wp/NotificationBox.xaml.cs" /> 59.135 + <source-file src="src/wp/NotificationBox.xaml" /> 59.136 + <source-file src="src/wp/notification-beep.wav" /> 59.137 + </platform> 59.138 + 59.139 + <!-- wp8 --> 59.140 + <platform name="wp8"> 59.141 + <config-file target="config.xml" parent="/*"> 59.142 + <feature name="Notification"> 59.143 + <param name="wp-package" value="Notification"/> 59.144 + </feature> 59.145 + </config-file> 59.146 + 59.147 + <source-file src="src/wp/Notification.cs" /> 59.148 + <source-file src="src/wp/NotificationBox.xaml.cs" /> 59.149 + <source-file src="src/wp/NotificationBox.xaml" /> 59.150 + <source-file src="src/wp/notification-beep.wav" /> 59.151 + </platform> 59.152 + 59.153 + <!-- windows8 --> 59.154 + <platform name="windows8"> 59.155 + <js-module src="src/windows8/NotificationProxy.js" name="NotificationProxy"> 59.156 + <merges target="" /> 59.157 + </js-module> 59.158 + </platform> 59.159 + 59.160 +</plugin>
60.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 60.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/android/Notification.java Thu Jun 04 14:50:33 2015 +0200 60.3 @@ -0,0 +1,483 @@ 60.4 +/* 60.5 + Licensed to the Apache Software Foundation (ASF) under one 60.6 + or more contributor license agreements. See the NOTICE file 60.7 + distributed with this work for additional information 60.8 + regarding copyright ownership. The ASF licenses this file 60.9 + to you under the Apache License, Version 2.0 (the 60.10 + "License"); you may not use this file except in compliance 60.11 + with the License. You may obtain a copy of the License at 60.12 + 60.13 + http://www.apache.org/licenses/LICENSE-2.0 60.14 + 60.15 + Unless required by applicable law or agreed to in writing, 60.16 + software distributed under the License is distributed on an 60.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 60.18 + KIND, either express or implied. See the License for the 60.19 + specific language governing permissions and limitations 60.20 + under the License. 60.21 +*/ 60.22 +package org.apache.cordova.dialogs; 60.23 + 60.24 +import org.apache.cordova.CallbackContext; 60.25 +import org.apache.cordova.CordovaInterface; 60.26 +import org.apache.cordova.CordovaPlugin; 60.27 +import org.apache.cordova.PluginResult; 60.28 +import org.json.JSONArray; 60.29 +import org.json.JSONException; 60.30 +import org.json.JSONObject; 60.31 + 60.32 +import android.annotation.SuppressLint; 60.33 +import android.app.AlertDialog; 60.34 +import android.app.AlertDialog.Builder; 60.35 +import android.app.ProgressDialog; 60.36 +import android.content.DialogInterface; 60.37 +import android.media.Ringtone; 60.38 +import android.media.RingtoneManager; 60.39 +import android.net.Uri; 60.40 +import android.widget.EditText; 60.41 +import android.widget.TextView; 60.42 + 60.43 + 60.44 +/** 60.45 + * This class provides access to notifications on the device. 60.46 + * 60.47 + * Be aware that this implementation gets called on 60.48 + * navigator.notification.{alert|confirm|prompt}, and that there is a separate 60.49 + * implementation in org.apache.cordova.CordovaChromeClient that gets 60.50 + * called on a simple window.{alert|confirm|prompt}. 60.51 + */ 60.52 +public class Notification extends CordovaPlugin { 60.53 + 60.54 + public int confirmResult = -1; 60.55 + public ProgressDialog spinnerDialog = null; 60.56 + public ProgressDialog progressDialog = null; 60.57 + 60.58 + /** 60.59 + * Constructor. 60.60 + */ 60.61 + public Notification() { 60.62 + } 60.63 + 60.64 + /** 60.65 + * Executes the request and returns PluginResult. 60.66 + * 60.67 + * @param action The action to execute. 60.68 + * @param args JSONArray of arguments for the plugin. 60.69 + * @param callbackContext The callback context used when calling back into JavaScript. 60.70 + * @return True when the action was valid, false otherwise. 60.71 + */ 60.72 + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 60.73 + /* 60.74 + * Don't run any of these if the current activity is finishing 60.75 + * in order to avoid android.view.WindowManager$BadTokenException 60.76 + * crashing the app. Just return true here since false should only 60.77 + * be returned in the event of an invalid action. 60.78 + */ 60.79 + if(this.cordova.getActivity().isFinishing()) return true; 60.80 + 60.81 + if (action.equals("beep")) { 60.82 + this.beep(args.getLong(0)); 60.83 + } 60.84 + else if (action.equals("alert")) { 60.85 + this.alert(args.getString(0), args.getString(1), args.getString(2), callbackContext); 60.86 + return true; 60.87 + } 60.88 + else if (action.equals("confirm")) { 60.89 + this.confirm(args.getString(0), args.getString(1), args.getJSONArray(2), callbackContext); 60.90 + return true; 60.91 + } 60.92 + else if (action.equals("prompt")) { 60.93 + this.prompt(args.getString(0), args.getString(1), args.getJSONArray(2), args.getString(3), callbackContext); 60.94 + return true; 60.95 + } 60.96 + else if (action.equals("activityStart")) { 60.97 + this.activityStart(args.getString(0), args.getString(1)); 60.98 + } 60.99 + else if (action.equals("activityStop")) { 60.100 + this.activityStop(); 60.101 + } 60.102 + else if (action.equals("progressStart")) { 60.103 + this.progressStart(args.getString(0), args.getString(1)); 60.104 + } 60.105 + else if (action.equals("progressValue")) { 60.106 + this.progressValue(args.getInt(0)); 60.107 + } 60.108 + else if (action.equals("progressStop")) { 60.109 + this.progressStop(); 60.110 + } 60.111 + else { 60.112 + return false; 60.113 + } 60.114 + 60.115 + // Only alert and confirm are async. 60.116 + callbackContext.success(); 60.117 + return true; 60.118 + } 60.119 + 60.120 + //-------------------------------------------------------------------------- 60.121 + // LOCAL METHODS 60.122 + //-------------------------------------------------------------------------- 60.123 + 60.124 + /** 60.125 + * Beep plays the default notification ringtone. 60.126 + * 60.127 + * @param count Number of times to play notification 60.128 + */ 60.129 + public void beep(final long count) { 60.130 + cordova.getThreadPool().execute(new Runnable() { 60.131 + public void run() { 60.132 + Uri ringtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 60.133 + Ringtone notification = RingtoneManager.getRingtone(cordova.getActivity().getBaseContext(), ringtone); 60.134 + 60.135 + // If phone is not set to silent mode 60.136 + if (notification != null) { 60.137 + for (long i = 0; i < count; ++i) { 60.138 + notification.play(); 60.139 + long timeout = 5000; 60.140 + while (notification.isPlaying() && (timeout > 0)) { 60.141 + timeout = timeout - 100; 60.142 + try { 60.143 + Thread.sleep(100); 60.144 + } catch (InterruptedException e) { 60.145 + } 60.146 + } 60.147 + } 60.148 + } 60.149 + } 60.150 + }); 60.151 + } 60.152 + 60.153 + /** 60.154 + * Builds and shows a native Android alert with given Strings 60.155 + * @param message The message the alert should display 60.156 + * @param title The title of the alert 60.157 + * @param buttonLabel The label of the button 60.158 + * @param callbackContext The callback context 60.159 + */ 60.160 + public synchronized void alert(final String message, final String title, final String buttonLabel, final CallbackContext callbackContext) { 60.161 + final CordovaInterface cordova = this.cordova; 60.162 + 60.163 + Runnable runnable = new Runnable() { 60.164 + public void run() { 60.165 + 60.166 + AlertDialog.Builder dlg = createDialog(cordova); // new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 60.167 + dlg.setMessage(message); 60.168 + dlg.setTitle(title); 60.169 + dlg.setCancelable(true); 60.170 + dlg.setPositiveButton(buttonLabel, 60.171 + new AlertDialog.OnClickListener() { 60.172 + public void onClick(DialogInterface dialog, int which) { 60.173 + dialog.dismiss(); 60.174 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0)); 60.175 + } 60.176 + }); 60.177 + dlg.setOnCancelListener(new AlertDialog.OnCancelListener() { 60.178 + public void onCancel(DialogInterface dialog) 60.179 + { 60.180 + dialog.dismiss(); 60.181 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0)); 60.182 + } 60.183 + }); 60.184 + 60.185 + changeTextDirection(dlg); 60.186 + }; 60.187 + }; 60.188 + this.cordova.getActivity().runOnUiThread(runnable); 60.189 + } 60.190 + 60.191 + /** 60.192 + * Builds and shows a native Android confirm dialog with given title, message, buttons. 60.193 + * This dialog only shows up to 3 buttons. Any labels after that will be ignored. 60.194 + * The index of the button pressed will be returned to the JavaScript callback identified by callbackId. 60.195 + * 60.196 + * @param message The message the dialog should display 60.197 + * @param title The title of the dialog 60.198 + * @param buttonLabels A comma separated list of button labels (Up to 3 buttons) 60.199 + * @param callbackContext The callback context. 60.200 + */ 60.201 + public synchronized void confirm(final String message, final String title, final JSONArray buttonLabels, final CallbackContext callbackContext) { 60.202 + final CordovaInterface cordova = this.cordova; 60.203 + 60.204 + Runnable runnable = new Runnable() { 60.205 + public void run() { 60.206 + AlertDialog.Builder dlg = createDialog(cordova); // new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 60.207 + dlg.setMessage(message); 60.208 + dlg.setTitle(title); 60.209 + dlg.setCancelable(true); 60.210 + 60.211 + // First button 60.212 + if (buttonLabels.length() > 0) { 60.213 + try { 60.214 + dlg.setNegativeButton(buttonLabels.getString(0), 60.215 + new AlertDialog.OnClickListener() { 60.216 + public void onClick(DialogInterface dialog, int which) { 60.217 + dialog.dismiss(); 60.218 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 1)); 60.219 + } 60.220 + }); 60.221 + } catch (JSONException e) { } 60.222 + } 60.223 + 60.224 + // Second button 60.225 + if (buttonLabels.length() > 1) { 60.226 + try { 60.227 + dlg.setNeutralButton(buttonLabels.getString(1), 60.228 + new AlertDialog.OnClickListener() { 60.229 + public void onClick(DialogInterface dialog, int which) { 60.230 + dialog.dismiss(); 60.231 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 2)); 60.232 + } 60.233 + }); 60.234 + } catch (JSONException e) { } 60.235 + } 60.236 + 60.237 + // Third button 60.238 + if (buttonLabels.length() > 2) { 60.239 + try { 60.240 + dlg.setPositiveButton(buttonLabels.getString(2), 60.241 + new AlertDialog.OnClickListener() { 60.242 + public void onClick(DialogInterface dialog, int which) { 60.243 + dialog.dismiss(); 60.244 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 3)); 60.245 + } 60.246 + }); 60.247 + } catch (JSONException e) { } 60.248 + } 60.249 + dlg.setOnCancelListener(new AlertDialog.OnCancelListener() { 60.250 + public void onCancel(DialogInterface dialog) 60.251 + { 60.252 + dialog.dismiss(); 60.253 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, 0)); 60.254 + } 60.255 + }); 60.256 + 60.257 + changeTextDirection(dlg); 60.258 + }; 60.259 + }; 60.260 + this.cordova.getActivity().runOnUiThread(runnable); 60.261 + } 60.262 + 60.263 + /** 60.264 + * Builds and shows a native Android prompt dialog with given title, message, buttons. 60.265 + * This dialog only shows up to 3 buttons. Any labels after that will be ignored. 60.266 + * The following results are returned to the JavaScript callback identified by callbackId: 60.267 + * buttonIndex Index number of the button selected 60.268 + * input1 The text entered in the prompt dialog box 60.269 + * 60.270 + * @param message The message the dialog should display 60.271 + * @param title The title of the dialog 60.272 + * @param buttonLabels A comma separated list of button labels (Up to 3 buttons) 60.273 + * @param callbackContext The callback context. 60.274 + */ 60.275 + public synchronized void prompt(final String message, final String title, final JSONArray buttonLabels, final String defaultText, final CallbackContext callbackContext) { 60.276 + 60.277 + final CordovaInterface cordova = this.cordova; 60.278 + 60.279 + Runnable runnable = new Runnable() { 60.280 + public void run() { 60.281 + final EditText promptInput = new EditText(cordova.getActivity()); 60.282 + promptInput.setHint(defaultText); 60.283 + AlertDialog.Builder dlg = createDialog(cordova); // new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 60.284 + dlg.setMessage(message); 60.285 + dlg.setTitle(title); 60.286 + dlg.setCancelable(true); 60.287 + 60.288 + dlg.setView(promptInput); 60.289 + 60.290 + final JSONObject result = new JSONObject(); 60.291 + 60.292 + // First button 60.293 + if (buttonLabels.length() > 0) { 60.294 + try { 60.295 + dlg.setNegativeButton(buttonLabels.getString(0), 60.296 + new AlertDialog.OnClickListener() { 60.297 + public void onClick(DialogInterface dialog, int which) { 60.298 + dialog.dismiss(); 60.299 + try { 60.300 + result.put("buttonIndex",1); 60.301 + result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText()); 60.302 + } catch (JSONException e) { e.printStackTrace(); } 60.303 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 60.304 + } 60.305 + }); 60.306 + } catch (JSONException e) { } 60.307 + } 60.308 + 60.309 + // Second button 60.310 + if (buttonLabels.length() > 1) { 60.311 + try { 60.312 + dlg.setNeutralButton(buttonLabels.getString(1), 60.313 + new AlertDialog.OnClickListener() { 60.314 + public void onClick(DialogInterface dialog, int which) { 60.315 + dialog.dismiss(); 60.316 + try { 60.317 + result.put("buttonIndex",2); 60.318 + result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText()); 60.319 + } catch (JSONException e) { e.printStackTrace(); } 60.320 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 60.321 + } 60.322 + }); 60.323 + } catch (JSONException e) { } 60.324 + } 60.325 + 60.326 + // Third button 60.327 + if (buttonLabels.length() > 2) { 60.328 + try { 60.329 + dlg.setPositiveButton(buttonLabels.getString(2), 60.330 + new AlertDialog.OnClickListener() { 60.331 + public void onClick(DialogInterface dialog, int which) { 60.332 + dialog.dismiss(); 60.333 + try { 60.334 + result.put("buttonIndex",3); 60.335 + result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText()); 60.336 + } catch (JSONException e) { e.printStackTrace(); } 60.337 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 60.338 + } 60.339 + }); 60.340 + } catch (JSONException e) { } 60.341 + } 60.342 + dlg.setOnCancelListener(new AlertDialog.OnCancelListener() { 60.343 + public void onCancel(DialogInterface dialog){ 60.344 + dialog.dismiss(); 60.345 + try { 60.346 + result.put("buttonIndex",0); 60.347 + result.put("input1", promptInput.getText().toString().trim().length()==0 ? defaultText : promptInput.getText()); 60.348 + } catch (JSONException e) { e.printStackTrace(); } 60.349 + callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result)); 60.350 + } 60.351 + }); 60.352 + 60.353 + changeTextDirection(dlg); 60.354 + }; 60.355 + }; 60.356 + this.cordova.getActivity().runOnUiThread(runnable); 60.357 + } 60.358 + 60.359 + /** 60.360 + * Show the spinner. 60.361 + * 60.362 + * @param title Title of the dialog 60.363 + * @param message The message of the dialog 60.364 + */ 60.365 + public synchronized void activityStart(final String title, final String message) { 60.366 + if (this.spinnerDialog != null) { 60.367 + this.spinnerDialog.dismiss(); 60.368 + this.spinnerDialog = null; 60.369 + } 60.370 + final Notification notification = this; 60.371 + final CordovaInterface cordova = this.cordova; 60.372 + Runnable runnable = new Runnable() { 60.373 + public void run() { 60.374 + notification.spinnerDialog = createProgressDialog(cordova); // new ProgressDialog(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 60.375 + notification.spinnerDialog.setTitle(title); 60.376 + notification.spinnerDialog.setMessage(message); 60.377 + notification.spinnerDialog.setCancelable(true); 60.378 + notification.spinnerDialog.setIndeterminate(true); 60.379 + notification.spinnerDialog.setOnCancelListener( 60.380 + new DialogInterface.OnCancelListener() { 60.381 + public void onCancel(DialogInterface dialog) { 60.382 + notification.spinnerDialog = null; 60.383 + } 60.384 + }); 60.385 + notification.spinnerDialog.show(); 60.386 + } 60.387 + }; 60.388 + this.cordova.getActivity().runOnUiThread(runnable); 60.389 + } 60.390 + 60.391 + /** 60.392 + * Stop spinner. 60.393 + */ 60.394 + public synchronized void activityStop() { 60.395 + if (this.spinnerDialog != null) { 60.396 + this.spinnerDialog.dismiss(); 60.397 + this.spinnerDialog = null; 60.398 + } 60.399 + } 60.400 + 60.401 + /** 60.402 + * Show the progress dialog. 60.403 + * 60.404 + * @param title Title of the dialog 60.405 + * @param message The message of the dialog 60.406 + */ 60.407 + public synchronized void progressStart(final String title, final String message) { 60.408 + if (this.progressDialog != null) { 60.409 + this.progressDialog.dismiss(); 60.410 + this.progressDialog = null; 60.411 + } 60.412 + final Notification notification = this; 60.413 + final CordovaInterface cordova = this.cordova; 60.414 + Runnable runnable = new Runnable() { 60.415 + public void run() { 60.416 + notification.progressDialog = createProgressDialog(cordova); // new ProgressDialog(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 60.417 + notification.progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 60.418 + notification.progressDialog.setTitle(title); 60.419 + notification.progressDialog.setMessage(message); 60.420 + notification.progressDialog.setCancelable(true); 60.421 + notification.progressDialog.setMax(100); 60.422 + notification.progressDialog.setProgress(0); 60.423 + notification.progressDialog.setOnCancelListener( 60.424 + new DialogInterface.OnCancelListener() { 60.425 + public void onCancel(DialogInterface dialog) { 60.426 + notification.progressDialog = null; 60.427 + } 60.428 + }); 60.429 + notification.progressDialog.show(); 60.430 + } 60.431 + }; 60.432 + this.cordova.getActivity().runOnUiThread(runnable); 60.433 + } 60.434 + 60.435 + /** 60.436 + * Set value of progress bar. 60.437 + * 60.438 + * @param value 0-100 60.439 + */ 60.440 + public synchronized void progressValue(int value) { 60.441 + if (this.progressDialog != null) { 60.442 + this.progressDialog.setProgress(value); 60.443 + } 60.444 + } 60.445 + 60.446 + /** 60.447 + * Stop progress dialog. 60.448 + */ 60.449 + public synchronized void progressStop() { 60.450 + if (this.progressDialog != null) { 60.451 + this.progressDialog.dismiss(); 60.452 + this.progressDialog = null; 60.453 + } 60.454 + } 60.455 + 60.456 + @SuppressLint("NewApi") 60.457 + private AlertDialog.Builder createDialog(CordovaInterface cordova) { 60.458 + int currentapiVersion = android.os.Build.VERSION.SDK_INT; 60.459 + if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) { 60.460 + return new AlertDialog.Builder(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 60.461 + } else { 60.462 + return new AlertDialog.Builder(cordova.getActivity()); 60.463 + } 60.464 + } 60.465 + 60.466 + @SuppressLint("InlinedApi") 60.467 + private ProgressDialog createProgressDialog(CordovaInterface cordova) { 60.468 + int currentapiVersion = android.os.Build.VERSION.SDK_INT; 60.469 + if (currentapiVersion >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 60.470 + return new ProgressDialog(cordova.getActivity(), AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 60.471 + } else { 60.472 + return new ProgressDialog(cordova.getActivity()); 60.473 + } 60.474 + } 60.475 + 60.476 + @SuppressLint("NewApi") 60.477 + private void changeTextDirection(Builder dlg){ 60.478 + int currentapiVersion = android.os.Build.VERSION.SDK_INT; 60.479 + dlg.create(); 60.480 + AlertDialog dialog = dlg.show(); 60.481 + if (currentapiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { 60.482 + TextView messageview = (TextView)dialog.findViewById(android.R.id.message); 60.483 + messageview.setTextDirection(android.view.View.TEXT_DIRECTION_LOCALE); 60.484 + } 60.485 + } 60.486 +}
61.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 61.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/blackberry10/index.js Thu Jun 04 14:50:33 2015 +0200 61.3 @@ -0,0 +1,87 @@ 61.4 +/* 61.5 +* Copyright 2013 Research In Motion Limited. 61.6 +* 61.7 +* Licensed under the Apache License, Version 2.0 (the "License"); 61.8 +* you may not use this file except in compliance with the License. 61.9 +* You may obtain a copy of the License at 61.10 +* 61.11 +* http://www.apache.org/licenses/LICENSE-2.0 61.12 +* 61.13 +* Unless required by applicable law or agreed to in writing, software 61.14 +* distributed under the License is distributed on an "AS IS" BASIS, 61.15 +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 61.16 +* See the License for the specific language governing permissions and 61.17 +* limitations under the License. 61.18 +*/ 61.19 + 61.20 +function showDialog(args, dialogType, result) { 61.21 + //Unpack and map the args 61.22 + var msg = JSON.parse(decodeURIComponent(args[0])), 61.23 + title = JSON.parse(decodeURIComponent(args[1])), 61.24 + btnLabel = JSON.parse(decodeURIComponent(args[2])); 61.25 + 61.26 + if (!Array.isArray(btnLabel)) { 61.27 + //Converts to array for (string) and (string,string, ...) cases 61.28 + btnLabel = btnLabel.split(","); 61.29 + } 61.30 + 61.31 + if (msg && typeof msg === "string") { 61.32 + msg = msg.replace(/^"|"$/g, "").replace(/\\"/g, '"'); 61.33 + } else { 61.34 + result.error("message is undefined"); 61.35 + return; 61.36 + } 61.37 + 61.38 + var messageObj = { 61.39 + title : title, 61.40 + htmlmessage : msg, 61.41 + dialogType : dialogType, 61.42 + optionalButtons : btnLabel 61.43 + }; 61.44 + 61.45 + //TODO replace with getOverlayWebview() when available in webplatform 61.46 + qnx.webplatform.getWebViews()[2].dialog.show(messageObj, function (data) { 61.47 + if (typeof data === "number") { 61.48 + //Confirm dialog call back needs to be called with one-based indexing [1,2,3 etc] 61.49 + result.callbackOk(++data, false); 61.50 + } else { 61.51 + //Prompt dialog callback expects object 61.52 + result.callbackOk({ 61.53 + buttonIndex: data.ok ? 1 : 0, 61.54 + input1: (data.oktext) ? decodeURIComponent(data.oktext) : "" 61.55 + }, false); 61.56 + } 61.57 + }); 61.58 + 61.59 + result.noResult(true); 61.60 +} 61.61 + 61.62 +module.exports = { 61.63 + alert: function (success, fail, args, env) { 61.64 + var result = new PluginResult(args, env); 61.65 + 61.66 + if (Object.keys(args).length < 3) { 61.67 + result.error("Notification action - alert arguments not found."); 61.68 + } else { 61.69 + showDialog(args, "CustomAsk", result); 61.70 + } 61.71 + }, 61.72 + confirm: function (success, fail, args, env) { 61.73 + var result = new PluginResult(args, env); 61.74 + 61.75 + if (Object.keys(args).length < 3) { 61.76 + result.error("Notification action - confirm arguments not found."); 61.77 + } else { 61.78 + showDialog(args, "CustomAsk", result); 61.79 + } 61.80 + }, 61.81 + prompt: function (success, fail, args, env) { 61.82 + var result = new PluginResult(args, env); 61.83 + 61.84 + if (Object.keys(args).length < 3) { 61.85 + result.error("Notification action - prompt arguments not found."); 61.86 + } else { 61.87 + showDialog(args, "JavaScriptPrompt", result); 61.88 + } 61.89 + } 61.90 +};
62.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 62.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/firefoxos/notification.js Thu Jun 04 14:50:33 2015 +0200 62.3 @@ -0,0 +1,154 @@ 62.4 +/* 62.5 + * 62.6 + * Licensed to the Apache Software Foundation (ASF) under one 62.7 + * or more contributor license agreements. See the NOTICE file 62.8 + * distributed with this work for additional information 62.9 + * regarding copyright ownership. The ASF licenses this file 62.10 + * to you under the Apache License, Version 2.0 (the 62.11 + * "License"); you may not use this file except in compliance 62.12 + * with the License. You may obtain a copy of the License at 62.13 + * 62.14 + * http://www.apache.org/licenses/LICENSE-2.0 62.15 + * 62.16 + * Unless required by applicable law or agreed to in writing, 62.17 + * software distributed under the License is distributed on an 62.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 62.19 + * KIND, either express or implied. See the License for the 62.20 + * specific language governing permissions and limitations 62.21 + * under the License. 62.22 + * 62.23 +*/ 62.24 + 62.25 +var modulemapper = require('cordova/modulemapper'); 62.26 + 62.27 + 62.28 +var origOpenFunc = modulemapper.getOriginalSymbol(window, 'window.open'); 62.29 + 62.30 + 62.31 +function _empty() {} 62.32 + 62.33 + 62.34 +function modal(message, callback, title, buttonLabels, domObjects) { 62.35 + var mainWindow = window; 62.36 + var modalWindow = origOpenFunc(); 62.37 + var modalDocument = modalWindow.document; 62.38 + 62.39 + modalDocument.write( 62.40 + '<html><head>' + 62.41 + '<link rel="stylesheet" type="text/css" href="/css/index.css" />' + 62.42 + '<link rel="stylesheet" type="text/css" href="/css/notification.css" />' + 62.43 + '</head><body></body></html>'); 62.44 + 62.45 + var box = modalDocument.createElement('form'); 62.46 + box.setAttribute('role', 'dialog'); 62.47 + // prepare and append empty section 62.48 + var section = modalDocument.createElement('section'); 62.49 + box.appendChild(section); 62.50 + // add title 62.51 + var boxtitle = modalDocument.createElement('h1'); 62.52 + boxtitle.appendChild(modalDocument.createTextNode(title)); 62.53 + section.appendChild(boxtitle); 62.54 + // add message 62.55 + var boxMessage = modalDocument.createElement('p'); 62.56 + boxMessage.appendChild(modalDocument.createTextNode(message)); 62.57 + section.appendChild(boxMessage); 62.58 + // inject what's needed 62.59 + if (domObjects) { 62.60 + section.appendChild(domObjects); 62.61 + } 62.62 + // add buttons and assign callbackButton on click 62.63 + var menu = modalDocument.createElement('menu'); 62.64 + box.appendChild(menu); 62.65 + for (var index = 0; index < buttonLabels.length; index++) { 62.66 + addButton(buttonLabels[index], index, (index === 0)); 62.67 + } 62.68 + modalDocument.body.appendChild(box); 62.69 + 62.70 + function addButton(label, index, recommended) { 62.71 + var thisButtonCallback = makeCallbackButton(index + 1); 62.72 + var button = modalDocument.createElement('button'); 62.73 + button.appendChild(modalDocument.createTextNode(label)); 62.74 + button.addEventListener('click', thisButtonCallback, false); 62.75 + if (recommended) { 62.76 + // TODO: default one listens to Enter key 62.77 + button.classList.add('recommend'); 62.78 + } 62.79 + menu.appendChild(button); 62.80 + } 62.81 + 62.82 + // TODO: onUnload listens to the cancel key 62.83 + function onUnload() { 62.84 + var result = 0; 62.85 + if (modalDocument.getElementById('prompt-input')) { 62.86 + result = { 62.87 + input1: '', 62.88 + buttonIndex: 0 62.89 + } 62.90 + } 62.91 + mainWindow.setTimeout(function() { 62.92 + callback(result); 62.93 + }, 10); 62.94 + }; 62.95 + modalWindow.addEventListener('unload', onUnload, false); 62.96 + 62.97 + // call callback and destroy modal 62.98 + function makeCallbackButton(labelIndex) { 62.99 + return function() { 62.100 + if (modalWindow) { 62.101 + modalWindow.removeEventListener('unload', onUnload, false); 62.102 + modalWindow.close(); 62.103 + } 62.104 + // checking if prompt 62.105 + var promptInput = modalDocument.getElementById('prompt-input'); 62.106 + var response; 62.107 + if (promptInput) { 62.108 + response = { 62.109 + input1: promptInput.value, 62.110 + buttonIndex: labelIndex 62.111 + }; 62.112 + } 62.113 + response = response || labelIndex; 62.114 + callback(response); 62.115 + } 62.116 + } 62.117 +} 62.118 + 62.119 +var Notification = { 62.120 + vibrate: function(milliseconds) { 62.121 + navigator.vibrate(milliseconds); 62.122 + }, 62.123 + alert: function(successCallback, errorCallback, args) { 62.124 + var message = args[0]; 62.125 + var title = args[1]; 62.126 + var _buttonLabels = [args[2]]; 62.127 + var _callback = (successCallback || _empty); 62.128 + modal(message, _callback, title, _buttonLabels); 62.129 + }, 62.130 + confirm: function(successCallback, errorCallback, args) { 62.131 + var message = args[0]; 62.132 + var title = args[1]; 62.133 + var buttonLabels = args[2]; 62.134 + var _callback = (successCallback || _empty); 62.135 + modal(message, _callback, title, buttonLabels); 62.136 + }, 62.137 + prompt: function(successCallback, errorCallback, args) { 62.138 + var message = args[0]; 62.139 + var title = args[1]; 62.140 + var buttonLabels = args[2]; 62.141 + var defaultText = args[3]; 62.142 + var inputParagraph = document.createElement('p'); 62.143 + inputParagraph.classList.add('input'); 62.144 + var inputElement = document.createElement('input'); 62.145 + inputElement.setAttribute('type', 'text'); 62.146 + inputElement.id = 'prompt-input'; 62.147 + if (defaultText) { 62.148 + inputElement.setAttribute('placeholder', defaultText); 62.149 + } 62.150 + inputParagraph.appendChild(inputElement); 62.151 + modal(message, successCallback, title, buttonLabels, inputParagraph); 62.152 + } 62.153 +}; 62.154 + 62.155 + 62.156 +module.exports = Notification; 62.157 +require('cordova/exec/proxy').add('Notification', Notification);
63.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.bundle/beep.wav has changed
64.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 64.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.h Thu Jun 04 14:50:33 2015 +0200 64.3 @@ -0,0 +1,37 @@ 64.4 +/* 64.5 + Licensed to the Apache Software Foundation (ASF) under one 64.6 + or more contributor license agreements. See the NOTICE file 64.7 + distributed with this work for additional information 64.8 + regarding copyright ownership. The ASF licenses this file 64.9 + to you under the Apache License, Version 2.0 (the 64.10 + "License"); you may not use this file except in compliance 64.11 + with the License. You may obtain a copy of the License at 64.12 + 64.13 + http://www.apache.org/licenses/LICENSE-2.0 64.14 + 64.15 + Unless required by applicable law or agreed to in writing, 64.16 + software distributed under the License is distributed on an 64.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 64.18 + KIND, either express or implied. See the License for the 64.19 + specific language governing permissions and limitations 64.20 + under the License. 64.21 + */ 64.22 + 64.23 +#import <Foundation/Foundation.h> 64.24 +#import <UIKit/UIKit.h> 64.25 +#import <AudioToolbox/AudioServices.h> 64.26 +#import <Cordova/CDVPlugin.h> 64.27 + 64.28 +@interface CDVNotification : CDVPlugin <UIAlertViewDelegate>{} 64.29 + 64.30 +- (void)alert:(CDVInvokedUrlCommand*)command; 64.31 +- (void)confirm:(CDVInvokedUrlCommand*)command; 64.32 +- (void)prompt:(CDVInvokedUrlCommand*)command; 64.33 +- (void)beep:(CDVInvokedUrlCommand*)command; 64.34 + 64.35 +@end 64.36 + 64.37 +@interface CDVAlertView : UIAlertView {} 64.38 +@property (nonatomic, copy) NSString* callbackId; 64.39 + 64.40 +@end
65.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 65.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ios/CDVNotification.m Thu Jun 04 14:50:33 2015 +0200 65.3 @@ -0,0 +1,157 @@ 65.4 +/* 65.5 + Licensed to the Apache Software Foundation (ASF) under one 65.6 + or more contributor license agreements. See the NOTICE file 65.7 + distributed with this work for additional information 65.8 + regarding copyright ownership. The ASF licenses this file 65.9 + to you under the Apache License, Version 2.0 (the 65.10 + "License"); you may not use this file except in compliance 65.11 + with the License. You may obtain a copy of the License at 65.12 + 65.13 + http://www.apache.org/licenses/LICENSE-2.0 65.14 + 65.15 + Unless required by applicable law or agreed to in writing, 65.16 + software distributed under the License is distributed on an 65.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 65.18 + KIND, either express or implied. See the License for the 65.19 + specific language governing permissions and limitations 65.20 + under the License. 65.21 + */ 65.22 + 65.23 +#import "CDVNotification.h" 65.24 +#import <Cordova/NSDictionary+Extensions.h> 65.25 +#import <Cordova/NSArray+Comparisons.h> 65.26 + 65.27 +#define DIALOG_TYPE_ALERT @"alert" 65.28 +#define DIALOG_TYPE_PROMPT @"prompt" 65.29 + 65.30 +static void soundCompletionCallback(SystemSoundID ssid, void* data); 65.31 + 65.32 +@implementation CDVNotification 65.33 + 65.34 +/* 65.35 + * showDialogWithMessage - Common method to instantiate the alert view for alert, confirm, and prompt notifications. 65.36 + * Parameters: 65.37 + * message The alert view message. 65.38 + * title The alert view title. 65.39 + * buttons The array of customized strings for the buttons. 65.40 + * defaultText The input text for the textbox (if textbox exists). 65.41 + * callbackId The commmand callback id. 65.42 + * dialogType The type of alert view [alert | prompt]. 65.43 + */ 65.44 +- (void)showDialogWithMessage:(NSString*)message title:(NSString*)title buttons:(NSArray*)buttons defaultText:(NSString*)defaultText callbackId:(NSString*)callbackId dialogType:(NSString*)dialogType 65.45 +{ 65.46 + CDVAlertView* alertView = [[CDVAlertView alloc] 65.47 + initWithTitle:title 65.48 + message:message 65.49 + delegate:self 65.50 + cancelButtonTitle:nil 65.51 + otherButtonTitles:nil]; 65.52 + 65.53 + alertView.callbackId = callbackId; 65.54 + 65.55 + NSUInteger count = [buttons count]; 65.56 + 65.57 + for (int n = 0; n < count; n++) { 65.58 + [alertView addButtonWithTitle:[buttons objectAtIndex:n]]; 65.59 + } 65.60 + 65.61 + if ([dialogType isEqualToString:DIALOG_TYPE_PROMPT]) { 65.62 + alertView.alertViewStyle = UIAlertViewStylePlainTextInput; 65.63 + UITextField* textField = [alertView textFieldAtIndex:0]; 65.64 + textField.text = defaultText; 65.65 + } 65.66 + 65.67 + [alertView show]; 65.68 +} 65.69 + 65.70 +- (void)alert:(CDVInvokedUrlCommand*)command 65.71 +{ 65.72 + NSString* callbackId = command.callbackId; 65.73 + NSString* message = [command argumentAtIndex:0]; 65.74 + NSString* title = [command argumentAtIndex:1]; 65.75 + NSString* buttons = [command argumentAtIndex:2]; 65.76 + 65.77 + [self showDialogWithMessage:message title:title buttons:@[buttons] defaultText:nil callbackId:callbackId dialogType:DIALOG_TYPE_ALERT]; 65.78 +} 65.79 + 65.80 +- (void)confirm:(CDVInvokedUrlCommand*)command 65.81 +{ 65.82 + NSString* callbackId = command.callbackId; 65.83 + NSString* message = [command argumentAtIndex:0]; 65.84 + NSString* title = [command argumentAtIndex:1]; 65.85 + NSArray* buttons = [command argumentAtIndex:2]; 65.86 + 65.87 + [self showDialogWithMessage:message title:title buttons:buttons defaultText:nil callbackId:callbackId dialogType:DIALOG_TYPE_ALERT]; 65.88 +} 65.89 + 65.90 +- (void)prompt:(CDVInvokedUrlCommand*)command 65.91 +{ 65.92 + NSString* callbackId = command.callbackId; 65.93 + NSString* message = [command argumentAtIndex:0]; 65.94 + NSString* title = [command argumentAtIndex:1]; 65.95 + NSArray* buttons = [command argumentAtIndex:2]; 65.96 + NSString* defaultText = [command argumentAtIndex:3]; 65.97 + 65.98 + [self showDialogWithMessage:message title:title buttons:buttons defaultText:defaultText callbackId:callbackId dialogType:DIALOG_TYPE_PROMPT]; 65.99 +} 65.100 + 65.101 +/** 65.102 + * Callback invoked when an alert dialog's buttons are clicked. 65.103 + */ 65.104 +- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 65.105 +{ 65.106 + CDVAlertView* cdvAlertView = (CDVAlertView*)alertView; 65.107 + CDVPluginResult* result; 65.108 + 65.109 + // Determine what gets returned to JS based on the alert view type. 65.110 + if (alertView.alertViewStyle == UIAlertViewStyleDefault) { 65.111 + // For alert and confirm, return button index as int back to JS. 65.112 + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)(buttonIndex + 1)]; 65.113 + } else { 65.114 + // For prompt, return button index and input text back to JS. 65.115 + NSString* value0 = [[alertView textFieldAtIndex:0] text]; 65.116 + NSDictionary* info = @{ 65.117 + @"buttonIndex":@(buttonIndex + 1), 65.118 + @"input1":(value0 ? value0 : [NSNull null]) 65.119 + }; 65.120 + result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:info]; 65.121 + } 65.122 + [self.commandDelegate sendPluginResult:result callbackId:cdvAlertView.callbackId]; 65.123 +} 65.124 + 65.125 +static void playBeep(int count) { 65.126 + SystemSoundID completeSound; 65.127 + NSInteger cbDataCount = count; 65.128 + NSURL* audioPath = [[NSBundle mainBundle] URLForResource:@"CDVNotification.bundle/beep" withExtension:@"wav"]; 65.129 + #if __has_feature(objc_arc) 65.130 + AudioServicesCreateSystemSoundID((__bridge CFURLRef)audioPath, &completeSound); 65.131 + #else 65.132 + AudioServicesCreateSystemSoundID((CFURLRef)audioPath, &completeSound); 65.133 + #endif 65.134 + AudioServicesAddSystemSoundCompletion(completeSound, NULL, NULL, soundCompletionCallback, (void*)(cbDataCount-1)); 65.135 + AudioServicesPlaySystemSound(completeSound); 65.136 +} 65.137 + 65.138 +static void soundCompletionCallback(SystemSoundID ssid, void* data) { 65.139 + int count = (int)data; 65.140 + AudioServicesRemoveSystemSoundCompletion (ssid); 65.141 + AudioServicesDisposeSystemSoundID(ssid); 65.142 + if (count > 0) { 65.143 + playBeep(count); 65.144 + } 65.145 +} 65.146 + 65.147 +- (void)beep:(CDVInvokedUrlCommand*)command 65.148 +{ 65.149 + NSNumber* count = [command.arguments objectAtIndex:0 withDefault:[NSNumber numberWithInt:1]]; 65.150 + playBeep([count intValue]); 65.151 +} 65.152 + 65.153 + 65.154 +@end 65.155 + 65.156 +@implementation CDVAlertView 65.157 + 65.158 +@synthesize callbackId; 65.159 + 65.160 +@end
66.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 66.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.cpp Thu Jun 04 14:50:33 2015 +0200 66.3 @@ -0,0 +1,85 @@ 66.4 +/* 66.5 + * 66.6 + * Licensed under the Apache License, Version 2.0 (the "License"); 66.7 + * you may not use this file except in compliance with the License. 66.8 + * You may obtain a copy of the License at 66.9 + * 66.10 + * http://www.apache.org/licenses/LICENSE-2.0 66.11 + * 66.12 + * Unless required by applicable law or agreed to in writing, software 66.13 + * distributed under the License is distributed on an "AS IS" BASIS, 66.14 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 66.15 + * See the License for the specific language governing permissions and 66.16 + * limitations under the License. 66.17 + */ 66.18 + 66.19 +#include "notification.h" 66.20 + 66.21 +#include <QApplication> 66.22 + 66.23 +void Dialogs::beep(int scId, int ecId, int times) { 66.24 + Q_UNUSED(scId) 66.25 + Q_UNUSED(ecId) 66.26 + Q_UNUSED(times) 66.27 + 66.28 + _player.setVolume(100); 66.29 + _player.setMedia(QUrl::fromLocalFile("/usr/share/sounds/ubuntu/stereo/bell.ogg")); 66.30 + _player.play(); 66.31 +} 66.32 + 66.33 +void Dialogs::alert(int scId, int ecId, const QString &message, const QString &title, const QString &buttonLabel) { 66.34 + QStringList list; 66.35 + list.append(buttonLabel); 66.36 + 66.37 + confirm(scId, ecId, message, title, list); 66.38 +} 66.39 + 66.40 +void Dialogs::confirm(int scId, int ecId, const QString &message, const QString &title, const QStringList &buttonLabels) { 66.41 + Q_UNUSED(ecId); 66.42 + 66.43 + if (_alertCallback) { 66.44 + qCritical() << "can't open second dialog"; 66.45 + return; 66.46 + } 66.47 + _alertCallback = scId; 66.48 + 66.49 + QString s1, s2, s3; 66.50 + if (buttonLabels.size() > 0) 66.51 + s1 = buttonLabels[0]; 66.52 + if (buttonLabels.size() > 1) 66.53 + s2 = buttonLabels[1]; 66.54 + if (buttonLabels.size() > 2) 66.55 + s3 = buttonLabels[2]; 66.56 + 66.57 + QString path = m_cordova->get_app_dir() + "/../qml/notification.qml"; 66.58 + QString qml = QString("PopupUtils.open(%1, root, { root: root, cordova: cordova, title: %2, text: %3, promptVisible: false, button1Text: %4, button2Text: %5, button3Text: %6 })") 66.59 + .arg(CordovaInternal::format(path)).arg(CordovaInternal::format(title)).arg(CordovaInternal::format(message)) 66.60 + .arg(CordovaInternal::format(s1)).arg(CordovaInternal::format(s2)).arg(CordovaInternal::format(s3)); 66.61 + 66.62 + m_cordova->execQML(qml); 66.63 +} 66.64 + 66.65 +void Dialogs::prompt(int scId, int ecId, const QString &message, const QString &title, const QStringList &buttonLabels, const QString &defaultText) { 66.66 + Q_UNUSED(ecId); 66.67 + 66.68 + if (_alertCallback) { 66.69 + qCritical() << "can't open second dialog"; 66.70 + return; 66.71 + } 66.72 + _alertCallback = scId; 66.73 + 66.74 + QString s1, s2, s3; 66.75 + if (buttonLabels.size() > 0) 66.76 + s1 = buttonLabels[0]; 66.77 + if (buttonLabels.size() > 1) 66.78 + s2 = buttonLabels[1]; 66.79 + if (buttonLabels.size() > 2) 66.80 + s3 = buttonLabels[2]; 66.81 + QString path = m_cordova->get_app_dir() + "/../qml/notification.qml"; 66.82 + QString qml = QString("PopupUtils.open(%1, root, { root: root, cordova: cordova, title: %2, text: %3, promptVisible: true, defaultPromptText: %7, button1Text: %4, button2Text: %5, button3Text: %6 })") 66.83 + .arg(CordovaInternal::format(path)).arg(CordovaInternal::format(title)).arg(CordovaInternal::format(message)) 66.84 + .arg(CordovaInternal::format(s1)).arg(CordovaInternal::format(s2)) 66.85 + .arg(CordovaInternal::format(s3)).arg(CordovaInternal::format(defaultText)); 66.86 + 66.87 + m_cordova->execQML(qml); 66.88 +}
67.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 67.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.h Thu Jun 04 14:50:33 2015 +0200 67.3 @@ -0,0 +1,64 @@ 67.4 +/* 67.5 + * 67.6 + * Licensed under the Apache License, Version 2.0 (the "License"); 67.7 + * you may not use this file except in compliance with the License. 67.8 + * You may obtain a copy of the License at 67.9 + * 67.10 + * http://www.apache.org/licenses/LICENSE-2.0 67.11 + * 67.12 + * Unless required by applicable law or agreed to in writing, software 67.13 + * distributed under the License is distributed on an "AS IS" BASIS, 67.14 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 67.15 + * See the License for the specific language governing permissions and 67.16 + * limitations under the License. 67.17 + */ 67.18 + 67.19 +#ifndef NOTIFICATION_H 67.20 +#define NOTIFICATION_H 67.21 + 67.22 +#include <QtQuick> 67.23 +#include <QMediaPlayer> 67.24 +#include <cplugin.h> 67.25 +#include <cordova.h> 67.26 + 67.27 +class Dialogs: public CPlugin { 67.28 + Q_OBJECT 67.29 +public: 67.30 + explicit Dialogs(Cordova *cordova): CPlugin(cordova), _alertCallback(0) { 67.31 + } 67.32 + 67.33 + virtual const QString fullName() override { 67.34 + return Dialogs::fullID(); 67.35 + } 67.36 + 67.37 + virtual const QString shortName() override { 67.38 + return "Notification"; 67.39 + } 67.40 + 67.41 + static const QString fullID() { 67.42 + return "Notification"; 67.43 + } 67.44 +public slots: 67.45 + void beep(int scId, int ecId, int times); 67.46 + void alert(int scId, int ecId, const QString &message, const QString &title, const QString &buttonLabel); 67.47 + void confirm(int scId, int ecId, const QString &message, const QString &title, const QStringList &buttonLabels); 67.48 + void prompt(int scId, int ecId, const QString &message, const QString &title, const QStringList &buttonLabels, const QString &defaultText); 67.49 + 67.50 + void notificationDialogButtonPressed(int buttonId, const QString &text, bool prompt) { 67.51 + if (prompt) { 67.52 + QVariantMap res; 67.53 + res.insert("buttonIndex", buttonId); 67.54 + res.insert("input1", text); 67.55 + this->cb(_alertCallback, res); 67.56 + } else { 67.57 + this->cb(_alertCallback, buttonId); 67.58 + } 67.59 + _alertCallback = 0; 67.60 + } 67.61 + 67.62 +private: 67.63 + int _alertCallback; 67.64 + QMediaPlayer _player; 67.65 +}; 67.66 + 67.67 +#endif
68.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 68.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/ubuntu/notification.qml Thu Jun 04 14:50:33 2015 +0200 68.3 @@ -0,0 +1,65 @@ 68.4 +/* 68.5 + * 68.6 + * Licensed to the Apache Software Foundation (ASF) under one 68.7 + * or more contributor license agreements. See the NOTICE file 68.8 + * distributed with this work for additional information 68.9 + * regarding copyright ownership. The ASF licenses this file 68.10 + * to you under the Apache License, Version 2.0 (the 68.11 + * "License"); you may not use this file except in compliance 68.12 + * with the License. You may obtain a copy of the License at 68.13 + * 68.14 + * http://www.apache.org/licenses/LICENSE-2.0 68.15 + * 68.16 + * Unless required by applicable law or agreed to in writing, 68.17 + * software distributed under the License is distributed on an 68.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 68.19 + * KIND, either express or implied. See the License for the 68.20 + * specific language governing permissions and limitations 68.21 + * under the License. 68.22 + * 68.23 +*/ 68.24 + 68.25 +import QtQuick 2.0 68.26 +import Ubuntu.Components.Popups 0.1 68.27 +import Ubuntu.Components 0.1 68.28 + 68.29 +Dialog { 68.30 + id: dialogue 68.31 + property string button1Text 68.32 + property string button2Text 68.33 + property string button3Text 68.34 + property bool promptVisible 68.35 + property string defaultPromptText 68.36 + 68.37 + TextField { 68.38 + id: prompt 68.39 + text: defaultPromptText 68.40 + visible: promptVisible 68.41 + focus: true 68.42 + } 68.43 + Button { 68.44 + text: button1Text 68.45 + color: "orange" 68.46 + onClicked: { 68.47 + root.exec("Notification", "notificationDialogButtonPressed", [1, prompt.text, promptVisible]); 68.48 + PopupUtils.close(dialogue) 68.49 + } 68.50 + } 68.51 + Button { 68.52 + text: button2Text 68.53 + visible: button2Text.length > 0 68.54 + color: "orange" 68.55 + onClicked: { 68.56 + root.exec("Notification", "notificationDialogButtonPressed", [2, prompt.text, promptVisible]); 68.57 + PopupUtils.close(dialogue) 68.58 + } 68.59 + } 68.60 + Button { 68.61 + text: button3Text 68.62 + visible: button3Text.length > 0 68.63 + onClicked: { 68.64 + root.exec("Notification", "notificationDialogButtonPressed", [3, prompt.text, promptVisible]); 68.65 + PopupUtils.close(dialogue) 68.66 + } 68.67 + } 68.68 +}
69.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 69.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/windows8/NotificationProxy.js Thu Jun 04 14:50:33 2015 +0200 69.3 @@ -0,0 +1,126 @@ 69.4 +/* 69.5 + * 69.6 + * Licensed to the Apache Software Foundation (ASF) under one 69.7 + * or more contributor license agreements. See the NOTICE file 69.8 + * distributed with this work for additional information 69.9 + * regarding copyright ownership. The ASF licenses this file 69.10 + * to you under the Apache License, Version 2.0 (the 69.11 + * "License"); you may not use this file except in compliance 69.12 + * with the License. You may obtain a copy of the License at 69.13 + * 69.14 + * http://www.apache.org/licenses/LICENSE-2.0 69.15 + * 69.16 + * Unless required by applicable law or agreed to in writing, 69.17 + * software distributed under the License is distributed on an 69.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 69.19 + * KIND, either express or implied. See the License for the 69.20 + * specific language governing permissions and limitations 69.21 + * under the License. 69.22 + * 69.23 +*/ 69.24 + 69.25 +/*global Windows:true */ 69.26 + 69.27 +var cordova = require('cordova'); 69.28 + 69.29 +var isAlertShowing = false; 69.30 +var alertStack = []; 69.31 + 69.32 +module.exports = { 69.33 + alert:function(win, loseX, args) { 69.34 + 69.35 + if (isAlertShowing) { 69.36 + var later = function () { 69.37 + module.exports.alert(win, loseX, args); 69.38 + }; 69.39 + alertStack.push(later); 69.40 + return; 69.41 + } 69.42 + isAlertShowing = true; 69.43 + 69.44 + var message = args[0]; 69.45 + var _title = args[1]; 69.46 + var _buttonLabel = args[2]; 69.47 + 69.48 + var md = new Windows.UI.Popups.MessageDialog(message, _title); 69.49 + md.commands.append(new Windows.UI.Popups.UICommand(_buttonLabel)); 69.50 + md.showAsync().then(function() { 69.51 + isAlertShowing = false; 69.52 + win && win(); 69.53 + 69.54 + if (alertStack.length) { 69.55 + setTimeout(alertStack.shift(), 0); 69.56 + } 69.57 + 69.58 + }); 69.59 + }, 69.60 + 69.61 + confirm:function(win, loseX, args) { 69.62 + 69.63 + if (isAlertShowing) { 69.64 + var later = function () { 69.65 + module.exports.confirm(win, loseX, args); 69.66 + }; 69.67 + alertStack.push(later); 69.68 + return; 69.69 + } 69.70 + 69.71 + isAlertShowing = true; 69.72 + 69.73 + try { 69.74 + var message = args[0]; 69.75 + var _title = args[1]; 69.76 + var buttons = args[2]; 69.77 + 69.78 + var md = new Windows.UI.Popups.MessageDialog(message, _title); 69.79 + 69.80 + buttons.forEach(function(buttonLabel) { 69.81 + md.commands.append(new Windows.UI.Popups.UICommand(buttonLabel)); 69.82 + }); 69.83 + 69.84 + md.showAsync().then(function(res) { 69.85 + isAlertShowing = false; 69.86 + var result = res ? buttons.indexOf(res.label) + 1 : 0; 69.87 + win && win(result); 69.88 + if (alertStack.length) { 69.89 + setTimeout(alertStack.shift(), 0); 69.90 + } 69.91 + 69.92 + }); 69.93 + } catch (e) { 69.94 + // set isAlertShowing flag back to false in case of exception 69.95 + isAlertShowing = false; 69.96 + if (alertStack.length) { 69.97 + setTimeout(alertStack.shift(), 0); 69.98 + } 69.99 + // rethrow exception 69.100 + throw e; 69.101 + } 69.102 + }, 69.103 + 69.104 + beep:function(winX, loseX, args) { 69.105 + 69.106 + // set a default args if it is not set 69.107 + args = args && args.length ? args : ["1"]; 69.108 + 69.109 + var snd = new Audio('ms-winsoundevent:Notification.Default'); 69.110 + var count = parseInt(args[0]) || 1; 69.111 + snd.msAudioCategory = "Alerts"; 69.112 + 69.113 + var onEvent = function () { 69.114 + if (count > 0) { 69.115 + snd.play(); 69.116 + } else { 69.117 + snd.removeEventListener("ended", onEvent); 69.118 + snd = null; 69.119 + winX && winX(); // notification.js just sends null, but this is future friendly 69.120 + } 69.121 + count--; 69.122 + }; 69.123 + snd.addEventListener("ended", onEvent); 69.124 + onEvent(); 69.125 + 69.126 + } 69.127 +}; 69.128 + 69.129 +require("cordova/exec/proxy").add("Notification",module.exports);
70.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 70.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/wp/Notification.cs Thu Jun 04 14:50:33 2015 +0200 70.3 @@ -0,0 +1,482 @@ 70.4 +/* 70.5 + Licensed under the Apache License, Version 2.0 (the "License"); 70.6 + you may not use this file except in compliance with the License. 70.7 + You may obtain a copy of the License at 70.8 + 70.9 + http://www.apache.org/licenses/LICENSE-2.0 70.10 + 70.11 + Unless required by applicable law or agreed to in writing, software 70.12 + distributed under the License is distributed on an "AS IS" BASIS, 70.13 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 70.14 + See the License for the specific language governing permissions and 70.15 + limitations under the License. 70.16 +*/ 70.17 + 70.18 +using System; 70.19 +using System.Windows; 70.20 +using System.Windows.Controls; 70.21 +using Microsoft.Devices; 70.22 +using System.Runtime.Serialization; 70.23 +using System.Threading; 70.24 +using System.Windows.Resources; 70.25 +using Microsoft.Phone.Controls; 70.26 +using Microsoft.Xna.Framework.Audio; 70.27 +using WPCordovaClassLib.Cordova.UI; 70.28 +using System.Diagnostics; 70.29 + 70.30 + 70.31 +namespace WPCordovaClassLib.Cordova.Commands 70.32 +{ 70.33 + public class Notification : BaseCommand 70.34 + { 70.35 + static ProgressBar progressBar = null; 70.36 + const int DEFAULT_DURATION = 5; 70.37 + 70.38 + private NotificationBox notifyBox; 70.39 + 70.40 + private class NotifBoxData 70.41 + { 70.42 + public NotificationBox previous {get;set;} 70.43 + public string callbackId { get; set; } 70.44 + } 70.45 + 70.46 + private PhoneApplicationPage Page 70.47 + { 70.48 + get 70.49 + { 70.50 + PhoneApplicationPage page = null; 70.51 + PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame; 70.52 + if (frame != null) 70.53 + { 70.54 + page = frame.Content as PhoneApplicationPage; 70.55 + } 70.56 + return page; 70.57 + } 70.58 + } 70.59 + 70.60 + // blink api - doesn't look like there is an equivalent api we can use... 70.61 + 70.62 + [DataContract] 70.63 + public class AlertOptions 70.64 + { 70.65 + [OnDeserializing] 70.66 + public void OnDeserializing(StreamingContext context) 70.67 + { 70.68 + // set defaults 70.69 + this.message = "message"; 70.70 + this.title = "Alert"; 70.71 + this.buttonLabel = "ok"; 70.72 + } 70.73 + 70.74 + /// <summary> 70.75 + /// message to display in the alert box 70.76 + /// </summary> 70.77 + [DataMember] 70.78 + public string message; 70.79 + 70.80 + /// <summary> 70.81 + /// title displayed on the alert window 70.82 + /// </summary> 70.83 + [DataMember] 70.84 + public string title; 70.85 + 70.86 + /// <summary> 70.87 + /// text to display on the button 70.88 + /// </summary> 70.89 + [DataMember] 70.90 + public string buttonLabel; 70.91 + } 70.92 + 70.93 + [DataContract] 70.94 + public class PromptResult 70.95 + { 70.96 + [DataMember] 70.97 + public int buttonIndex; 70.98 + 70.99 + [DataMember] 70.100 + public string input1; 70.101 + 70.102 + public PromptResult(int index, string text) 70.103 + { 70.104 + this.buttonIndex = index; 70.105 + this.input1 = text; 70.106 + } 70.107 + } 70.108 + 70.109 + public void alert(string options) 70.110 + { 70.111 + string[] args = JSON.JsonHelper.Deserialize<string[]>(options); 70.112 + AlertOptions alertOpts = new AlertOptions(); 70.113 + alertOpts.message = args[0]; 70.114 + alertOpts.title = args[1]; 70.115 + alertOpts.buttonLabel = args[2]; 70.116 + string aliasCurrentCommandCallbackId = args[3]; 70.117 + 70.118 + Deployment.Current.Dispatcher.BeginInvoke(() => 70.119 + { 70.120 + PhoneApplicationPage page = Page; 70.121 + if (page != null) 70.122 + { 70.123 + Grid grid = page.FindName("LayoutRoot") as Grid; 70.124 + if (grid != null) 70.125 + { 70.126 + var previous = notifyBox; 70.127 + notifyBox = new NotificationBox(); 70.128 + notifyBox.Tag = new NotifBoxData { previous = previous, callbackId = aliasCurrentCommandCallbackId }; 70.129 + notifyBox.PageTitle.Text = alertOpts.title; 70.130 + notifyBox.SubTitle.Text = alertOpts.message; 70.131 + Button btnOK = new Button(); 70.132 + btnOK.Content = alertOpts.buttonLabel; 70.133 + btnOK.Click += new RoutedEventHandler(btnOK_Click); 70.134 + btnOK.Tag = 1; 70.135 + notifyBox.ButtonPanel.Children.Add(btnOK); 70.136 + grid.Children.Add(notifyBox); 70.137 + 70.138 + if (previous == null) 70.139 + { 70.140 + page.BackKeyPress += page_BackKeyPress; 70.141 + } 70.142 + } 70.143 + } 70.144 + else 70.145 + { 70.146 + DispatchCommandResult(new PluginResult(PluginResult.Status.INSTANTIATION_EXCEPTION)); 70.147 + } 70.148 + }); 70.149 + } 70.150 + 70.151 + public void prompt(string options) 70.152 + { 70.153 + string[] args = JSON.JsonHelper.Deserialize<string[]>(options); 70.154 + string message = args[0]; 70.155 + string title = args[1]; 70.156 + string buttonLabelsArray = args[2]; 70.157 + string[] buttonLabels = JSON.JsonHelper.Deserialize<string[]>(buttonLabelsArray); 70.158 + string defaultText = args[3]; 70.159 + string aliasCurrentCommandCallbackId = args[4]; 70.160 + 70.161 + Deployment.Current.Dispatcher.BeginInvoke(() => 70.162 + { 70.163 + PhoneApplicationPage page = Page; 70.164 + if (page != null) 70.165 + { 70.166 + Grid grid = page.FindName("LayoutRoot") as Grid; 70.167 + if (grid != null) 70.168 + { 70.169 + var previous = notifyBox; 70.170 + notifyBox = new NotificationBox(); 70.171 + notifyBox.Tag = new NotifBoxData { previous = previous, callbackId = aliasCurrentCommandCallbackId }; 70.172 + notifyBox.PageTitle.Text = title; 70.173 + notifyBox.SubTitle.Text = message; 70.174 + 70.175 + //TextBox textBox = new TextBox(); 70.176 + //textBox.Text = defaultText; 70.177 + //textBox.AcceptsReturn = true; 70.178 + //notifyBox.ContentScroller.Content = textBox; 70.179 + 70.180 + notifyBox.InputText.Text = defaultText; 70.181 + notifyBox.InputText.Visibility = Visibility.Visible; 70.182 + 70.183 + for (int i = 0; i < buttonLabels.Length; ++i) 70.184 + { 70.185 + Button button = new Button(); 70.186 + button.Content = buttonLabels[i]; 70.187 + button.Tag = i + 1; 70.188 + button.Click += promptBoxbutton_Click; 70.189 + notifyBox.ButtonPanel.Orientation = Orientation.Vertical; 70.190 + notifyBox.ButtonPanel.Children.Add(button); 70.191 + } 70.192 + 70.193 + grid.Children.Add(notifyBox); 70.194 + if (previous != null) 70.195 + { 70.196 + page.BackKeyPress += page_BackKeyPress; 70.197 + } 70.198 + } 70.199 + } 70.200 + else 70.201 + { 70.202 + DispatchCommandResult(new PluginResult(PluginResult.Status.INSTANTIATION_EXCEPTION)); 70.203 + } 70.204 + }); 70.205 + } 70.206 + 70.207 + public void confirm(string options) 70.208 + { 70.209 + string[] args = JSON.JsonHelper.Deserialize<string[]>(options); 70.210 + AlertOptions alertOpts = new AlertOptions(); 70.211 + alertOpts.message = args[0]; 70.212 + alertOpts.title = args[1]; 70.213 + alertOpts.buttonLabel = args[2]; 70.214 + string aliasCurrentCommandCallbackId = args[3]; 70.215 + 70.216 + Deployment.Current.Dispatcher.BeginInvoke(() => 70.217 + { 70.218 + PhoneApplicationPage page = Page; 70.219 + if (page != null) 70.220 + { 70.221 + Grid grid = page.FindName("LayoutRoot") as Grid; 70.222 + if (grid != null) 70.223 + { 70.224 + var previous = notifyBox; 70.225 + notifyBox = new NotificationBox(); 70.226 + notifyBox.Tag = new NotifBoxData { previous = previous, callbackId = aliasCurrentCommandCallbackId }; 70.227 + notifyBox.PageTitle.Text = alertOpts.title; 70.228 + notifyBox.SubTitle.Text = alertOpts.message; 70.229 + 70.230 + string[] labels = JSON.JsonHelper.Deserialize<string[]>(alertOpts.buttonLabel); 70.231 + 70.232 + if (labels == null) 70.233 + { 70.234 + labels = alertOpts.buttonLabel.Split(','); 70.235 + } 70.236 + 70.237 + for (int n = 0; n < labels.Length; n++) 70.238 + { 70.239 + Button btn = new Button(); 70.240 + btn.Content = labels[n]; 70.241 + btn.Tag = n; 70.242 + btn.Click += new RoutedEventHandler(btnOK_Click); 70.243 + notifyBox.ButtonPanel.Children.Add(btn); 70.244 + } 70.245 + 70.246 + grid.Children.Add(notifyBox); 70.247 + if (previous == null) 70.248 + { 70.249 + page.BackKeyPress += page_BackKeyPress; 70.250 + } 70.251 + } 70.252 + } 70.253 + else 70.254 + { 70.255 + DispatchCommandResult(new PluginResult(PluginResult.Status.INSTANTIATION_EXCEPTION)); 70.256 + } 70.257 + }); 70.258 + } 70.259 + 70.260 + void promptBoxbutton_Click(object sender, RoutedEventArgs e) 70.261 + { 70.262 + Button button = sender as Button; 70.263 + FrameworkElement promptBox = null; 70.264 + int buttonIndex = 0; 70.265 + string callbackId = string.Empty; 70.266 + string text = string.Empty; 70.267 + if (button != null) 70.268 + { 70.269 + buttonIndex = (int)button.Tag; 70.270 + promptBox = button.Parent as FrameworkElement; 70.271 + while ((promptBox = promptBox.Parent as FrameworkElement) != null && 70.272 + !(promptBox is NotificationBox)) ; 70.273 + } 70.274 + 70.275 + if (promptBox != null) 70.276 + { 70.277 + NotificationBox box = promptBox as NotificationBox; 70.278 + 70.279 + text = box.InputText.Text; 70.280 + 70.281 + PhoneApplicationPage page = Page; 70.282 + if (page != null) 70.283 + { 70.284 + Grid grid = page.FindName("LayoutRoot") as Grid; 70.285 + if (grid != null) 70.286 + { 70.287 + grid.Children.Remove(promptBox); 70.288 + } 70.289 + 70.290 + NotifBoxData data = promptBox.Tag as NotifBoxData; 70.291 + promptBox = data.previous as NotificationBox; 70.292 + callbackId = data.callbackId as string; 70.293 + 70.294 + if (promptBox == null) 70.295 + { 70.296 + page.BackKeyPress -= page_BackKeyPress; 70.297 + } 70.298 + } 70.299 + } 70.300 + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, new PromptResult(buttonIndex, text)), callbackId); 70.301 + } 70.302 + 70.303 + void page_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 70.304 + { 70.305 + PhoneApplicationPage page = sender as PhoneApplicationPage; 70.306 + string callbackId = ""; 70.307 + if (page != null && notifyBox != null) 70.308 + { 70.309 + Grid grid = page.FindName("LayoutRoot") as Grid; 70.310 + if (grid != null) 70.311 + { 70.312 + grid.Children.Remove(notifyBox); 70.313 + NotifBoxData notifBoxData = notifyBox.Tag as NotifBoxData; 70.314 + notifyBox = notifBoxData.previous as NotificationBox; 70.315 + callbackId = notifBoxData.callbackId as string; 70.316 + } 70.317 + if (notifyBox == null) 70.318 + { 70.319 + page.BackKeyPress -= page_BackKeyPress; 70.320 + } 70.321 + e.Cancel = true; 70.322 + } 70.323 + 70.324 + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, 0), callbackId); 70.325 + } 70.326 + 70.327 + void btnOK_Click(object sender, RoutedEventArgs e) 70.328 + { 70.329 + Button btn = sender as Button; 70.330 + FrameworkElement notifBoxParent = null; 70.331 + int retVal = 0; 70.332 + string callbackId = ""; 70.333 + if (btn != null) 70.334 + { 70.335 + retVal = (int)btn.Tag + 1; 70.336 + 70.337 + notifBoxParent = btn.Parent as FrameworkElement; 70.338 + while ((notifBoxParent = notifBoxParent.Parent as FrameworkElement) != null && 70.339 + !(notifBoxParent is NotificationBox)) ; 70.340 + } 70.341 + if (notifBoxParent != null) 70.342 + { 70.343 + PhoneApplicationPage page = Page; 70.344 + if (page != null) 70.345 + { 70.346 + Grid grid = page.FindName("LayoutRoot") as Grid; 70.347 + if (grid != null) 70.348 + { 70.349 + grid.Children.Remove(notifBoxParent); 70.350 + } 70.351 + 70.352 + NotifBoxData notifBoxData = notifBoxParent.Tag as NotifBoxData; 70.353 + notifyBox = notifBoxData.previous as NotificationBox; 70.354 + callbackId = notifBoxData.callbackId as string; 70.355 + 70.356 + if (notifyBox == null) 70.357 + { 70.358 + page.BackKeyPress -= page_BackKeyPress; 70.359 + } 70.360 + } 70.361 + 70.362 + } 70.363 + DispatchCommandResult(new PluginResult(PluginResult.Status.OK, retVal), callbackId); 70.364 + } 70.365 + 70.366 + 70.367 + 70.368 + public void beep(string options) 70.369 + { 70.370 + string[] args = JSON.JsonHelper.Deserialize<string[]>(options); 70.371 + int times = int.Parse(args[0]); 70.372 + 70.373 + string resourcePath = BaseCommand.GetBaseURL() + "Plugins/org.apache.cordova.dialogs/notification-beep.wav"; 70.374 + 70.375 + StreamResourceInfo sri = Application.GetResourceStream(new Uri(resourcePath, UriKind.Relative)); 70.376 + 70.377 + if (sri != null) 70.378 + { 70.379 + SoundEffect effect = SoundEffect.FromStream(sri.Stream); 70.380 + SoundEffectInstance inst = effect.CreateInstance(); 70.381 + ThreadPool.QueueUserWorkItem((o) => 70.382 + { 70.383 + // cannot interact with UI !! 70.384 + do 70.385 + { 70.386 + inst.Play(); 70.387 + Thread.Sleep(effect.Duration + TimeSpan.FromMilliseconds(100)); 70.388 + } 70.389 + while (--times > 0); 70.390 + 70.391 + }); 70.392 + 70.393 + } 70.394 + 70.395 + // TODO: may need a listener to trigger DispatchCommandResult after the alarm has finished executing... 70.396 + DispatchCommandResult(); 70.397 + } 70.398 + 70.399 + // Display an indeterminate progress indicator 70.400 + public void activityStart(string unused) 70.401 + { 70.402 + 70.403 + Deployment.Current.Dispatcher.BeginInvoke(() => 70.404 + { 70.405 + PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame; 70.406 + 70.407 + if (frame != null) 70.408 + { 70.409 + PhoneApplicationPage page = frame.Content as PhoneApplicationPage; 70.410 + 70.411 + if (page != null) 70.412 + { 70.413 + var temp = page.FindName("LayoutRoot"); 70.414 + Grid grid = temp as Grid; 70.415 + if (grid != null) 70.416 + { 70.417 + if (progressBar != null) 70.418 + { 70.419 + grid.Children.Remove(progressBar); 70.420 + } 70.421 + progressBar = new ProgressBar(); 70.422 + progressBar.IsIndeterminate = true; 70.423 + progressBar.IsEnabled = true; 70.424 + 70.425 + grid.Children.Add(progressBar); 70.426 + } 70.427 + } 70.428 + } 70.429 + }); 70.430 + } 70.431 + 70.432 + 70.433 + // Remove our indeterminate progress indicator 70.434 + public void activityStop(string unused) 70.435 + { 70.436 + Deployment.Current.Dispatcher.BeginInvoke(() => 70.437 + { 70.438 + if (progressBar != null) 70.439 + { 70.440 + progressBar.IsEnabled = false; 70.441 + PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame; 70.442 + if (frame != null) 70.443 + { 70.444 + PhoneApplicationPage page = frame.Content as PhoneApplicationPage; 70.445 + if (page != null) 70.446 + { 70.447 + Grid grid = page.FindName("LayoutRoot") as Grid; 70.448 + if (grid != null) 70.449 + { 70.450 + grid.Children.Remove(progressBar); 70.451 + } 70.452 + } 70.453 + } 70.454 + progressBar = null; 70.455 + } 70.456 + }); 70.457 + } 70.458 + 70.459 + public void vibrate(string vibrateDuration) 70.460 + { 70.461 + 70.462 + int msecs = 200; // set default 70.463 + 70.464 + try 70.465 + { 70.466 + string[] args = JSON.JsonHelper.Deserialize<string[]>(vibrateDuration); 70.467 + 70.468 + msecs = int.Parse(args[0]); 70.469 + if (msecs < 1) 70.470 + { 70.471 + msecs = 1; 70.472 + } 70.473 + } 70.474 + catch (FormatException) 70.475 + { 70.476 + 70.477 + } 70.478 + 70.479 + VibrateController.Default.Start(TimeSpan.FromMilliseconds(msecs)); 70.480 + 70.481 + // TODO: may need to add listener to trigger DispatchCommandResult when the vibration ends... 70.482 + DispatchCommandResult(); 70.483 + } 70.484 + } 70.485 +}
71.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 71.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/wp/NotificationBox.xaml Thu Jun 04 14:50:33 2015 +0200 71.3 @@ -0,0 +1,79 @@ 71.4 +<!-- 71.5 + Licensed to the Apache Software Foundation (ASF) under one 71.6 + or more contributor license agreements. See the NOTICE file 71.7 + distributed with this work for additional information 71.8 + regarding copyright ownership. The ASF licenses this file 71.9 + to you under the Apache License, Version 2.0 (the 71.10 + "License"); you may not use this file except in compliance 71.11 + with the License. You may obtain a copy of the License at 71.12 + 71.13 + http://www.apache.org/licenses/LICENSE-2.0 71.14 + 71.15 + Unless required by applicable law or agreed to in writing, 71.16 + software distributed under the License is distributed on an 71.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 71.18 + KIND, either express or implied. See the License for the 71.19 + specific language governing permissions and limitations 71.20 + under the License. 71.21 +--> 71.22 +<UserControl x:Class="WPCordovaClassLib.Cordova.UI.NotificationBox" 71.23 + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 71.24 + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 71.25 + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 71.26 + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 71.27 + mc:Ignorable="d" 71.28 + FontFamily="{StaticResource PhoneFontFamilyNormal}" 71.29 + FontSize="{StaticResource PhoneFontSizeNormal}" 71.30 + Foreground="{StaticResource PhoneForegroundBrush}" 71.31 + d:DesignHeight="800" d:DesignWidth="480" VerticalAlignment="Stretch"> 71.32 + 71.33 + <!--TitlePanel contains the name of the application and page title--> 71.34 + <Grid x:Name="LayoutRoot" 71.35 + Background="{StaticResource PhoneSemitransparentBrush}"> 71.36 + <Grid.RowDefinitions> 71.37 + <RowDefinition Height="*"></RowDefinition> 71.38 + </Grid.RowDefinitions> 71.39 + 71.40 + <Grid x:Name="TitlePanel" 71.41 + Grid.Row="0" 71.42 + VerticalAlignment="Top" 71.43 + Background="{StaticResource PhoneSemitransparentBrush}"> 71.44 + <Grid.RowDefinitions> 71.45 + <RowDefinition Height="Auto"></RowDefinition> 71.46 + <RowDefinition Height="*"></RowDefinition> 71.47 + <RowDefinition Height="Auto"></RowDefinition> 71.48 + </Grid.RowDefinitions> 71.49 + 71.50 + <TextBlock x:Name="PageTitle" 71.51 + Text="Title" 71.52 + Margin="10,10" 71.53 + Grid.Row="0" 71.54 + Style="{StaticResource PhoneTextTitle2Style}"/> 71.55 + 71.56 + <ScrollViewer x:Name="ContentScroller" 71.57 + Grid.Row="1" 71.58 + MinHeight="120" 71.59 + Margin="10,10"> 71.60 + <StackPanel Orientation="Vertical"> 71.61 + <TextBlock x:Name="SubTitle" 71.62 + Text="Subtitle" 71.63 + Width="Auto" 71.64 + TextWrapping="Wrap" 71.65 + Style="{StaticResource PhoneTextTitle3Style}"/> 71.66 + <TextBox x:Name="InputText" 71.67 + Visibility="Collapsed"/> 71.68 + </StackPanel> 71.69 + </ScrollViewer> 71.70 + 71.71 + <ScrollViewer HorizontalScrollBarVisibility="Auto" 71.72 + Grid.Row="2" 71.73 + VerticalScrollBarVisibility="Disabled"> 71.74 + <StackPanel x:Name="ButtonPanel" 71.75 + Margin="10,10" 71.76 + Orientation="Horizontal"/> 71.77 + </ScrollViewer> 71.78 + 71.79 + </Grid> 71.80 + </Grid> 71.81 + 71.82 +</UserControl>
72.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 72.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/src/wp/NotificationBox.xaml.cs Thu Jun 04 14:50:33 2015 +0200 72.3 @@ -0,0 +1,41 @@ 72.4 +/* 72.5 + Licensed to the Apache Software Foundation (ASF) under one 72.6 + or more contributor license agreements. See the NOTICE file 72.7 + distributed with this work for additional information 72.8 + regarding copyright ownership. The ASF licenses this file 72.9 + to you under the Apache License, Version 2.0 (the 72.10 + "License"); you may not use this file except in compliance 72.11 + with the License. You may obtain a copy of the License at 72.12 + 72.13 + http://www.apache.org/licenses/LICENSE-2.0 72.14 + 72.15 + Unless required by applicable law or agreed to in writing, 72.16 + software distributed under the License is distributed on an 72.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 72.18 + KIND, either express or implied. See the License for the 72.19 + specific language governing permissions and limitations 72.20 + under the License. 72.21 +*/ 72.22 + 72.23 +using System; 72.24 +using System.Collections.Generic; 72.25 +using System.Linq; 72.26 +using System.Net; 72.27 +using System.Windows; 72.28 +using System.Windows.Controls; 72.29 +using System.Windows.Documents; 72.30 +using System.Windows.Input; 72.31 +using System.Windows.Media; 72.32 +using System.Windows.Media.Animation; 72.33 +using System.Windows.Shapes; 72.34 + 72.35 +namespace WPCordovaClassLib.Cordova.UI 72.36 +{ 72.37 + public partial class NotificationBox : UserControl 72.38 + { 72.39 + public NotificationBox() 72.40 + { 72.41 + InitializeComponent(); 72.42 + } 72.43 + } 72.44 +}
73.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/src/wp/notification-beep.wav has changed
74.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 74.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/tests/plugin.xml Thu Jun 04 14:50:33 2015 +0200 74.3 @@ -0,0 +1,29 @@ 74.4 +<?xml version="1.0" encoding="UTF-8"?> 74.5 +<!-- 74.6 + Licensed to the Apache Software Foundation (ASF) under one 74.7 + or more contributor license agreements. See the NOTICE file 74.8 + distributed with this work for additional information 74.9 + regarding copyright ownership. The ASF licenses this file 74.10 + to you under the Apache License, Version 2.0 (the 74.11 + "License"); you may not use this file except in compliance 74.12 + with the License. You may obtain a copy of the License at 74.13 + 74.14 + http://www.apache.org/licenses/LICENSE-2.0 74.15 + 74.16 + Unless required by applicable law or agreed to in writing, 74.17 + software distributed under the License is distributed on an 74.18 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 74.19 + KIND, either express or implied. See the License for the 74.20 + specific language governing permissions and limitations 74.21 + under the License. 74.22 +--> 74.23 + 74.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 74.25 + id="org.apache.cordova.dialogs.tests" 74.26 + version="0.2.11"> 74.27 + <name>Cordova Notification Plugin Tests</name> 74.28 + <license>Apache 2.0</license> 74.29 + 74.30 + <js-module src="tests.js" name="tests"> 74.31 + </js-module> 74.32 +</plugin>
75.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 75.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/tests/tests.js Thu Jun 04 14:50:33 2015 +0200 75.3 @@ -0,0 +1,194 @@ 75.4 +/* 75.5 + * 75.6 + * Licensed to the Apache Software Foundation (ASF) under one 75.7 + * or more contributor license agreements. See the NOTICE file 75.8 + * distributed with this work for additional information 75.9 + * regarding copyright ownership. The ASF licenses this file 75.10 + * to you under the Apache License, Version 2.0 (the 75.11 + * "License"); you may not use this file except in compliance 75.12 + * with the License. You may obtain a copy of the License at 75.13 + * 75.14 + * http://www.apache.org/licenses/LICENSE-2.0 75.15 + * 75.16 + * Unless required by applicable law or agreed to in writing, 75.17 + * software distributed under the License is distributed on an 75.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 75.19 + * KIND, either express or implied. See the License for the 75.20 + * specific language governing permissions and limitations 75.21 + * under the License. 75.22 + * 75.23 +*/ 75.24 + 75.25 +exports.defineAutoTests = function () { 75.26 + describe('Notification (navigator.notification)', function () { 75.27 + it("should exist", function () { 75.28 + expect(navigator.notification).toBeDefined(); 75.29 + }); 75.30 + 75.31 + it("should contain a beep function", function () { 75.32 + expect(typeof navigator.notification.beep).toBeDefined(); 75.33 + expect(typeof navigator.notification.beep).toBe("function"); 75.34 + }); 75.35 + 75.36 + it("should contain an alert function", function () { 75.37 + expect(typeof navigator.notification.alert).toBeDefined(); 75.38 + expect(typeof navigator.notification.alert).toBe("function"); 75.39 + }); 75.40 + 75.41 + it("should contain a confirm function", function () { 75.42 + expect(typeof navigator.notification.confirm).toBeDefined(); 75.43 + expect(typeof navigator.notification.confirm).toBe("function"); 75.44 + }); 75.45 + 75.46 + it("should contain a prompt function", function () { 75.47 + expect(typeof navigator.notification.prompt).toBeDefined(); 75.48 + expect(typeof navigator.notification.prompt).toBe("function"); 75.49 + }); 75.50 + }); 75.51 +}; 75.52 + 75.53 +/******************************************************************************/ 75.54 +/******************************************************************************/ 75.55 +/******************************************************************************/ 75.56 + 75.57 +exports.defineManualTests = function (contentEl, createActionButton) { 75.58 + var logMessage = function (message) { 75.59 + var log = document.getElementById('info'); 75.60 + var logLine = document.createElement('div'); 75.61 + logLine.innerHTML = message; 75.62 + log.appendChild(logLine); 75.63 + } 75.64 + 75.65 + var clearLog = function () { 75.66 + var log = document.getElementById('info'); 75.67 + log.innerHTML = ''; 75.68 + } 75.69 + 75.70 + var beep = function () { 75.71 + console.log("beep()"); 75.72 + navigator.notification.beep(3); 75.73 + }; 75.74 + 75.75 + var alertDialog = function (message, title, button) { 75.76 + console.log("alertDialog()"); 75.77 + navigator.notification.alert(message, 75.78 + function () { 75.79 + console.log("Alert dismissed."); 75.80 + }, 75.81 + title, button); 75.82 + console.log("After alert"); 75.83 + }; 75.84 + 75.85 + var confirmDialogA = function (message, title, buttons) { 75.86 + clearLog(); 75.87 + navigator.notification.confirm(message, 75.88 + function (r) { 75.89 + if (r === 0) { 75.90 + logMessage("Dismissed dialog without making a selection."); 75.91 + console.log("Dismissed dialog without making a selection."); 75.92 + } else { 75.93 + console.log("You selected " + r); 75.94 + logMessage("You selected " + (buttons.split(","))[r - 1]); 75.95 + } 75.96 + }, 75.97 + title, 75.98 + buttons); 75.99 + }; 75.100 + 75.101 + var confirmDialogB = function (message, title, buttons) { 75.102 + clearLog(); 75.103 + navigator.notification.confirm(message, 75.104 + function (r) { 75.105 + if (r === 0) { 75.106 + logMessage("Dismissed dialog without making a selection."); 75.107 + console.log("Dismissed dialog without making a selection."); 75.108 + } else { 75.109 + console.log("You selected " + r); 75.110 + logMessage("You selected " + buttons[r - 1]); 75.111 + } 75.112 + }, 75.113 + title, 75.114 + buttons); 75.115 + }; 75.116 + 75.117 + var promptDialog = function (message, title, buttons) { 75.118 + clearLog(); 75.119 + navigator.notification.prompt(message, 75.120 + function (r) { 75.121 + if (r && r.buttonIndex === 0) { 75.122 + var msg = "Dismissed dialog"; 75.123 + if (r.input1) { 75.124 + msg += " with input: " + r.input1 75.125 + } 75.126 + logMessage(msg); 75.127 + console.log(msg); 75.128 + } else { 75.129 + console.log("You selected " + r.buttonIndex + " and entered: " + r.input1); 75.130 + logMessage("You selected " + buttons[r.buttonIndex - 1] + " and entered: " + r.input1); 75.131 + } 75.132 + }, 75.133 + title, 75.134 + buttons); 75.135 + }; 75.136 + 75.137 + /******************************************************************************/ 75.138 + 75.139 + var dialogs_tests = '<div id="beep"></div>' + 75.140 + 'Expected result: Device will beep (unless device is on silent). Nothing will get updated in status box.' + 75.141 + '<h2>Dialog Tests</h2>' + 75.142 + '<h3>Dialog boxes will pop up for each of the following tests</h3>' + 75.143 + '<p/> <div id="alert"></div>' + 75.144 + 'Expected result: Dialog will say "You pressed alert". Press continue to close dialog. Nothing will get updated in status box.' + 75.145 + '<p/> <div id="confirm_deprecated"></div>' + 75.146 + 'Expected result: Dialog will say "You pressed confirm". Press Yes, No, or Maybe to close dialog. Status box will tell you what option you selected.' + 75.147 + '<p/> <div id="confirm"></div>' + 75.148 + 'Expected result: Dialog will say "You pressed confirm". Press Yes, No, or Maybe, Not Sure to close dialog. Status box will tell you what option you selected, and should use 1-based indexing.' + 75.149 + '<p/> <div id="prompt"></div>' + 75.150 + 'Expected result: Dialog will say "You pressed prompt". Enter any message and press Yes, No, or Maybe, Not Sure to close dialog. Status box will tell you what option you selected and message you entered, and should use 1-based indexing.' + 75.151 + '<p/> <div id="built_in_alert"></div>' + 75.152 + 'Expected result: Dialog will have title "index.html" and say "You pressed alert" Press OK to close dialog. Nothing will get updated in status box.' + 75.153 + '<p/> <div id="built_in_confirm"></div>' + 75.154 + 'Expected result: Dialog will have title "index.html" and say "You selected confirm". Press Cancel or OK to close dialog. Nothing will get updated in status box.' + 75.155 + '<p/> <div id="built_in_prompt"></div>' + 75.156 + 'Expected result: Dialog will have title "index.html" and say "This is a prompt". "Default value" will be in text box. Press Cancel or OK to close dialog. Nothing will get updated in status box.'; 75.157 + 75.158 + contentEl.innerHTML = '<div id="info"></div>' + 75.159 + dialogs_tests; 75.160 + 75.161 + createActionButton('Beep', function () { 75.162 + beep(); 75.163 + }, 'beep'); 75.164 + 75.165 + createActionButton('Alert Dialog', function () { 75.166 + alertDialog('You pressed alert.', 'Alert Dialog', 'Continue'); 75.167 + }, 'alert'); 75.168 + 75.169 + // WP8.1 detection is necessary since it doesn't support confirm dialogs with more than 2 buttons 75.170 + var isRunningOnWP81 = cordova.platformId == "windows" && navigator.userAgent.indexOf('Windows Phone') > -1; 75.171 + 75.172 + createActionButton('Confirm Dialog - Deprecated', function () { 75.173 + var buttons = isRunningOnWP81 ? 'Yes,No' : 'Yes,No,Maybe'; 75.174 + confirmDialogA('You pressed confirm.', 'Confirm Dialog', buttons); 75.175 + }, 'confirm_deprecated'); 75.176 + 75.177 + createActionButton('Confirm Dialog', function () { 75.178 + var buttons = isRunningOnWP81 ? ['Yes', 'Actually, No'] : ['Yes', 'No', 'Maybe, Not Sure']; 75.179 + confirmDialogB('You pressed confirm.', 'Confirm Dialog', buttons); 75.180 + }, 'confirm'); 75.181 + 75.182 + createActionButton('Prompt Dialog', function () { 75.183 + promptDialog('You pressed prompt.', 'Prompt Dialog', ['Yes', 'No', 'Maybe, Not Sure']); 75.184 + }, 'prompt'); 75.185 + 75.186 + createActionButton('Built-in Alert Dialog', function () { 75.187 + typeof alert === 'function' && alert('You pressed alert'); 75.188 + }, 'built_in_alert'); 75.189 + 75.190 + createActionButton('Built-in Confirm Dialog', function () { 75.191 + typeof confirm === 'function' && confirm('You selected confirm'); 75.192 + }, 'built_in_confirm'); 75.193 + 75.194 + createActionButton('Built-in Prompt Dialog', function () { 75.195 + typeof prompt === 'function' && prompt('This is a prompt', 'Default value'); 75.196 + }, 'built_in_prompt'); 75.197 +};
76.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 76.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/www/android/notification.js Thu Jun 04 14:50:33 2015 +0200 76.3 @@ -0,0 +1,74 @@ 76.4 +/* 76.5 + * 76.6 + * Licensed to the Apache Software Foundation (ASF) under one 76.7 + * or more contributor license agreements. See the NOTICE file 76.8 + * distributed with this work for additional information 76.9 + * regarding copyright ownership. The ASF licenses this file 76.10 + * to you under the Apache License, Version 2.0 (the 76.11 + * "License"); you may not use this file except in compliance 76.12 + * with the License. You may obtain a copy of the License at 76.13 + * 76.14 + * http://www.apache.org/licenses/LICENSE-2.0 76.15 + * 76.16 + * Unless required by applicable law or agreed to in writing, 76.17 + * software distributed under the License is distributed on an 76.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 76.19 + * KIND, either express or implied. See the License for the 76.20 + * specific language governing permissions and limitations 76.21 + * under the License. 76.22 + * 76.23 +*/ 76.24 + 76.25 +var exec = require('cordova/exec'); 76.26 + 76.27 +/** 76.28 + * Provides Android enhanced notification API. 76.29 + */ 76.30 +module.exports = { 76.31 + activityStart : function(title, message) { 76.32 + // If title and message not specified then mimic Android behavior of 76.33 + // using default strings. 76.34 + if (typeof title === "undefined" && typeof message == "undefined") { 76.35 + title = "Busy"; 76.36 + message = 'Please wait...'; 76.37 + } 76.38 + 76.39 + exec(null, null, 'Notification', 'activityStart', [ title, message ]); 76.40 + }, 76.41 + 76.42 + /** 76.43 + * Close an activity dialog 76.44 + */ 76.45 + activityStop : function() { 76.46 + exec(null, null, 'Notification', 'activityStop', []); 76.47 + }, 76.48 + 76.49 + /** 76.50 + * Display a progress dialog with progress bar that goes from 0 to 100. 76.51 + * 76.52 + * @param {String} 76.53 + * title Title of the progress dialog. 76.54 + * @param {String} 76.55 + * message Message to display in the dialog. 76.56 + */ 76.57 + progressStart : function(title, message) { 76.58 + exec(null, null, 'Notification', 'progressStart', [ title, message ]); 76.59 + }, 76.60 + 76.61 + /** 76.62 + * Close the progress dialog. 76.63 + */ 76.64 + progressStop : function() { 76.65 + exec(null, null, 'Notification', 'progressStop', []); 76.66 + }, 76.67 + 76.68 + /** 76.69 + * Set the progress dialog value. 76.70 + * 76.71 + * @param {Number} 76.72 + * value 0-100 76.73 + */ 76.74 + progressValue : function(value) { 76.75 + exec(null, null, 'Notification', 'progressValue', [ value ]); 76.76 + } 76.77 +};
77.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 77.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/www/blackberry10/beep.js Thu Jun 04 14:50:33 2015 +0200 77.3 @@ -0,0 +1,42 @@ 77.4 +/* 77.5 + * 77.6 + * Licensed to the Apache Software Foundation (ASF) under one 77.7 + * or more contributor license agreements. See the NOTICE file 77.8 + * distributed with this work for additional information 77.9 + * regarding copyright ownership. The ASF licenses this file 77.10 + * to you under the Apache License, Version 2.0 (the 77.11 + * "License"); you may not use this file except in compliance 77.12 + * with the License. You may obtain a copy of the License at 77.13 + * 77.14 + * http://www.apache.org/licenses/LICENSE-2.0 77.15 + * 77.16 + * Unless required by applicable law or agreed to in writing, 77.17 + * software distributed under the License is distributed on an 77.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 77.19 + * KIND, either express or implied. See the License for the 77.20 + * specific language governing permissions and limitations 77.21 + * under the License. 77.22 + * 77.23 +*/ 77.24 + 77.25 +module.exports = function (quantity) { 77.26 + var count = 0, 77.27 + beepObj, 77.28 + play = function () { 77.29 + //create new object every time due to strage playback behaviour 77.30 + beepObj = new Audio('local:///chrome/plugin/org.apache.cordova.dialogs/notification-beep.wav'); 77.31 + beepObj.addEventListener("ended", callback); 77.32 + beepObj.play(); 77.33 + }, 77.34 + callback = function () { 77.35 + if (--count > 0) { 77.36 + play(); 77.37 + } else { 77.38 + delete beepObj; 77.39 + } 77.40 + }; 77.41 + count += quantity || 1; 77.42 + if (count > 0) { 77.43 + play(); 77.44 + } 77.45 +};
78.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/blackberry10/notification-beep.wav has changed
79.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/danger-press.png has changed
80.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/danger.png has changed
81.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/default.png has changed
82.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/gradient.png has changed
83.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 83.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/notification.css Thu Jun 04 14:50:33 2015 +0200 83.3 @@ -0,0 +1,248 @@ 83.4 +/* 83.5 + * 83.6 + * Licensed to the Apache Software Foundation (ASF) under one 83.7 + * or more contributor license agreements. See the NOTICE file 83.8 + * distributed with this work for additional information 83.9 + * regarding copyright ownership. The ASF licenses this file 83.10 + * to you under the Apache License, Version 2.0 (the 83.11 + * "License"); you may not use this file except in compliance 83.12 + * with the License. You may obtain a copy of the License at 83.13 + * 83.14 + * http://www.apache.org/licenses/LICENSE-2.0 83.15 + * 83.16 + * Unless required by applicable law or agreed to in writing, 83.17 + * software distributed under the License is distributed on an 83.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 83.19 + * KIND, either express or implied. See the License for the 83.20 + * specific language governing permissions and limitations 83.21 + * under the License. 83.22 + * 83.23 +*/ 83.24 + 83.25 +/* Main dialog setup */ 83.26 +form[role="dialog"] { 83.27 + background: 83.28 + url(../img/pattern.png) repeat left top, 83.29 + url(../img/gradient.png) no-repeat left top / 100% 100%; 83.30 + overflow: hidden; 83.31 + position: absolute; 83.32 + z-index: 100; 83.33 + top: 0; 83.34 + left: 0; 83.35 + right: 0; 83.36 + bottom: 0; 83.37 + padding: 1.5rem 0 7rem; 83.38 + font-family: "MozTT", Sans-serif; 83.39 + font-size: 0; 83.40 + /* Using font-size: 0; we avoid the unwanted visual space (about 3px) 83.41 + created by white-spaces and break lines in the code betewen inline-block elements */ 83.42 + color: #fff; 83.43 + text-align: left; 83.44 +} 83.45 + 83.46 +form[role="dialog"]:before { 83.47 + content: ""; 83.48 + display: inline-block; 83.49 + vertical-align: middle; 83.50 + width: 0.1rem; 83.51 + height: 100%; 83.52 + margin-left: -0.1rem; 83.53 +} 83.54 + 83.55 +form[role="dialog"] > section { 83.56 + font-weight: lighter; 83.57 + font-size: 1.8rem; 83.58 + color: #FAFAFA; 83.59 + padding: 0 1.5rem; 83.60 + -moz-box-sizing: padding-box; 83.61 + width: 100%; 83.62 + display: inline-block; 83.63 + overflow-y: scroll; 83.64 + max-height: 100%; 83.65 + vertical-align: middle; 83.66 + white-space: normal; 83.67 +} 83.68 + 83.69 +form[role="dialog"] h1 { 83.70 + font-weight: normal; 83.71 + font-size: 1.6rem; 83.72 + line-height: 1.5em; 83.73 + color: #fff; 83.74 + margin: 0; 83.75 + padding: 0 1.5rem 1rem; 83.76 + border-bottom: 0.1rem solid #686868; 83.77 +} 83.78 + 83.79 +/* Menu & buttons setup */ 83.80 +form[role="dialog"] menu { 83.81 + margin: 0; 83.82 + padding: 1.5rem; 83.83 + padding-bottom: 0.5rem; 83.84 + border-top: solid 0.1rem rgba(255, 255, 255, 0.1); 83.85 + background: #2d2d2d url(../img/pattern.png) repeat left top; 83.86 + display: block; 83.87 + overflow: hidden; 83.88 + position: absolute; 83.89 + left: 0; 83.90 + right: 0; 83.91 + bottom: 0; 83.92 + text-align: center; 83.93 +} 83.94 + 83.95 +form[role="dialog"] menu button::-moz-focus-inner { 83.96 + border: none; 83.97 + outline: none; 83.98 +} 83.99 +form[role="dialog"] menu button { 83.100 + width: 100%; 83.101 + height: 2.4rem; 83.102 + margin: 0 0 1rem; 83.103 + padding: 0 1.5rem; 83.104 + -moz-box-sizing: border-box; 83.105 + display: inline-block; 83.106 + vertical-align: middle; 83.107 + text-overflow: ellipsis; 83.108 + white-space: nowrap; 83.109 + overflow: hidden; 83.110 + background: #fafafa url(../img/default.png) repeat-x left bottom/ auto 100%; 83.111 + border: 0.1rem solid #a6a6a6; 83.112 + border-radius: 0.3rem; 83.113 + font: 500 1.2rem/2.4rem 'MozTT', Sans-serif; 83.114 + color: #333; 83.115 + text-align: center; 83.116 + text-shadow: 0.1rem 0.1rem 0 rgba(255,255,255,0.3); 83.117 + text-decoration: none; 83.118 + outline: none; 83.119 +} 83.120 + 83.121 +/* Press (default & recommend) */ 83.122 +form[role="dialog"] menu button:active, 83.123 +form[role="dialog"] menu button.recommend:active, 83.124 +a.recommend[role="button"]:active { 83.125 + border-color: #008aaa; 83.126 + color: #333; 83.127 +} 83.128 + 83.129 +/* Recommend */ 83.130 +form[role="dialog"] menu button.recommend { 83.131 + background-image: url(../img/recommend.png); 83.132 + background-color: #00caf2; 83.133 + border-color: #008eab; 83.134 +} 83.135 + 83.136 +/* Danger */ 83.137 +form[role="dialog"] menu button.danger, 83.138 +a.danger[role="button"] { 83.139 + background-image: url(../img/danger.png); 83.140 + background-color: #b70404; 83.141 + color: #fff; 83.142 + text-shadow: none; 83.143 + border-color: #820000; 83.144 +} 83.145 + 83.146 +/* Danger Press */ 83.147 +form[role="dialog"] menu button.danger:active { 83.148 + background-image: url(../img/danger-press.png); 83.149 + background-color: #890707; 83.150 +} 83.151 + 83.152 +/* Disabled */ 83.153 +form[role="dialog"] > menu > button[disabled] { 83.154 + background: #5f5f5f; 83.155 + color: #4d4d4d; 83.156 + text-shadow: none; 83.157 + border-color: #4d4d4d; 83.158 + pointer-events: none; 83.159 +} 83.160 + 83.161 + 83.162 +form[role="dialog"] menu button:nth-child(even) { 83.163 + margin-left: 1rem; 83.164 +} 83.165 + 83.166 +form[role="dialog"] menu button, 83.167 +form[role="dialog"] menu button:nth-child(odd) { 83.168 + margin: 0 0 1rem 0; 83.169 +} 83.170 + 83.171 +form[role="dialog"] menu button { 83.172 + width: calc((100% - 1rem) / 2); 83.173 +} 83.174 + 83.175 +form[role="dialog"] menu button.full { 83.176 + width: 100%; 83.177 +} 83.178 + 83.179 +/* Specific component code */ 83.180 +form[role="dialog"] p { 83.181 + word-wrap: break-word; 83.182 + margin: 1rem 0 0; 83.183 + padding: 0 1.5rem 1rem; 83.184 + line-height: 3rem; 83.185 +} 83.186 + 83.187 +form[role="dialog"] p img { 83.188 + float: left; 83.189 + margin-right: 2rem; 83.190 +} 83.191 + 83.192 +form[role="dialog"] p strong { 83.193 + font-weight: lighter; 83.194 +} 83.195 + 83.196 +form[role="dialog"] p small { 83.197 + font-size: 1.4rem; 83.198 + font-weight: normal; 83.199 + color: #cbcbcb; 83.200 + display: block; 83.201 +} 83.202 + 83.203 +form[role="dialog"] dl { 83.204 + border-top: 0.1rem solid #686868; 83.205 + margin: 1rem 0 0; 83.206 + overflow: hidden; 83.207 + padding-top: 1rem; 83.208 + font-size: 1.6rem; 83.209 + line-height: 2.2rem; 83.210 +} 83.211 + 83.212 +form[role="dialog"] dl > dt { 83.213 + clear: both; 83.214 + float: left; 83.215 + width: 7rem; 83.216 + padding-left: 1.5rem; 83.217 + font-weight: 500; 83.218 + text-align: left; 83.219 +} 83.220 + 83.221 +form[role="dialog"] dl > dd { 83.222 + padding-right: 1.5rem; 83.223 + font-weight: 300; 83.224 + text-overflow: ellipsis; 83.225 + vertical-align: top; 83.226 + overflow: hidden; 83.227 +} 83.228 + 83.229 +/* input areas */ 83.230 +input[type="text"], 83.231 +input[type="password"], 83.232 +input[type="email"], 83.233 +input[type="tel"], 83.234 +input[type="search"], 83.235 +input[type="url"], 83.236 +input[type="number"], 83.237 +textarea { 83.238 + -moz-box-sizing: border-box; 83.239 + display: block; 83.240 + overflow: hidden; 83.241 + width: 100%; 83.242 + height: 3rem; 83.243 + resize: none; 83.244 + padding: 0 1rem; 83.245 + font-size: 1.6rem; 83.246 + line-height: 3rem; 83.247 + border: 0.1rem solid #ccc; 83.248 + border-radius: 0.3rem; 83.249 + box-shadow: none; /* override the box-shadow from the system (performance issue) */ 83.250 + background: #fff url(input_areas/images/ui/shadow.png) repeat-x; 83.251 +}
84.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/pattern.png has changed
85.1 Binary file Touchgui/plugins/org.apache.cordova.dialogs/www/firefoxos/recommend.png has changed
86.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 86.2 +++ b/Touchgui/plugins/org.apache.cordova.dialogs/www/notification.js Thu Jun 04 14:50:33 2015 +0200 86.3 @@ -0,0 +1,112 @@ 86.4 +/* 86.5 + * 86.6 + * Licensed to the Apache Software Foundation (ASF) under one 86.7 + * or more contributor license agreements. See the NOTICE file 86.8 + * distributed with this work for additional information 86.9 + * regarding copyright ownership. The ASF licenses this file 86.10 + * to you under the Apache License, Version 2.0 (the 86.11 + * "License"); you may not use this file except in compliance 86.12 + * with the License. You may obtain a copy of the License at 86.13 + * 86.14 + * http://www.apache.org/licenses/LICENSE-2.0 86.15 + * 86.16 + * Unless required by applicable law or agreed to in writing, 86.17 + * software distributed under the License is distributed on an 86.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 86.19 + * KIND, either express or implied. See the License for the 86.20 + * specific language governing permissions and limitations 86.21 + * under the License. 86.22 + * 86.23 +*/ 86.24 + 86.25 +var exec = require('cordova/exec'); 86.26 +var platform = require('cordova/platform'); 86.27 + 86.28 +/** 86.29 + * Provides access to notifications on the device. 86.30 + */ 86.31 + 86.32 +module.exports = { 86.33 + 86.34 + /** 86.35 + * Open a native alert dialog, with a customizable title and button text. 86.36 + * 86.37 + * @param {String} message Message to print in the body of the alert 86.38 + * @param {Function} completeCallback The callback that is called when user clicks on a button. 86.39 + * @param {String} title Title of the alert dialog (default: Alert) 86.40 + * @param {String} buttonLabel Label of the close button (default: OK) 86.41 + */ 86.42 + alert: function(message, completeCallback, title, buttonLabel) { 86.43 + var _title = (title || "Alert"); 86.44 + var _buttonLabel = (buttonLabel || "OK"); 86.45 + exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]); 86.46 + }, 86.47 + 86.48 + /** 86.49 + * Open a native confirm dialog, with a customizable title and button text. 86.50 + * The result that the user selects is returned to the result callback. 86.51 + * 86.52 + * @param {String} message Message to print in the body of the alert 86.53 + * @param {Function} resultCallback The callback that is called when user clicks on a button. 86.54 + * @param {String} title Title of the alert dialog (default: Confirm) 86.55 + * @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel']) 86.56 + */ 86.57 + confirm: function(message, resultCallback, title, buttonLabels) { 86.58 + var _title = (title || "Confirm"); 86.59 + var _buttonLabels = (buttonLabels || ["OK", "Cancel"]); 86.60 + 86.61 + // Strings are deprecated! 86.62 + if (typeof _buttonLabels === 'string') { 86.63 + console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array)."); 86.64 + } 86.65 + 86.66 + // Some platforms take an array of button label names. 86.67 + // Other platforms take a comma separated list. 86.68 + // For compatibility, we convert to the desired type based on the platform. 86.69 + if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" || 86.70 + platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" || 86.71 + platform.id == "windows8" || platform.id == "windows") { 86.72 + 86.73 + if (typeof _buttonLabels === 'string') { 86.74 + _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here 86.75 + } 86.76 + } else { 86.77 + if (Array.isArray(_buttonLabels)) { 86.78 + var buttonLabelArray = _buttonLabels; 86.79 + _buttonLabels = buttonLabelArray.toString(); 86.80 + } 86.81 + } 86.82 + exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]); 86.83 + }, 86.84 + 86.85 + /** 86.86 + * Open a native prompt dialog, with a customizable title and button text. 86.87 + * The following results are returned to the result callback: 86.88 + * buttonIndex Index number of the button selected. 86.89 + * input1 The text entered in the prompt dialog box. 86.90 + * 86.91 + * @param {String} message Dialog message to display (default: "Prompt message") 86.92 + * @param {Function} resultCallback The callback that is called when user clicks on a button. 86.93 + * @param {String} title Title of the dialog (default: "Prompt") 86.94 + * @param {Array} buttonLabels Array of strings for the button labels (default: ["OK","Cancel"]) 86.95 + * @param {String} defaultText Textbox input value (default: empty string) 86.96 + */ 86.97 + prompt: function(message, resultCallback, title, buttonLabels, defaultText) { 86.98 + var _message = (message || "Prompt message"); 86.99 + var _title = (title || "Prompt"); 86.100 + var _buttonLabels = (buttonLabels || ["OK","Cancel"]); 86.101 + var _defaultText = (defaultText || ""); 86.102 + exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]); 86.103 + }, 86.104 + 86.105 + /** 86.106 + * Causes the device to beep. 86.107 + * On Android, the default notification ringtone is played "count" times. 86.108 + * 86.109 + * @param {Integer} count The number of beeps. 86.110 + */ 86.111 + beep: function(count) { 86.112 + var defaultedCount = count || 1; 86.113 + exec(null, null, "Notification", "beep", [ defaultedCount ]); 86.114 + } 86.115 +};
87.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 87.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/.fetch.json Thu Jun 04 14:50:33 2015 +0200 87.3 @@ -0,0 +1,1 @@ 87.4 +{"source":{"type":"local","path":"/opt/intel/XDK_IoT_Edition/xdk/components/server/cordova-plugins/org.apache.cordova.splashscreen"}} 87.5 \ No newline at end of file
88.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 88.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/CONTRIBUTING.md Thu Jun 04 14:50:33 2015 +0200 88.3 @@ -0,0 +1,37 @@ 88.4 +<!-- 88.5 +# 88.6 +# Licensed to the Apache Software Foundation (ASF) under one 88.7 +# or more contributor license agreements. See the NOTICE file 88.8 +# distributed with this work for additional information 88.9 +# regarding copyright ownership. The ASF licenses this file 88.10 +# to you under the Apache License, Version 2.0 (the 88.11 +# "License"); you may not use this file except in compliance 88.12 +# with the License. You may obtain a copy of the License at 88.13 +# 88.14 +# http://www.apache.org/licenses/LICENSE-2.0 88.15 +# 88.16 +# Unless required by applicable law or agreed to in writing, 88.17 +# software distributed under the License is distributed on an 88.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 88.19 +# KIND, either express or implied. See the License for the 88.20 +# specific language governing permissions and limitations 88.21 +# under the License. 88.22 +# 88.23 +--> 88.24 + 88.25 +# Contributing to Apache Cordova 88.26 + 88.27 +Anyone can contribute to Cordova. And we need your contributions. 88.28 + 88.29 +There are multiple ways to contribute: report bugs, improve the docs, and 88.30 +contribute code. 88.31 + 88.32 +For instructions on this, start with the 88.33 +[contribution overview](http://cordova.apache.org/#contribute). 88.34 + 88.35 +The details are explained there, but the important items are: 88.36 + - Sign and submit an Apache ICLA (Contributor License Agreement). 88.37 + - Have a Jira issue open that corresponds to your contribution. 88.38 + - Run the tests so your patch doesn't break existing functionality. 88.39 + 88.40 +We look forward to your contributions!
89.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 89.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/LICENSE Thu Jun 04 14:50:33 2015 +0200 89.3 @@ -0,0 +1,202 @@ 89.4 + 89.5 + Apache License 89.6 + Version 2.0, January 2004 89.7 + http://www.apache.org/licenses/ 89.8 + 89.9 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 89.10 + 89.11 + 1. Definitions. 89.12 + 89.13 + "License" shall mean the terms and conditions for use, reproduction, 89.14 + and distribution as defined by Sections 1 through 9 of this document. 89.15 + 89.16 + "Licensor" shall mean the copyright owner or entity authorized by 89.17 + the copyright owner that is granting the License. 89.18 + 89.19 + "Legal Entity" shall mean the union of the acting entity and all 89.20 + other entities that control, are controlled by, or are under common 89.21 + control with that entity. For the purposes of this definition, 89.22 + "control" means (i) the power, direct or indirect, to cause the 89.23 + direction or management of such entity, whether by contract or 89.24 + otherwise, or (ii) ownership of fifty percent (50%) or more of the 89.25 + outstanding shares, or (iii) beneficial ownership of such entity. 89.26 + 89.27 + "You" (or "Your") shall mean an individual or Legal Entity 89.28 + exercising permissions granted by this License. 89.29 + 89.30 + "Source" form shall mean the preferred form for making modifications, 89.31 + including but not limited to software source code, documentation 89.32 + source, and configuration files. 89.33 + 89.34 + "Object" form shall mean any form resulting from mechanical 89.35 + transformation or translation of a Source form, including but 89.36 + not limited to compiled object code, generated documentation, 89.37 + and conversions to other media types. 89.38 + 89.39 + "Work" shall mean the work of authorship, whether in Source or 89.40 + Object form, made available under the License, as indicated by a 89.41 + copyright notice that is included in or attached to the work 89.42 + (an example is provided in the Appendix below). 89.43 + 89.44 + "Derivative Works" shall mean any work, whether in Source or Object 89.45 + form, that is based on (or derived from) the Work and for which the 89.46 + editorial revisions, annotations, elaborations, or other modifications 89.47 + represent, as a whole, an original work of authorship. For the purposes 89.48 + of this License, Derivative Works shall not include works that remain 89.49 + separable from, or merely link (or bind by name) to the interfaces of, 89.50 + the Work and Derivative Works thereof. 89.51 + 89.52 + "Contribution" shall mean any work of authorship, including 89.53 + the original version of the Work and any modifications or additions 89.54 + to that Work or Derivative Works thereof, that is intentionally 89.55 + submitted to Licensor for inclusion in the Work by the copyright owner 89.56 + or by an individual or Legal Entity authorized to submit on behalf of 89.57 + the copyright owner. For the purposes of this definition, "submitted" 89.58 + means any form of electronic, verbal, or written communication sent 89.59 + to the Licensor or its representatives, including but not limited to 89.60 + communication on electronic mailing lists, source code control systems, 89.61 + and issue tracking systems that are managed by, or on behalf of, the 89.62 + Licensor for the purpose of discussing and improving the Work, but 89.63 + excluding communication that is conspicuously marked or otherwise 89.64 + designated in writing by the copyright owner as "Not a Contribution." 89.65 + 89.66 + "Contributor" shall mean Licensor and any individual or Legal Entity 89.67 + on behalf of whom a Contribution has been received by Licensor and 89.68 + subsequently incorporated within the Work. 89.69 + 89.70 + 2. Grant of Copyright License. Subject to the terms and conditions of 89.71 + this License, each Contributor hereby grants to You a perpetual, 89.72 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 89.73 + copyright license to reproduce, prepare Derivative Works of, 89.74 + publicly display, publicly perform, sublicense, and distribute the 89.75 + Work and such Derivative Works in Source or Object form. 89.76 + 89.77 + 3. Grant of Patent License. Subject to the terms and conditions of 89.78 + this License, each Contributor hereby grants to You a perpetual, 89.79 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 89.80 + (except as stated in this section) patent license to make, have made, 89.81 + use, offer to sell, sell, import, and otherwise transfer the Work, 89.82 + where such license applies only to those patent claims licensable 89.83 + by such Contributor that are necessarily infringed by their 89.84 + Contribution(s) alone or by combination of their Contribution(s) 89.85 + with the Work to which such Contribution(s) was submitted. If You 89.86 + institute patent litigation against any entity (including a 89.87 + cross-claim or counterclaim in a lawsuit) alleging that the Work 89.88 + or a Contribution incorporated within the Work constitutes direct 89.89 + or contributory patent infringement, then any patent licenses 89.90 + granted to You under this License for that Work shall terminate 89.91 + as of the date such litigation is filed. 89.92 + 89.93 + 4. Redistribution. You may reproduce and distribute copies of the 89.94 + Work or Derivative Works thereof in any medium, with or without 89.95 + modifications, and in Source or Object form, provided that You 89.96 + meet the following conditions: 89.97 + 89.98 + (a) You must give any other recipients of the Work or 89.99 + Derivative Works a copy of this License; and 89.100 + 89.101 + (b) You must cause any modified files to carry prominent notices 89.102 + stating that You changed the files; and 89.103 + 89.104 + (c) You must retain, in the Source form of any Derivative Works 89.105 + that You distribute, all copyright, patent, trademark, and 89.106 + attribution notices from the Source form of the Work, 89.107 + excluding those notices that do not pertain to any part of 89.108 + the Derivative Works; and 89.109 + 89.110 + (d) If the Work includes a "NOTICE" text file as part of its 89.111 + distribution, then any Derivative Works that You distribute must 89.112 + include a readable copy of the attribution notices contained 89.113 + within such NOTICE file, excluding those notices that do not 89.114 + pertain to any part of the Derivative Works, in at least one 89.115 + of the following places: within a NOTICE text file distributed 89.116 + as part of the Derivative Works; within the Source form or 89.117 + documentation, if provided along with the Derivative Works; or, 89.118 + within a display generated by the Derivative Works, if and 89.119 + wherever such third-party notices normally appear. The contents 89.120 + of the NOTICE file are for informational purposes only and 89.121 + do not modify the License. You may add Your own attribution 89.122 + notices within Derivative Works that You distribute, alongside 89.123 + or as an addendum to the NOTICE text from the Work, provided 89.124 + that such additional attribution notices cannot be construed 89.125 + as modifying the License. 89.126 + 89.127 + You may add Your own copyright statement to Your modifications and 89.128 + may provide additional or different license terms and conditions 89.129 + for use, reproduction, or distribution of Your modifications, or 89.130 + for any such Derivative Works as a whole, provided Your use, 89.131 + reproduction, and distribution of the Work otherwise complies with 89.132 + the conditions stated in this License. 89.133 + 89.134 + 5. Submission of Contributions. Unless You explicitly state otherwise, 89.135 + any Contribution intentionally submitted for inclusion in the Work 89.136 + by You to the Licensor shall be under the terms and conditions of 89.137 + this License, without any additional terms or conditions. 89.138 + Notwithstanding the above, nothing herein shall supersede or modify 89.139 + the terms of any separate license agreement you may have executed 89.140 + with Licensor regarding such Contributions. 89.141 + 89.142 + 6. Trademarks. This License does not grant permission to use the trade 89.143 + names, trademarks, service marks, or product names of the Licensor, 89.144 + except as required for reasonable and customary use in describing the 89.145 + origin of the Work and reproducing the content of the NOTICE file. 89.146 + 89.147 + 7. Disclaimer of Warranty. Unless required by applicable law or 89.148 + agreed to in writing, Licensor provides the Work (and each 89.149 + Contributor provides its Contributions) on an "AS IS" BASIS, 89.150 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 89.151 + implied, including, without limitation, any warranties or conditions 89.152 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 89.153 + PARTICULAR PURPOSE. You are solely responsible for determining the 89.154 + appropriateness of using or redistributing the Work and assume any 89.155 + risks associated with Your exercise of permissions under this License. 89.156 + 89.157 + 8. Limitation of Liability. In no event and under no legal theory, 89.158 + whether in tort (including negligence), contract, or otherwise, 89.159 + unless required by applicable law (such as deliberate and grossly 89.160 + negligent acts) or agreed to in writing, shall any Contributor be 89.161 + liable to You for damages, including any direct, indirect, special, 89.162 + incidental, or consequential damages of any character arising as a 89.163 + result of this License or out of the use or inability to use the 89.164 + Work (including but not limited to damages for loss of goodwill, 89.165 + work stoppage, computer failure or malfunction, or any and all 89.166 + other commercial damages or losses), even if such Contributor 89.167 + has been advised of the possibility of such damages. 89.168 + 89.169 + 9. Accepting Warranty or Additional Liability. While redistributing 89.170 + the Work or Derivative Works thereof, You may choose to offer, 89.171 + and charge a fee for, acceptance of support, warranty, indemnity, 89.172 + or other liability obligations and/or rights consistent with this 89.173 + License. However, in accepting such obligations, You may act only 89.174 + on Your own behalf and on Your sole responsibility, not on behalf 89.175 + of any other Contributor, and only if You agree to indemnify, 89.176 + defend, and hold each Contributor harmless for any liability 89.177 + incurred by, or claims asserted against, such Contributor by reason 89.178 + of your accepting any such warranty or additional liability. 89.179 + 89.180 + END OF TERMS AND CONDITIONS 89.181 + 89.182 + APPENDIX: How to apply the Apache License to your work. 89.183 + 89.184 + To apply the Apache License to your work, attach the following 89.185 + boilerplate notice, with the fields enclosed by brackets "[]" 89.186 + replaced with your own identifying information. (Don't include 89.187 + the brackets!) The text should be enclosed in the appropriate 89.188 + comment syntax for the file format. We also recommend that a 89.189 + file or class name and description of purpose be included on the 89.190 + same "printed page" as the copyright notice for easier 89.191 + identification within third-party archives. 89.192 + 89.193 + Copyright [yyyy] [name of copyright owner] 89.194 + 89.195 + Licensed under the Apache License, Version 2.0 (the "License"); 89.196 + you may not use this file except in compliance with the License. 89.197 + You may obtain a copy of the License at 89.198 + 89.199 + http://www.apache.org/licenses/LICENSE-2.0 89.200 + 89.201 + Unless required by applicable law or agreed to in writing, software 89.202 + distributed under the License is distributed on an "AS IS" BASIS, 89.203 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 89.204 + See the License for the specific language governing permissions and 89.205 + limitations under the License. 89.206 \ No newline at end of file
90.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 90.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/NOTICE Thu Jun 04 14:50:33 2015 +0200 90.3 @@ -0,0 +1,5 @@ 90.4 +Apache Cordova 90.5 +Copyright 2012 The Apache Software Foundation 90.6 + 90.7 +This product includes software developed at 90.8 +The Apache Software Foundation (http://www.apache.org/).
91.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 91.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/README.md Thu Jun 04 14:50:33 2015 +0200 91.3 @@ -0,0 +1,22 @@ 91.4 +<!--- 91.5 + license: Licensed to the Apache Software Foundation (ASF) under one 91.6 + or more contributor license agreements. See the NOTICE file 91.7 + distributed with this work for additional information 91.8 + regarding copyright ownership. The ASF licenses this file 91.9 + to you under the Apache License, Version 2.0 (the 91.10 + "License"); you may not use this file except in compliance 91.11 + with the License. You may obtain a copy of the License at 91.12 + 91.13 + http://www.apache.org/licenses/LICENSE-2.0 91.14 + 91.15 + Unless required by applicable law or agreed to in writing, 91.16 + software distributed under the License is distributed on an 91.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 91.18 + KIND, either express or implied. See the License for the 91.19 + specific language governing permissions and limitations 91.20 + under the License. 91.21 +--> 91.22 + 91.23 +# org.apache.cordova.splashscreen 91.24 + 91.25 +Plugin documentation: [doc/index.md](doc/index.md)
92.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 92.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/RELEASENOTES.md Thu Jun 04 14:50:33 2015 +0200 92.3 @@ -0,0 +1,100 @@ 92.4 +<!-- 92.5 +# 92.6 +# Licensed to the Apache Software Foundation (ASF) under one 92.7 +# or more contributor license agreements. See the NOTICE file 92.8 +# distributed with this work for additional information 92.9 +# regarding copyright ownership. The ASF licenses this file 92.10 +# to you under the Apache License, Version 2.0 (the 92.11 +# "License"); you may not use this file except in compliance 92.12 +# with the License. You may obtain a copy of the License at 92.13 +# 92.14 +# http://www.apache.org/licenses/LICENSE-2.0 92.15 +# 92.16 +# Unless required by applicable law or agreed to in writing, 92.17 +# software distributed under the License is distributed on an 92.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 92.19 +# KIND, either express or implied. See the License for the 92.20 +# specific language governing permissions and limitations 92.21 +# under the License. 92.22 +# 92.23 +--> 92.24 +# Release Notes 92.25 + 92.26 +### 0.2.2 (Sept 25, 2013) 92.27 +* CB-4889 bumping&resetting version 92.28 +* CB-4889 renaming org.apache.cordova.core.splashscreen to org.apache.cordova.splashscreen 92.29 +* Rename CHANGELOG.md -> RELEASENOTES.md 92.30 +* [CB-4806] Update splashscreen image bounds for iOS 7 92.31 +* [CB-4752] Incremented plugin version on dev branch. 92.32 + 92.33 +### 0.2.3 (Oct 9, 2013) 92.34 +* [CB-4806] Re-fix Update splashscreen image bounds for iOS 7 92.35 +* [CB-4934] plugin-splashscreen should not show by default on Windows8 92.36 +* [CB-4929] plugin-splashscreen not loading proxy windows8 92.37 +* [CB-4915] Incremented plugin version on dev branch. 92.38 + 92.39 +### 0.2.4 (Oct 28, 2013) 92.40 +* CB-5128: add repo + issue tag to plugin.xml for splashscreen plugin 92.41 +* [CB-5010] Incremented plugin version on dev branch. 92.42 + 92.43 +### 0.2.5 (Dec 4, 2013) 92.44 +* add ubuntu platform 92.45 +* Added amazon-fireos platform. Change to use amazon-fireos as a platform if the user agent string contains 'cordova-amazon-fireos' 92.46 +* CB-5124 - Remove splashscreen config.xml values from iOS Configuration Docs, move to plugin docs 92.47 + 92.48 +### 0.2.6 (Jan 02, 2014) 92.49 +* CB-5658 Add doc/index.md for Splashscreen plugin 92.50 +* Handle error when splash image is missing. 92.51 + 92.52 +### 0.2.7 (Feb 05, 2014) 92.53 +* [CB-3562] Fix aspect ratio on landscape-only iPhone applications 92.54 +* CB-4051 fix for splashscreen rotation problem 92.55 + 92.56 +### 0.3.0 (Apr 17, 2014) 92.57 +* Add Tizen support to plugin 92.58 +* CB-6422: [windows8] use cordova/exec/proxy 92.59 +* CB-4051: [ios] - Re-fix - Splashscreen rotation problem (closes #13) 92.60 +* CB-6460: Update license headers 92.61 +* CB-6465: Add license headers to Tizen code 92.62 +* Add NOTICE file 92.63 + 92.64 +### 0.3.1 (Jun 05, 2014) 92.65 +* documentation translation: cordova-plugin-splashscreen 92.66 +* Lisa testing pulling in plugins for plugin: cordova-plugin-splashscreen 92.67 +* Lisa testing pulling in plugins for plugin: cordova-plugin-splashscreen 92.68 +* Lisa testing pulling in plugins for plugin: cordova-plugin-splashscreen 92.69 +* Lisa testing pulling in plugins for plugin: cordova-plugin-splashscreen 92.70 +* CB-6810 Add license to CONTRIBUTING.md 92.71 +* [wp8] updated quirk for and combined iOS,WP8,BB10 quirks as they are all the same 92.72 +* [wp] implemented OnInit so splash screen can be shown before cordova page is loaded 92.73 +* [wp] plugin must be autoloaded for AutoHideSplashScreen preference to work 92.74 +* CB-6483 Use splash screen image from manifest on Windows8 92.75 +* CB-6491 add CONTRIBUTING.md 92.76 +* Revert "Merge branch 'tizen' of http://github.com/siovene/cordova-plugin-splashscreen" 92.77 + 92.78 +### 0.3.2 (Aug 06, 2014) 92.79 +* CB-6127 Updated translations for docs 92.80 +* CB-7041 ios: Fix image filename logic when setting the iPad splash screen 92.81 +* fixes Splashscreen crash on WP8 92.82 +* Remove outdated doc 92.83 + 92.84 +### 0.3.3 (Sep 17, 2014) 92.85 +* CB-7249 cordova-plugin-splashscreen documentation translation 92.86 +* Renamed test dir, added nested plugin.xml 92.87 +* added documentation for manual tests 92.88 +* CB-7196 port splashscreen tests to framework 92.89 + 92.90 +### 0.3.4 (Oct 03, 2014) 92.91 +* Finalized iOS splash screen (image name) tests. 176 tests in all, 44 for each type of device (iPad, iPhone, iPhone5, iPhone6, iPhone 6 Plus). 92.92 +* CB-7633 - (Re-fix based on updated unit tests) iPhone 6 Plus support 92.93 +* Updated iOS tests for locked orientations 92.94 +* Added more iOS splash screen tests. 92.95 +* CB-7633 - Add support for iPhone 6/6+ 92.96 +* Added failing iPhone 6/6 Plus tests. 92.97 +* Added 'npm test' 92.98 +* CB-7663 - iOS unit tests for splash screen 92.99 +* Properly formatted splashscreen preference docs. 92.100 + 92.101 +### 0.3.5 (Dec 02, 2014) 92.102 +* CB-7204 - Race condition when hiding and showing spinner (closes #21) 92.103 +* CB-7700 cordova-plugin-splashscreen documentation translation: cordova-plugin-splashscreen
93.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 93.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/de/index.md Thu Jun 04 14:50:33 2015 +0200 93.3 @@ -0,0 +1,75 @@ 93.4 +<!--- 93.5 + Licensed to the Apache Software Foundation (ASF) under one 93.6 + or more contributor license agreements. See the NOTICE file 93.7 + distributed with this work for additional information 93.8 + regarding copyright ownership. The ASF licenses this file 93.9 + to you under the Apache License, Version 2.0 (the 93.10 + "License"); you may not use this file except in compliance 93.11 + with the License. You may obtain a copy of the License at 93.12 + 93.13 + http://www.apache.org/licenses/LICENSE-2.0 93.14 + 93.15 + Unless required by applicable law or agreed to in writing, 93.16 + software distributed under the License is distributed on an 93.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 93.18 + KIND, either express or implied. See the License for the 93.19 + specific language governing permissions and limitations 93.20 + under the License. 93.21 +--> 93.22 + 93.23 +# org.apache.cordova.splashscreen 93.24 + 93.25 +Dieses Plugin zeigt und verbirgt einen Splash-Screen beim Start der Anwendung. 93.26 + 93.27 +## Installation 93.28 + 93.29 + cordova plugin add org.apache.cordova.splashscreen 93.30 + 93.31 + 93.32 +## Unterstützte Plattformen 93.33 + 93.34 +* Amazon Fire OS 93.35 +* Android 93.36 +* BlackBerry 10 93.37 +* iOS 93.38 +* Windows Phone 7 und 8 93.39 +* Windows 8 93.40 + 93.41 +## Methoden 93.42 + 93.43 +* SplashScreen.Show 93.44 +* SplashScreen.Hide 93.45 + 93.46 +### Android Eigenarten 93.47 + 93.48 +Sie müssen in der config.xml folgende Einstellungen vornehmen: 93.49 + 93.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 93.51 + 93.52 +Wo Foo ist der Name der Datei Splashscreen, vorzugsweise eine 9-Patch-Datei. Stellen Sie sicher, Splashcreen Dateien zu Ihrem Res/Xml-Verzeichnis unter den entsprechenden Ordnern hinzuzufügen. Der zweite Parameter stellt dar, wie lange das Splashscreen in Millisekunden angezeigt werden. Es wird standardmäßig auf 3000 ms. Weitere Informationen finden Sie unter [Symbole und Splash-Screens][1] . 93.53 + 93.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 93.55 + 93.56 +## SplashScreen.Hide 93.57 + 93.58 +Schließen Sie den Splash-Screen. 93.59 + 93.60 + Navigator.SplashScreen.Hide(); 93.61 + 93.62 + 93.63 +### BlackBerry 10, WP8, iOS Eigenarten 93.64 + 93.65 +Die `config.xml` der Datei `AutoHideSplashScreen` muss `false` . Verstecken des Begrüßungsbildschirms für zwei Sekunden Verzögerung, fügen Sie einen Timer wie die folgende in der `deviceready` -Ereignishandler: 93.66 + 93.67 + setTimeout(function() {navigator.splashscreen.hide(); 93.68 + }, 2000); 93.69 + 93.70 + 93.71 +## SplashScreen.Show 93.72 + 93.73 +Zeigt den Begrüßungsbildschirm. 93.74 + 93.75 + Navigator.SplashScreen.Show(); 93.76 + 93.77 + 93.78 +Ihre Anwendung kann nicht aufgerufen werden `navigator.splashscreen.show()` bis die app gestartet hat und das `deviceready` -Ereignis ausgelöst hat. Aber da in der Regel der Splash-Screen soll sichtbar sein, bevor die Anwendung gestartet wurde, scheint die Niederlage der Zweck des Begrüßungsbildschirms. Somit einige Konfiguration in `config.xml` wird automatisch `show` den Splash-Screen unmittelbar nach Ihrer app starten und bevor es voll gestartet und hat das `deviceready` Ereignis. Weitere Informationen zu dieser Konfiguration finden Sie unter [Symbole und Splash-Screens][1] . Aus diesem Grund ist es unwahrscheinlich, dass Sie aufrufen müssen `navigator.splashscreen.show()` den Splash-Screen beim Starten der app sichtbar zu machen. 93.79 \ No newline at end of file
94.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 94.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/es/index.md Thu Jun 04 14:50:33 2015 +0200 94.3 @@ -0,0 +1,75 @@ 94.4 +<!--- 94.5 + Licensed to the Apache Software Foundation (ASF) under one 94.6 + or more contributor license agreements. See the NOTICE file 94.7 + distributed with this work for additional information 94.8 + regarding copyright ownership. The ASF licenses this file 94.9 + to you under the Apache License, Version 2.0 (the 94.10 + "License"); you may not use this file except in compliance 94.11 + with the License. You may obtain a copy of the License at 94.12 + 94.13 + http://www.apache.org/licenses/LICENSE-2.0 94.14 + 94.15 + Unless required by applicable law or agreed to in writing, 94.16 + software distributed under the License is distributed on an 94.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 94.18 + KIND, either express or implied. See the License for the 94.19 + specific language governing permissions and limitations 94.20 + under the License. 94.21 +--> 94.22 + 94.23 +# org.apache.cordova.splashscreen 94.24 + 94.25 +Este plugin muestra y esconde una pantalla de bienvenida durante el inicio de la aplicación. 94.26 + 94.27 +## Instalación 94.28 + 94.29 + cordova plugin add org.apache.cordova.splashscreen 94.30 + 94.31 + 94.32 +## Plataformas soportadas 94.33 + 94.34 +* Amazon fire OS 94.35 +* Android 94.36 +* BlackBerry 10 94.37 +* iOS 94.38 +* Windows Phone 7 y 8 94.39 +* Windows 8 94.40 + 94.41 +## Métodos 94.42 + 94.43 +* splashscreen.show 94.44 +* splashscreen.hide 94.45 + 94.46 +### Rarezas Android 94.47 + 94.48 +En el archivo config.xml, tienes que añadir las siguientes preferencias: 94.49 + 94.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 94.51 + 94.52 +Donde foo es el nombre del archivo splashscreen, preferiblemente un archivo de 9 parche. Asegúrese de agregar tus archivos splashcreen en tu directorio res/xml bajo las carpetas apropiadas. El segundo parámetro representa cuánto aparecerán el splashscreen en milisegundos. Valor predeterminado es ms 3000. Ver [los iconos y salpicadura pantallas][1] para obtener más información. 94.53 + 94.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 94.55 + 94.56 +## splashscreen.hide 94.57 + 94.58 +Despedir a la pantalla de bienvenida. 94.59 + 94.60 + Navigator.SplashScreen.Hide(); 94.61 + 94.62 + 94.63 +### BlackBerry 10, WP8, iOS Quirk 94.64 + 94.65 +El `config.xml` del archivo `AutoHideSplashScreen` la configuración debe ser `false` . Para retrasar oculta la pantalla splash durante dos segundos, agregue un temporizador como la siguiente en el `deviceready` controlador de eventos: 94.66 + 94.67 + setTimeout(function() {navigator.splashscreen.hide(); 94.68 + }, 2000); 94.69 + 94.70 + 94.71 +## splashscreen.show 94.72 + 94.73 +Muestra la pantalla de bienvenida. 94.74 + 94.75 + Navigator.SplashScreen.Show(); 94.76 + 94.77 + 94.78 +La aplicación no se puede llamar `navigator.splashscreen.show()` hasta que haya iniciado la aplicación y el `deviceready` evento ha despedido. Pero puesto que normalmente la pantalla está destinada a ser visible antes de que comience su aplicación, que parecería que el propósito de la pantalla de bienvenida. Proporcionar cierta configuración en `config.xml` automáticamente `show` la pantalla de presentación inmediatamente después de su lanzamiento de la aplicación y antes de ser completamente ha iniciado y recibió el `deviceready` evento. Ver [los iconos y salpicadura pantallas][1] para obtener más información sobre haciendo esta configuración. Por esta razón, es poco probable que necesitas llamar a `navigator.splashscreen.show()` para hacer la pantalla visible para el inicio de la aplicación. 94.79 \ No newline at end of file
95.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 95.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/fr/index.md Thu Jun 04 14:50:33 2015 +0200 95.3 @@ -0,0 +1,75 @@ 95.4 +<!--- 95.5 + Licensed to the Apache Software Foundation (ASF) under one 95.6 + or more contributor license agreements. See the NOTICE file 95.7 + distributed with this work for additional information 95.8 + regarding copyright ownership. The ASF licenses this file 95.9 + to you under the Apache License, Version 2.0 (the 95.10 + "License"); you may not use this file except in compliance 95.11 + with the License. You may obtain a copy of the License at 95.12 + 95.13 + http://www.apache.org/licenses/LICENSE-2.0 95.14 + 95.15 + Unless required by applicable law or agreed to in writing, 95.16 + software distributed under the License is distributed on an 95.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 95.18 + KIND, either express or implied. See the License for the 95.19 + specific language governing permissions and limitations 95.20 + under the License. 95.21 +--> 95.22 + 95.23 +# org.apache.cordova.splashscreen 95.24 + 95.25 +Ce plugin affiche et masque un écran de démarrage lors du lancement de l'application. 95.26 + 95.27 +## Installation 95.28 + 95.29 + cordova plugin add org.apache.cordova.splashscreen 95.30 + 95.31 + 95.32 +## Plates-formes prises en charge 95.33 + 95.34 +* Amazon Fire OS 95.35 +* Android 95.36 +* BlackBerry 10 95.37 +* iOS 95.38 +* Windows Phone 7 et 8 95.39 +* Windows 8 95.40 + 95.41 +## Méthodes 95.42 + 95.43 +* splashscreen.Show 95.44 +* splashscreen.Hide 95.45 + 95.46 +### Quirks Android 95.47 + 95.48 +Dans votre fichier config.xml, vous devez ajouter les préférences suivantes : 95.49 + 95.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 95.51 + 95.52 +Où foo est le nom du fichier splashscreen, préférablement un fichier de 9 correctif. Assurez-vous d'ajouter vos fichiers splashcreen dans votre répertoire res/xml dans les dossiers appropriés. Le deuxième paramètre représente combien de temps le splashscreen apparaîtra en millisecondes. Il est par défaut à 3000 ms. Pour plus d'informations, consultez [icônes et écrans de démarrage][1] . 95.53 + 95.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 95.55 + 95.56 +## splashscreen.Hide 95.57 + 95.58 +Faire disparaître de l'écran de démarrage. 95.59 + 95.60 + Navigator.SplashScreen.Hide() ; 95.61 + 95.62 + 95.63 +### BlackBerry 10, WP8, iOS Quirk 95.64 + 95.65 +La `config.xml` du fichier `AutoHideSplashScreen` doit être `false` . Pour retarder la cacher l'écran de démarrage pendant deux secondes, ajouter un minuteur comme suit dans la `deviceready` gestionnaire d'événements : 95.66 + 95.67 + setTimeout(function() {navigator.splashscreen.hide() ; 95.68 + }, 2000) ; 95.69 + 95.70 + 95.71 +## splashscreen.Show 95.72 + 95.73 +Affiche l'écran de démarrage. 95.74 + 95.75 + Navigator.SplashScreen.Show() ; 95.76 + 95.77 + 95.78 +Votre application ne peut pas appeler `navigator.splashscreen.show()` jusqu'à ce que l'application a commencé et le `deviceready` événement a été déclenché. Mais puisqu'en général, l'écran de démarrage est destiné à être visible avant que votre application a commencé, qui semblerait à l'encontre des objectifs de l'écran de démarrage. Fournir une configuration en `config.xml` sera automatiquement `show` l'écran de démarrage immédiatement après votre lancement de l'app et avant qu'il a complètement démarré et a reçu le `deviceready` événement. Voir les [icônes et les écrans de démarrage][1] pour plus d'informations sur la conduite de cette configuration. Pour cette raison, il est peu probable que vous devez appeler `navigator.splashscreen.show()` pour rendre l'écran de démarrage visible pour le démarrage de l'application. 95.79 \ No newline at end of file
96.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 96.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/index.md Thu Jun 04 14:50:33 2015 +0200 96.3 @@ -0,0 +1,88 @@ 96.4 +<!--- 96.5 + Licensed to the Apache Software Foundation (ASF) under one 96.6 + or more contributor license agreements. See the NOTICE file 96.7 + distributed with this work for additional information 96.8 + regarding copyright ownership. The ASF licenses this file 96.9 + to you under the Apache License, Version 2.0 (the 96.10 + "License"); you may not use this file except in compliance 96.11 + with the License. You may obtain a copy of the License at 96.12 + 96.13 + http://www.apache.org/licenses/LICENSE-2.0 96.14 + 96.15 + Unless required by applicable law or agreed to in writing, 96.16 + software distributed under the License is distributed on an 96.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 96.18 + KIND, either express or implied. See the License for the 96.19 + specific language governing permissions and limitations 96.20 + under the License. 96.21 +--> 96.22 + 96.23 +# org.apache.cordova.splashscreen 96.24 + 96.25 +This plugin displays and hides a splash screen during application launch. 96.26 + 96.27 +## Installation 96.28 + 96.29 + cordova plugin add org.apache.cordova.splashscreen 96.30 + 96.31 + 96.32 +## Supported Platforms 96.33 + 96.34 +- Amazon Fire OS 96.35 +- Android 96.36 +- BlackBerry 10 96.37 +- iOS 96.38 +- Windows Phone 7 and 8 96.39 +- Windows 8 96.40 + 96.41 + 96.42 +## Methods 96.43 + 96.44 +- splashscreen.show 96.45 +- splashscreen.hide 96.46 + 96.47 +### Android Quirks 96.48 + 96.49 +In your config.xml, you need to add the following preferences: 96.50 + 96.51 + <preference name="SplashScreen" value="foo" /> 96.52 + <preference name="SplashScreenDelay" value="10000" /> 96.53 + 96.54 +Where foo is the name of the splashscreen file, preferably a 9 patch file. Make sure to add your splashcreen files to your res/xml directory under the appropriate folders. The second parameter represents how long the splashscreen will appear in milliseconds. It defaults to 3000 ms. See [Icons and Splash Screens](http://cordova.apache.org/docs/en/edge/config_ref_images.md.html) 96.55 +for more information. 96.56 + 96.57 +## splashscreen.hide 96.58 + 96.59 +Dismiss the splash screen. 96.60 + 96.61 + navigator.splashscreen.hide(); 96.62 + 96.63 + 96.64 +### BlackBerry 10, WP8, iOS Quirk 96.65 + 96.66 +The `config.xml` file's `AutoHideSplashScreen` setting must be 96.67 +`false`. To delay hiding the splash screen for two seconds, add a 96.68 +timer such as the following in the `deviceready` event handler: 96.69 + 96.70 + setTimeout(function() { 96.71 + navigator.splashscreen.hide(); 96.72 + }, 2000); 96.73 + 96.74 +## splashscreen.show 96.75 + 96.76 +Displays the splash screen. 96.77 + 96.78 + navigator.splashscreen.show(); 96.79 + 96.80 + 96.81 +Your application cannot call `navigator.splashscreen.show()` until the app has 96.82 +started and the `deviceready` event has fired. But since typically the splash 96.83 +screen is meant to be visible before your app has started, that would seem to 96.84 +defeat the purpose of the splash screen. Providing some configuration in 96.85 +`config.xml` will automatically `show` the splash screen immediately after your 96.86 +app launch and before it has fully started and received the `deviceready` 96.87 +event. See [Icons and Splash Screens](http://cordova.apache.org/docs/en/edge/config_ref_images.md.html) 96.88 +for more information on doing this configuration. For this reason, it is 96.89 +unlikely you need to call `navigator.splashscreen.show()` to make the splash 96.90 +screen visible for app startup. 96.91 +
97.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 97.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/it/index.md Thu Jun 04 14:50:33 2015 +0200 97.3 @@ -0,0 +1,75 @@ 97.4 +<!--- 97.5 + Licensed to the Apache Software Foundation (ASF) under one 97.6 + or more contributor license agreements. See the NOTICE file 97.7 + distributed with this work for additional information 97.8 + regarding copyright ownership. The ASF licenses this file 97.9 + to you under the Apache License, Version 2.0 (the 97.10 + "License"); you may not use this file except in compliance 97.11 + with the License. You may obtain a copy of the License at 97.12 + 97.13 + http://www.apache.org/licenses/LICENSE-2.0 97.14 + 97.15 + Unless required by applicable law or agreed to in writing, 97.16 + software distributed under the License is distributed on an 97.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 97.18 + KIND, either express or implied. See the License for the 97.19 + specific language governing permissions and limitations 97.20 + under the License. 97.21 +--> 97.22 + 97.23 +# org.apache.cordova.splashscreen 97.24 + 97.25 +Questo plugin Visualizza e nasconde una schermata iniziale durante l'avvio dell'applicazione. 97.26 + 97.27 +## Installazione 97.28 + 97.29 + cordova plugin add org.apache.cordova.splashscreen 97.30 + 97.31 + 97.32 +## Piattaforme supportate 97.33 + 97.34 +* Amazon fuoco OS 97.35 +* Android 97.36 +* BlackBerry 10 97.37 +* iOS 97.38 +* Windows Phone 7 e 8 97.39 +* Windows 8 97.40 + 97.41 +## Metodi 97.42 + 97.43 +* splashscreen 97.44 +* splashscreen.Hide 97.45 + 97.46 +### Stranezze Android 97.47 + 97.48 +Nel vostro config. xml, è necessario aggiungere le seguenti preferenze: 97.49 + 97.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 97.51 + 97.52 +Dove foo è il nome del file splashscreen, preferibilmente un file 9 patch. Assicurati di aggiungere i tuoi file splashcreen res/xml nella directory sotto cartelle appropriate. Il secondo parametro rappresenta quanto tempo lo splashscreen apparirà in millisecondi. Il valore predefinito è 3000 ms. Per ulteriori informazioni, vedere [icone e schermate iniziali][1] . 97.53 + 97.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 97.55 + 97.56 +## splashscreen.Hide 97.57 + 97.58 +Respingere la schermata iniziale. 97.59 + 97.60 + Navigator.SplashScreen.Hide(); 97.61 + 97.62 + 97.63 +### BlackBerry 10, WP8, iOS Quirk 97.64 + 97.65 +Il `config.xml` di file `AutoHideSplashScreen` impostazione deve essere `false` . Per ritardare nascondendo la schermata iniziale per due secondi, aggiungere un timer ad esempio nel `deviceready` gestore di evento: 97.66 + 97.67 + setTimeout(function() {navigator.splashscreen.hide(); 97.68 + }, 2000); 97.69 + 97.70 + 97.71 +## splashscreen 97.72 + 97.73 +Visualizza la schermata iniziale. 97.74 + 97.75 + Navigator.SplashScreen.Show(); 97.76 + 97.77 + 97.78 +L'applicazione non può chiamare `navigator.splashscreen.show()` fino a quando ha iniziato l'app e il `deviceready` ha generato l'evento. Ma poiché in genere la schermata iniziale è destinata ad essere visibile prima app ha iniziato, che sembrerebbe per sconfiggere lo scopo della schermata iniziale. Fornendo qualche configurazione in `config.xml` verrà automaticamente `show` la schermata iniziale subito dopo il lancio dell'app e prima che completamente ha iniziato e ha ricevuto il `deviceready` evento. Per ulteriori informazioni su facendo questa configurazione, vedere [icone e schermate iniziali][1] . Per questo motivo, è improbabile che dovete chiamare `navigator.splashscreen.show()` per rendere la schermata visibile per avvio di app. 97.79 \ No newline at end of file
98.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 98.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/ja/index.md Thu Jun 04 14:50:33 2015 +0200 98.3 @@ -0,0 +1,74 @@ 98.4 +<!--- 98.5 + Licensed to the Apache Software Foundation (ASF) under one 98.6 + or more contributor license agreements. See the NOTICE file 98.7 + distributed with this work for additional information 98.8 + regarding copyright ownership. The ASF licenses this file 98.9 + to you under the Apache License, Version 2.0 (the 98.10 + "License"); you may not use this file except in compliance 98.11 + with the License. You may obtain a copy of the License at 98.12 + 98.13 + http://www.apache.org/licenses/LICENSE-2.0 98.14 + 98.15 + Unless required by applicable law or agreed to in writing, 98.16 + software distributed under the License is distributed on an 98.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 98.18 + KIND, either express or implied. See the License for the 98.19 + specific language governing permissions and limitations 98.20 + under the License. 98.21 +--> 98.22 + 98.23 +# org.apache.cordova.splashscreen 98.24 + 98.25 +このプラグインが表示され、アプリケーションの起動中にスプラッシュ スクリーンを非表示にします。 98.26 + 98.27 +## インストール 98.28 + 98.29 + cordova plugin add org.apache.cordova.splashscreen 98.30 + 98.31 + 98.32 +## サポートされているプラットフォーム 98.33 + 98.34 +* アマゾン火 OS 98.35 +* アンドロイド 98.36 +* ブラックベリー 10 98.37 +* iOS 98.38 +* Windows Phone 7 と 8 98.39 +* Windows 8 98.40 + 98.41 +## メソッド 98.42 + 98.43 +* splashscreen.show 98.44 +* splashscreen.hide 98.45 + 98.46 +### Android の癖 98.47 + 98.48 +あなたの config.xml を以下の設定を追加する必要があります。 98.49 + 98.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 98.51 + 98.52 +Foo ができれば 9 パッチファイル splashscreen ファイルの名前です。 解像度/xml ディレクトリの適切なフォルダーの下に splashcreen ファイルを追加することを確認します。 2 番目のパラメーターは、スプラッシュ ・ スクリーンがの表示時間 (ミリ秒単位) を表します。 デフォルトでは 3000 ミリ秒です。 詳細については、[アイコンとスプラッシュ画面][1]を参照してください。 98.53 + 98.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 98.55 + 98.56 +## splashscreen.hide 98.57 + 98.58 +スプラッシュ スクリーンを閉じます。 98.59 + 98.60 + navigator.splashscreen.hide(); 98.61 + 98.62 + 98.63 +### ブラックベリー 10、WP8、iOS の気まぐれ 98.64 + 98.65 +`config.xml`ファイルの `AutoHideSplashScreen` 設定する必要があります `false` 。 遅延を 2 秒間スプラッシュ スクリーンを非表示、タイマーを追加しますで次のように `deviceready` イベント ハンドラー。 98.66 + 98.67 + setTimeout(function() {navigator.splashscreen.hide();}, 2000年); 98.68 + 98.69 + 98.70 +## splashscreen.show 98.71 + 98.72 +スプラッシュ画面が表示されます。 98.73 + 98.74 + navigator.splashscreen.show(); 98.75 + 98.76 + 98.77 +アプリケーションを呼び出すことはできません `navigator.splashscreen.show()` 、アプリが開始されるまで、 `deviceready` イベントが発生します。 しかし、以来、通常スプラッシュ画面アプリ開始前に表示するものですと思われる、スプラッシュ スクリーンの目的の敗北します。 いくつかの構成を提供する `config.xml` は自動的に `show` スプラッシュ画面、アプリを起動後すぐに、それが完全に起動し、受信する前に、 `deviceready` イベント。 詳細についてはこの構成を行うには、[アイコンとスプラッシュ画面][1]を参照してください。 このような理由から、それは可能性を呼び出す必要があります `navigator.splashscreen.show()` アプリ起動時のスプラッシュ画面を見やすくします。 98.78 \ No newline at end of file
99.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 99.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/ko/index.md Thu Jun 04 14:50:33 2015 +0200 99.3 @@ -0,0 +1,75 @@ 99.4 +<!--- 99.5 + Licensed to the Apache Software Foundation (ASF) under one 99.6 + or more contributor license agreements. See the NOTICE file 99.7 + distributed with this work for additional information 99.8 + regarding copyright ownership. The ASF licenses this file 99.9 + to you under the Apache License, Version 2.0 (the 99.10 + "License"); you may not use this file except in compliance 99.11 + with the License. You may obtain a copy of the License at 99.12 + 99.13 + http://www.apache.org/licenses/LICENSE-2.0 99.14 + 99.15 + Unless required by applicable law or agreed to in writing, 99.16 + software distributed under the License is distributed on an 99.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 99.18 + KIND, either express or implied. See the License for the 99.19 + specific language governing permissions and limitations 99.20 + under the License. 99.21 +--> 99.22 + 99.23 +# org.apache.cordova.splashscreen 99.24 + 99.25 +이 플러그인은 표시 하 고 응용 프로그램 실행 하는 동안 시작 화면을 숨깁니다. 99.26 + 99.27 +## 설치 99.28 + 99.29 + cordova plugin add org.apache.cordova.splashscreen 99.30 + 99.31 + 99.32 +## 지원 되는 플랫폼 99.33 + 99.34 +* 아마존 화재 운영 체제 99.35 +* 안 드 로이드 99.36 +* 블랙베리 10 99.37 +* iOS 99.38 +* Windows Phone 7과 8 99.39 +* 윈도우 8 99.40 + 99.41 +## 메서드 99.42 + 99.43 +* splashscreen.show 99.44 +* splashscreen.hide 99.45 + 99.46 +### 안 드 로이드 단점 99.47 + 99.48 +당신의 config.xml에 다음 환경 설정에 추가 해야 합니다. 99.49 + 99.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 99.51 + 99.52 +여기서 foo splashscreen 파일, 선호 9 패치 파일의 이름입니다. 적절 한 폴더 아래 res/xml 디렉토리에 splashcreen 파일을 추가 해야 합니다. 두 번째 매개 변수는 splashscreen 얼마나 밀리초 단위로 표시 됩니다 나타냅니다. 3000 ms 기본값으로 사용 됩니다. 자세한 내용은 [아이콘 및 시작 화면을][1] 참조 하십시오. 99.53 + 99.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 99.55 + 99.56 +## splashscreen.hide 99.57 + 99.58 +시작 화면을 닫습니다. 99.59 + 99.60 + navigator.splashscreen.hide(); 99.61 + 99.62 + 99.63 +### 블랙베리 10, WP8, iOS 특질 99.64 + 99.65 +`config.xml`파일의 `AutoHideSplashScreen` 설정을 해야 합니다 `false` . 2 초 동안 시작 화면을 숨기고 지연에 다음과 같이 타이머 추가 `deviceready` 이벤트 처리기: 99.66 + 99.67 + setTimeout(function() {navigator.splashscreen.hide(); 99.68 + }, 2000); 99.69 + 99.70 + 99.71 +## splashscreen.show 99.72 + 99.73 +시작 화면을 표시합니다. 99.74 + 99.75 + navigator.splashscreen.show(); 99.76 + 99.77 + 99.78 +응용 프로그램 호출할 수 없습니다 `navigator.splashscreen.show()` 응용 프로그램은 시작 될 때까지 및 `deviceready` 이벤트를 해 고 했다. 하지만 그 스플래시 스크린의 목적 것 같다 일반적으로 시작 화면이 당신의 애플 리 케이 션 시작 하기 전에 표시 될 운명이 다, 이후. 몇 가지 구성을 제공 `config.xml` 자동으로 `show` 시작 화면 응용 프로그램 실행 후 즉시 및 그것은 완벽 하 게 시작 하 고 받은 전에 `deviceready` 이벤트. 이 구성 하 고 자세한 내용은 [아이콘 및 시작 화면을][1] 참조 하십시오. 이러한 이유로, 그것은 가능성이 호출 해야 `navigator.splashscreen.show()` 시작 화면은 응용 프로그램 시작에 대 한 표시 되도록 합니다. 99.79 \ No newline at end of file
100.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 100.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/pl/index.md Thu Jun 04 14:50:33 2015 +0200 100.3 @@ -0,0 +1,75 @@ 100.4 +<!--- 100.5 + Licensed to the Apache Software Foundation (ASF) under one 100.6 + or more contributor license agreements. See the NOTICE file 100.7 + distributed with this work for additional information 100.8 + regarding copyright ownership. The ASF licenses this file 100.9 + to you under the Apache License, Version 2.0 (the 100.10 + "License"); you may not use this file except in compliance 100.11 + with the License. You may obtain a copy of the License at 100.12 + 100.13 + http://www.apache.org/licenses/LICENSE-2.0 100.14 + 100.15 + Unless required by applicable law or agreed to in writing, 100.16 + software distributed under the License is distributed on an 100.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 100.18 + KIND, either express or implied. See the License for the 100.19 + specific language governing permissions and limitations 100.20 + under the License. 100.21 +--> 100.22 + 100.23 +# org.apache.cordova.splashscreen 100.24 + 100.25 +Ten plugin wyświetla i ukrywa ekran powitalny podczas uruchamiania aplikacji. 100.26 + 100.27 +## Instalacja 100.28 + 100.29 + cordova plugin add org.apache.cordova.splashscreen 100.30 + 100.31 + 100.32 +## Obsługiwane platformy 100.33 + 100.34 +* Amazon Fire OS 100.35 +* Android 100.36 +* BlackBerry 10 100.37 +* iOS 100.38 +* Windows Phone 7 i 8 100.39 +* Windows 8 100.40 + 100.41 +## Metody 100.42 + 100.43 +* splashscreen.show 100.44 +* splashscreen.Hide 100.45 + 100.46 +### Dziwactwa Androida 100.47 + 100.48 +W pliku config.xml musisz dodać następujące preferencje: 100.49 + 100.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 100.51 + 100.52 +Gdzie foo jest nazwą pliku ekranu powitalnego, najlepiej 9 łatce. Upewnij się dodać pliki splashcreen do katalogu res/xml w odpowiednich folderach. Drugi parametr reprezentuje, jak długo ekranu powitalnego pojawi się w milisekundach. Domyślnie 3000 ms. Aby uzyskać więcej informacji, zobacz [ikony i ekrany powitalne w aplikacjach][1] . 100.53 + 100.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 100.55 + 100.56 +## splashscreen.Hide 100.57 + 100.58 +Odrzucić ten opryskaæ têcza. 100.59 + 100.60 + Navigator.splashscreen.Hide(); 100.61 + 100.62 + 100.63 +### Jeżyna 10, WP8, iOS dziwactwo 100.64 + 100.65 +`config.xml`Pliku `AutoHideSplashScreen` ustawienie musi być `false` . Opóźnienia, ukrywanie ekranu powitalnego przez dwie sekundy, dodać timer następujących w `deviceready` obsługa zdarzeń: 100.66 + 100.67 + setTimeout(function() {navigator.splashscreen.hide(); 100.68 + }, 2000); 100.69 + 100.70 + 100.71 +## splashscreen.show 100.72 + 100.73 +Wyświetla ekran powitalny. 100.74 + 100.75 + Navigator.splashscreen.show(); 100.76 + 100.77 + 100.78 +Aplikacja nie może wywołać `navigator.splashscreen.show()` aż aplikacja została uruchomiona i `deviceready` imprezy został zwolniony. Ale ponieważ zazwyczaj opryskać tęcza ma być widoczne przed rozpoczęciem aplikacji, wydaje się sprzeczne z celem ekranu powitalnego. Dostarczanie niektórych konfiguracji w `config.xml` będzie automatycznie `show` ekran powitalny, natychmiast po uruchomienie aplikacji i przed pełni rozpoczął i otrzymał `deviceready` zdarzenie. Aby uzyskać więcej informacji na robienie tej konfiguracji, zobacz [ikony i ekrany powitalne w aplikacjach][1] . Z tego powodu, jest mało prawdopodobne, należy zadzwonić `navigator.splashscreen.show()` Aby wyświetlić ekran powitalny dla uruchamiania aplikacji. 100.79 \ No newline at end of file
101.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 101.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/ru/index.md Thu Jun 04 14:50:33 2015 +0200 101.3 @@ -0,0 +1,75 @@ 101.4 +<!--- 101.5 + Licensed to the Apache Software Foundation (ASF) under one 101.6 + or more contributor license agreements. See the NOTICE file 101.7 + distributed with this work for additional information 101.8 + regarding copyright ownership. The ASF licenses this file 101.9 + to you under the Apache License, Version 2.0 (the 101.10 + "License"); you may not use this file except in compliance 101.11 + with the License. You may obtain a copy of the License at 101.12 + 101.13 + http://www.apache.org/licenses/LICENSE-2.0 101.14 + 101.15 + Unless required by applicable law or agreed to in writing, 101.16 + software distributed under the License is distributed on an 101.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 101.18 + KIND, either express or implied. See the License for the 101.19 + specific language governing permissions and limitations 101.20 + under the License. 101.21 +--> 101.22 + 101.23 +# org.apache.cordova.splashscreen 101.24 + 101.25 +Этот плагин отображает и скрывает экран-заставку при запуске приложения. 101.26 + 101.27 +## Установка 101.28 + 101.29 + cordova plugin add org.apache.cordova.splashscreen 101.30 + 101.31 + 101.32 +## Поддерживаемые платформы 101.33 + 101.34 +* Amazon Fire OS 101.35 +* Android 101.36 +* BlackBerry 10 101.37 +* iOS 101.38 +* Windows Phone 7 и 8 101.39 +* Windows 8 101.40 + 101.41 +## Методы 101.42 + 101.43 +* splashscreen.show 101.44 +* splashscreen.hide 101.45 + 101.46 +### Особенности Android 101.47 + 101.48 +В вашем файле config.xml необходимо добавить следующие настройки: 101.49 + 101.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 101.51 + 101.52 +Где foo это имя файла splashscreen, желательно 9 заплатку. Убедитесь в том добавить ваши splashcreen файлы в папку res/xml в соответствующие папки. Второй параметр представляет, как долго splashscreen появится в миллисекундах. По умолчанию он 3000 МС. Увидеть [иконки и заставки][1] для получения дополнительной информации. 101.53 + 101.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 101.55 + 101.56 +## splashscreen.hide 101.57 + 101.58 +Закройте экран-заставка. 101.59 + 101.60 + Navigator.SplashScreen.Hide(); 101.61 + 101.62 + 101.63 +### Особенности BlackBerry 10, WP8, iOS 101.64 + 101.65 +`config.xml`Файла `AutoHideSplashScreen` должен быть `false` . Для задержки скрытия заставки на две секунды, добавить таймер, например в `deviceready` обработчик событий: 101.66 + 101.67 + setTimeout(function() {navigator.splashscreen.hide(); 101.68 + }, 2000); 101.69 + 101.70 + 101.71 +## splashscreen.show 101.72 + 101.73 +Отображает экран-заставку. 101.74 + 101.75 + Navigator.SplashScreen.Show(); 101.76 + 101.77 + 101.78 +Ваше приложение не может вызвать `navigator.splashscreen.show()` до тех пор, пока приложение началась и `deviceready` событие инициировано. Но поскольку обычно экран-заставка должен быть видимым до начала вашего приложения, что казалось бы поражение цели экрана-заставки. Предоставление некоторых конфигурации в `config.xml` будет автоматически `show` экран-заставку сразу же после запуска вашего приложения и перед его полностью запущен и получил `deviceready` событие. Увидеть [иконки и заставки][1] для получения дополнительной информации на делать этой конфигурации. По этой причине маловероятно, вам нужно вызвать `navigator.splashscreen.show()` для отображения экрана-заставки для запуска приложения. 101.79 \ No newline at end of file
102.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 102.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/doc/zh/index.md Thu Jun 04 14:50:33 2015 +0200 102.3 @@ -0,0 +1,74 @@ 102.4 +<!--- 102.5 + Licensed to the Apache Software Foundation (ASF) under one 102.6 + or more contributor license agreements. See the NOTICE file 102.7 + distributed with this work for additional information 102.8 + regarding copyright ownership. The ASF licenses this file 102.9 + to you under the Apache License, Version 2.0 (the 102.10 + "License"); you may not use this file except in compliance 102.11 + with the License. You may obtain a copy of the License at 102.12 + 102.13 + http://www.apache.org/licenses/LICENSE-2.0 102.14 + 102.15 + Unless required by applicable law or agreed to in writing, 102.16 + software distributed under the License is distributed on an 102.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 102.18 + KIND, either express or implied. See the License for the 102.19 + specific language governing permissions and limitations 102.20 + under the License. 102.21 +--> 102.22 + 102.23 +# org.apache.cordova.splashscreen 102.24 + 102.25 +這個外掛程式顯示和隱藏在應用程式啟動期間的初始螢幕。 102.26 + 102.27 +## 安裝 102.28 + 102.29 + cordova plugin add org.apache.cordova.splashscreen 102.30 + 102.31 + 102.32 +## 支援的平臺 102.33 + 102.34 +* 亞馬遜火 OS 102.35 +* Android 系統 102.36 +* 黑莓 10 102.37 +* iOS 102.38 +* Windows Phone 7 和 8 102.39 +* Windows 8 102.40 + 102.41 +## 方法 102.42 + 102.43 +* splashscreen.show 102.44 +* splashscreen.hide 102.45 + 102.46 +### Android 的怪癖 102.47 + 102.48 +在你的 config.xml,您需要添加以下優惠: 102.49 + 102.50 +`<preference name="SplashScreen" value="foo" />` `<preference name="SplashScreenDelay" value="10000" />` 102.51 + 102.52 +美孚在哪裡閃屏檔,最好是 9 修補程式檔的名稱。 請確保您的 splashcreen 檔添加到 res/xml 目錄下相應的資料夾。 第二個參數表示多久閃屏會顯示以毫秒為單位。 它將預設為 3000 毫秒。 有關更多資訊,請參見[圖示和啟動畫面][1]。 102.53 + 102.54 + [1]: http://cordova.apache.org/docs/en/edge/config_ref_images.md.html 102.55 + 102.56 +## splashscreen.hide 102.57 + 102.58 +解雇的閃屏。 102.59 + 102.60 + navigator.splashscreen.hide() ; 102.61 + 102.62 + 102.63 +### 黑莓 10,WP8,iOS 怪癖 102.64 + 102.65 +`config.xml`檔的 `AutoHideSplashScreen` 設置必須為 `false` 。 若要延遲兩秒鐘隱藏的閃屏,添加如下所示在計時器 `deviceready` 事件處理常式: 102.66 + 102.67 + setTimeout(function() {navigator.splashscreen.hide() ;},2000年) ; 102.68 + 102.69 + 102.70 +## splashscreen.show 102.71 + 102.72 +顯示初始螢幕。 102.73 + 102.74 + navigator.splashscreen.show() ; 102.75 + 102.76 + 102.77 +您的應用程式無法調用 `navigator.splashscreen.show()` 直到應用程式已經開始, `deviceready` 觸發了事件。 但是,由於通常的閃屏為了是可見的在您的應用程式啟動之前,這似乎會打敗閃屏的目的。 提供一些配置在 `config.xml` 將自動 `show` 閃屏您的應用程式啟動後立即和之前它已經完全起步並收到 `deviceready` 事件。 做這種配置的詳細資訊,請參閱[圖示和啟動畫面][1]。 出於這個原因,它不太可能您需要調用 `navigator.splashscreen.show()` ,使初始螢幕可見為應用程式啟動。 102.78 \ No newline at end of file
103.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 103.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/plugin.xml Thu Jun 04 14:50:33 2015 +0200 103.3 @@ -0,0 +1,126 @@ 103.4 +<?xml version="1.0" encoding="UTF-8"?> 103.5 +<!-- 103.6 + Licensed to the Apache Software Foundation (ASF) under one 103.7 + or more contributor license agreements. See the NOTICE file 103.8 + distributed with this work for additional information 103.9 + regarding copyright ownership. The ASF licenses this file 103.10 + to you under the Apache License, Version 2.0 (the 103.11 + "License"); you may not use this file except in compliance 103.12 + with the License. You may obtain a copy of the License at 103.13 + 103.14 + http://www.apache.org/licenses/LICENSE-2.0 103.15 + 103.16 + Unless required by applicable law or agreed to in writing, 103.17 + software distributed under the License is distributed on an 103.18 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 103.19 + KIND, either express or implied. See the License for the 103.20 + specific language governing permissions and limitations 103.21 + under the License. 103.22 +--> 103.23 + 103.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 103.25 + id="org.apache.cordova.splashscreen" 103.26 + version="0.3.5"> 103.27 + <name>Splashscreen</name> 103.28 + <description>Cordova Splashscreen Plugin</description> 103.29 + <license>Apache 2.0</license> 103.30 + <keywords>cordova,splashscreen</keywords> 103.31 + <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</repo> 103.32 + <issue>https://issues.apache.org/jira/browse/CB/component/12320653</issue> 103.33 + 103.34 + 103.35 + <js-module src="www/splashscreen.js" name="SplashScreen"> 103.36 + <clobbers target="navigator.splashscreen" /> 103.37 + </js-module> 103.38 + 103.39 + <!-- android --> 103.40 + <platform name="android"> 103.41 + <config-file target="res/xml/config.xml" parent="/*"> 103.42 + <feature name="SplashScreen"> 103.43 + <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen"/> 103.44 + </feature> 103.45 + </config-file> 103.46 + 103.47 + <source-file src="src/android/SplashScreen.java" target-dir="src/org/apache/cordova/splashscreen" /> 103.48 + </platform> 103.49 + 103.50 + <!-- amazon-fireos --> 103.51 + <platform name="amazon-fireos"> 103.52 + <config-file target="res/xml/config.xml" parent="/*"> 103.53 + <feature name="SplashScreen"> 103.54 + <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen"/> 103.55 + </feature> 103.56 + </config-file> 103.57 + 103.58 + <source-file src="src/android/SplashScreen.java" target-dir="src/org/apache/cordova/splashscreen" /> 103.59 + </platform> 103.60 + 103.61 + <!-- ubuntu --> 103.62 + <platform name="ubuntu"> 103.63 + <header-file src="src/ubuntu/splashscreen.h" /> 103.64 + <source-file src="src/ubuntu/splashscreen.cpp" /> 103.65 + </platform> 103.66 + 103.67 + <!-- ios --> 103.68 + <platform name="ios"> 103.69 + <config-file target="config.xml" parent="/*"> 103.70 + <feature name="SplashScreen"> 103.71 + <param name="ios-package" value="CDVSplashScreen"/> 103.72 + <param name="onload" value="true"/> 103.73 + </feature> 103.74 + </config-file> 103.75 + 103.76 + <header-file src="src/ios/CDVSplashScreen.h" /> 103.77 + <source-file src="src/ios/CDVSplashScreen.m" /> 103.78 + 103.79 + <framework src="CoreGraphics.framework" /> 103.80 + </platform> 103.81 + 103.82 + <!-- blackberry10 --> 103.83 + <platform name="blackberry10"> 103.84 + <source-file src="src/blackberry10/index.js" target-dir="SplashScreen" /> 103.85 + <config-file target="www/config.xml" parent="/widget"> 103.86 + <feature name="SplashScreen" value="SplashScreen"/> 103.87 + </config-file> 103.88 + </platform> 103.89 + 103.90 + <!-- wp7 --> 103.91 + <platform name="wp7"> 103.92 + <config-file target="config.xml" parent="/*"> 103.93 + <feature name="SplashScreen"> 103.94 + <param name="wp-package" value="SplashScreen"/> 103.95 + <param name="onload" value="true"/> 103.96 + </feature> 103.97 + </config-file> 103.98 + 103.99 + <source-file src="src/wp/SplashScreen.cs" /> 103.100 + 103.101 + </platform> 103.102 + 103.103 + <!-- wp8 --> 103.104 + <platform name="wp8"> 103.105 + <config-file target="config.xml" parent="/*"> 103.106 + <feature name="SplashScreen"> 103.107 + <param name="wp-package" value="SplashScreen"/> 103.108 + <param name="onload" value="true"/> 103.109 + </feature> 103.110 + </config-file> 103.111 + 103.112 + <source-file src="src/wp/SplashScreen.cs" /> 103.113 + 103.114 + </platform> 103.115 + 103.116 + <!-- windows8 --> 103.117 + <platform name="windows8"> 103.118 + <js-module src="www/windows8/SplashScreenProxy.js" name="SplashScreenProxy"> 103.119 + <merges target="" /> 103.120 + </js-module> 103.121 + </platform> 103.122 + 103.123 + <!-- tizen --> 103.124 + <platform name="tizen"> 103.125 + <js-module src="src/tizen/SplashScreenProxy.js" name="SplashScreenProxy"> 103.126 + <runs /> 103.127 + </js-module> 103.128 + </platform> 103.129 +</plugin>
104.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 104.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/android/SplashScreen.java Thu Jun 04 14:50:33 2015 +0200 104.3 @@ -0,0 +1,43 @@ 104.4 +/* 104.5 + Licensed to the Apache Software Foundation (ASF) under one 104.6 + or more contributor license agreements. See the NOTICE file 104.7 + distributed with this work for additional information 104.8 + regarding copyright ownership. The ASF licenses this file 104.9 + to you under the Apache License, Version 2.0 (the 104.10 + "License"); you may not use this file except in compliance 104.11 + with the License. You may obtain a copy of the License at 104.12 + 104.13 + http://www.apache.org/licenses/LICENSE-2.0 104.14 + 104.15 + Unless required by applicable law or agreed to in writing, 104.16 + software distributed under the License is distributed on an 104.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 104.18 + KIND, either express or implied. See the License for the 104.19 + specific language governing permissions and limitations 104.20 + under the License. 104.21 +*/ 104.22 + 104.23 +package org.apache.cordova.splashscreen; 104.24 + 104.25 +import org.apache.cordova.CallbackContext; 104.26 +import org.apache.cordova.CordovaPlugin; 104.27 +import org.json.JSONArray; 104.28 + 104.29 +public class SplashScreen extends CordovaPlugin { 104.30 + 104.31 + @Override 104.32 + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) { 104.33 + if (action.equals("hide")) { 104.34 + this.webView.postMessage("splashscreen", "hide"); 104.35 + } else if (action.equals("show")){ 104.36 + this.webView.postMessage("splashscreen", "show"); 104.37 + } 104.38 + else { 104.39 + return false; 104.40 + } 104.41 + 104.42 + callbackContext.success(); 104.43 + return true; 104.44 + } 104.45 + 104.46 +}
105.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 105.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/blackberry10/index.js Thu Jun 04 14:50:33 2015 +0200 105.3 @@ -0,0 +1,28 @@ 105.4 +/* 105.5 + * Copyright 2013 Research In Motion Limited. 105.6 + * 105.7 + * Licensed under the Apache License, Version 2.0 (the "License"); 105.8 + * you may not use this file except in compliance with the License. 105.9 + * You may obtain a copy of the License at 105.10 + * 105.11 + * http://www.apache.org/licenses/LICENSE-2.0 105.12 + * 105.13 + * Unless required by applicable law or agreed to in writing, software 105.14 + * distributed under the License is distributed on an "AS IS" BASIS, 105.15 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 105.16 + * See the License for the specific language governing permissions and 105.17 + * limitations under the License. 105.18 + */ 105.19 + 105.20 +module.exports = { 105.21 + show: function (success, fail, args, env) { 105.22 + var result = new PluginResult(args, env); 105.23 + result.error("Not supported on platform", false); 105.24 + }, 105.25 + 105.26 + hide: function (success, fail, args, env) { 105.27 + var result = new PluginResult(args, env); 105.28 + window.qnx.webplatform.getApplication().windowVisible = true; 105.29 + result.ok(undefined, false); 105.30 + } 105.31 +};
106.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 106.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/ios/CDVSplashScreen.h Thu Jun 04 14:50:33 2015 +0200 106.3 @@ -0,0 +1,43 @@ 106.4 +/* 106.5 + Licensed to the Apache Software Foundation (ASF) under one 106.6 + or more contributor license agreements. See the NOTICE file 106.7 + distributed with this work for additional information 106.8 + regarding copyright ownership. The ASF licenses this file 106.9 + to you under the Apache License, Version 2.0 (the 106.10 + "License"); you may not use this file except in compliance 106.11 + with the License. You may obtain a copy of the License at 106.12 + 106.13 + http://www.apache.org/licenses/LICENSE-2.0 106.14 + 106.15 + Unless required by applicable law or agreed to in writing, 106.16 + software distributed under the License is distributed on an 106.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 106.18 + KIND, either express or implied. See the License for the 106.19 + specific language governing permissions and limitations 106.20 + under the License. 106.21 + */ 106.22 + 106.23 +#import <Foundation/Foundation.h> 106.24 +#import <Cordova/CDVPlugin.h> 106.25 + 106.26 +typedef struct { 106.27 + BOOL iPhone; 106.28 + BOOL iPad; 106.29 + BOOL iPhone5; 106.30 + BOOL iPhone6; 106.31 + BOOL iPhone6Plus; 106.32 + BOOL retina; 106.33 + 106.34 +} CDV_iOSDevice; 106.35 + 106.36 +@interface CDVSplashScreen : CDVPlugin { 106.37 + UIActivityIndicatorView* _activityView; 106.38 + UIImageView* _imageView; 106.39 + NSString* _curImageName; 106.40 + BOOL _visible; 106.41 +} 106.42 + 106.43 +- (void)show:(CDVInvokedUrlCommand*)command; 106.44 +- (void)hide:(CDVInvokedUrlCommand*)command; 106.45 + 106.46 +@end
107.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 107.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/ios/CDVSplashScreen.m Thu Jun 04 14:50:33 2015 +0200 107.3 @@ -0,0 +1,307 @@ 107.4 +/* 107.5 + Licensed to the Apache Software Foundation (ASF) under one 107.6 + or more contributor license agreements. See the NOTICE file 107.7 + distributed with this work for additional information 107.8 + regarding copyright ownership. The ASF licenses this file 107.9 + to you under the Apache License, Version 2.0 (the 107.10 + "License"); you may not use this file except in compliance 107.11 + with the License. You may obtain a copy of the License at 107.12 + 107.13 + http://www.apache.org/licenses/LICENSE-2.0 107.14 + 107.15 + Unless required by applicable law or agreed to in writing, 107.16 + software distributed under the License is distributed on an 107.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 107.18 + KIND, either express or implied. See the License for the 107.19 + specific language governing permissions and limitations 107.20 + under the License. 107.21 + */ 107.22 + 107.23 +#import "CDVSplashScreen.h" 107.24 +#import <Cordova/CDVViewController.h> 107.25 +#import <Cordova/CDVScreenOrientationDelegate.h> 107.26 + 107.27 +#define kSplashScreenDurationDefault 0.25f 107.28 + 107.29 + 107.30 +@implementation CDVSplashScreen 107.31 + 107.32 +- (void)pluginInitialize 107.33 +{ 107.34 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pageDidLoad) name:CDVPageDidLoadNotification object:self.webView]; 107.35 + 107.36 + [self setVisible:YES]; 107.37 +} 107.38 + 107.39 +- (void)show:(CDVInvokedUrlCommand*)command 107.40 +{ 107.41 + [self setVisible:YES]; 107.42 +} 107.43 + 107.44 +- (void)hide:(CDVInvokedUrlCommand*)command 107.45 +{ 107.46 + [self setVisible:NO]; 107.47 +} 107.48 + 107.49 +- (void)pageDidLoad 107.50 +{ 107.51 + id autoHideSplashScreenValue = [self.commandDelegate.settings objectForKey:[@"AutoHideSplashScreen" lowercaseString]]; 107.52 + 107.53 + // if value is missing, default to yes 107.54 + if ((autoHideSplashScreenValue == nil) || [autoHideSplashScreenValue boolValue]) { 107.55 + [self setVisible:NO]; 107.56 + } 107.57 +} 107.58 + 107.59 +- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context 107.60 +{ 107.61 + [self updateImage]; 107.62 +} 107.63 + 107.64 +- (void)createViews 107.65 +{ 107.66 + /* 107.67 + * The Activity View is the top spinning throbber in the status/battery bar. We init it with the default Grey Style. 107.68 + * 107.69 + * whiteLarge = UIActivityIndicatorViewStyleWhiteLarge 107.70 + * white = UIActivityIndicatorViewStyleWhite 107.71 + * gray = UIActivityIndicatorViewStyleGray 107.72 + * 107.73 + */ 107.74 + NSString* topActivityIndicator = [self.commandDelegate.settings objectForKey:[@"TopActivityIndicator" lowercaseString]]; 107.75 + UIActivityIndicatorViewStyle topActivityIndicatorStyle = UIActivityIndicatorViewStyleGray; 107.76 + 107.77 + if ([topActivityIndicator isEqualToString:@"whiteLarge"]) { 107.78 + topActivityIndicatorStyle = UIActivityIndicatorViewStyleWhiteLarge; 107.79 + } else if ([topActivityIndicator isEqualToString:@"white"]) { 107.80 + topActivityIndicatorStyle = UIActivityIndicatorViewStyleWhite; 107.81 + } else if ([topActivityIndicator isEqualToString:@"gray"]) { 107.82 + topActivityIndicatorStyle = UIActivityIndicatorViewStyleGray; 107.83 + } 107.84 + 107.85 + UIView* parentView = self.viewController.view; 107.86 + parentView.userInteractionEnabled = NO; // disable user interaction while splashscreen is shown 107.87 + _activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:topActivityIndicatorStyle]; 107.88 + _activityView.center = CGPointMake(parentView.bounds.size.width / 2, parentView.bounds.size.height / 2); 107.89 + _activityView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin 107.90 + | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin; 107.91 + [_activityView startAnimating]; 107.92 + 107.93 + // Set the frame & image later. 107.94 + _imageView = [[UIImageView alloc] init]; 107.95 + [parentView addSubview:_imageView]; 107.96 + 107.97 + id showSplashScreenSpinnerValue = [self.commandDelegate.settings objectForKey:[@"ShowSplashScreenSpinner" lowercaseString]]; 107.98 + // backwards compatibility - if key is missing, default to true 107.99 + if ((showSplashScreenSpinnerValue == nil) || [showSplashScreenSpinnerValue boolValue]) { 107.100 + [parentView addSubview:_activityView]; 107.101 + } 107.102 + 107.103 + // Frame is required when launching in portrait mode. 107.104 + // Bounds for landscape since it captures the rotation. 107.105 + [parentView addObserver:self forKeyPath:@"frame" options:0 context:nil]; 107.106 + [parentView addObserver:self forKeyPath:@"bounds" options:0 context:nil]; 107.107 + 107.108 + [self updateImage]; 107.109 +} 107.110 + 107.111 +- (void)destroyViews 107.112 +{ 107.113 + [_imageView removeFromSuperview]; 107.114 + [_activityView removeFromSuperview]; 107.115 + _imageView = nil; 107.116 + _activityView = nil; 107.117 + _curImageName = nil; 107.118 + 107.119 + self.viewController.view.userInteractionEnabled = YES; // re-enable user interaction upon completion 107.120 + [self.viewController.view removeObserver:self forKeyPath:@"frame"]; 107.121 + [self.viewController.view removeObserver:self forKeyPath:@"bounds"]; 107.122 +} 107.123 + 107.124 +- (CDV_iOSDevice) getCurrentDevice 107.125 +{ 107.126 + CDV_iOSDevice device; 107.127 + 107.128 + UIScreen* mainScreen = [UIScreen mainScreen]; 107.129 + CGFloat mainScreenHeight = mainScreen.bounds.size.height; 107.130 + CGFloat mainScreenWidth = mainScreen.bounds.size.width; 107.131 + 107.132 + int limit = MAX(mainScreenHeight,mainScreenWidth); 107.133 + 107.134 + device.iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); 107.135 + device.iPhone = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone); 107.136 + device.retina = ([mainScreen scale] == 2.0); 107.137 + device.iPhone5 = (device.iPhone && limit == 568.0); 107.138 + // note these below is not a true device detect, for example if you are on an 107.139 + // iPhone 6/6+ but the app is scaled it will prob set iPhone5 as true, but 107.140 + // this is appropriate for detecting the runtime screen environment 107.141 + device.iPhone6 = (device.iPhone && limit == 667.0); 107.142 + device.iPhone6Plus = (device.iPhone && limit == 736.0); 107.143 + 107.144 + return device; 107.145 +} 107.146 + 107.147 +- (NSString*)getImageName:(UIInterfaceOrientation)currentOrientation delegate:(id<CDVScreenOrientationDelegate>)orientationDelegate device:(CDV_iOSDevice)device 107.148 +{ 107.149 + // Use UILaunchImageFile if specified in plist. Otherwise, use Default. 107.150 + NSString* imageName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UILaunchImageFile"]; 107.151 + 107.152 + NSUInteger supportedOrientations = [orientationDelegate supportedInterfaceOrientations]; 107.153 + 107.154 + // Checks to see if the developer has locked the orientation to use only one of Portrait or Landscape 107.155 + BOOL supportsLandscape = (supportedOrientations & UIInterfaceOrientationMaskLandscape); 107.156 + BOOL supportsPortrait = (supportedOrientations & UIInterfaceOrientationMaskPortrait || supportedOrientations & UIInterfaceOrientationMaskPortraitUpsideDown); 107.157 + // this means there are no mixed orientations in there 107.158 + BOOL isOrientationLocked = !(supportsPortrait && supportsLandscape); 107.159 + 107.160 + if (imageName) { 107.161 + imageName = [imageName stringByDeletingPathExtension]; 107.162 + } else { 107.163 + imageName = @"Default"; 107.164 + } 107.165 + 107.166 + if (device.iPhone5) { // does not support landscape 107.167 + imageName = [imageName stringByAppendingString:@"-568h"]; 107.168 + } else if (device.iPhone6) { // does not support landscape 107.169 + imageName = [imageName stringByAppendingString:@"-667h"]; 107.170 + } else if (device.iPhone6Plus) { // supports landscape 107.171 + if (isOrientationLocked) { 107.172 + imageName = [imageName stringByAppendingString:(supportsLandscape ? @"-Landscape" : @"")]; 107.173 + } else { 107.174 + switch (currentOrientation) { 107.175 + case UIInterfaceOrientationLandscapeLeft: 107.176 + case UIInterfaceOrientationLandscapeRight: 107.177 + imageName = [imageName stringByAppendingString:@"-Landscape"]; 107.178 + break; 107.179 + default: 107.180 + break; 107.181 + } 107.182 + } 107.183 + imageName = [imageName stringByAppendingString:@"-736h"]; 107.184 + 107.185 + } else if (device.iPad) { // supports landscape 107.186 + if (isOrientationLocked) { 107.187 + imageName = [imageName stringByAppendingString:(supportsLandscape ? @"-Landscape" : @"-Portrait")]; 107.188 + } else { 107.189 + switch (currentOrientation) { 107.190 + case UIInterfaceOrientationLandscapeLeft: 107.191 + case UIInterfaceOrientationLandscapeRight: 107.192 + imageName = [imageName stringByAppendingString:@"-Landscape"]; 107.193 + break; 107.194 + 107.195 + case UIInterfaceOrientationPortrait: 107.196 + case UIInterfaceOrientationPortraitUpsideDown: 107.197 + default: 107.198 + imageName = [imageName stringByAppendingString:@"-Portrait"]; 107.199 + break; 107.200 + } 107.201 + } 107.202 + } 107.203 + 107.204 + return imageName; 107.205 +} 107.206 + 107.207 +// Sets the view's frame and image. 107.208 +- (void)updateImage 107.209 +{ 107.210 + NSString* imageName = [self getImageName:self.viewController.interfaceOrientation delegate:(id<CDVScreenOrientationDelegate>)self.viewController device:[self getCurrentDevice]]; 107.211 + 107.212 + if (![imageName isEqualToString:_curImageName]) { 107.213 + UIImage* img = [UIImage imageNamed:imageName]; 107.214 + _imageView.image = img; 107.215 + _curImageName = imageName; 107.216 + } 107.217 + 107.218 + // Check that splash screen's image exists before updating bounds 107.219 + if (_imageView.image) { 107.220 + [self updateBounds]; 107.221 + } else { 107.222 + NSLog(@"WARNING: The splashscreen image named %@ was not found", imageName); 107.223 + } 107.224 +} 107.225 + 107.226 +- (void)updateBounds 107.227 +{ 107.228 + UIImage* img = _imageView.image; 107.229 + CGRect imgBounds = (img) ? CGRectMake(0, 0, img.size.width, img.size.height) : CGRectZero; 107.230 + 107.231 + CGSize screenSize = [self.viewController.view convertRect:[UIScreen mainScreen].bounds fromView:nil].size; 107.232 + UIInterfaceOrientation orientation = self.viewController.interfaceOrientation; 107.233 + CGAffineTransform imgTransform = CGAffineTransformIdentity; 107.234 + 107.235 + /* If and only if an iPhone application is landscape-only as per 107.236 + * UISupportedInterfaceOrientations, the view controller's orientation is 107.237 + * landscape. In this case the image must be rotated in order to appear 107.238 + * correctly. 107.239 + */ 107.240 + if (UIInterfaceOrientationIsLandscape(orientation) && !CDV_IsIPad()) { 107.241 + imgTransform = CGAffineTransformMakeRotation(M_PI / 2); 107.242 + imgBounds.size = CGSizeMake(imgBounds.size.height, imgBounds.size.width); 107.243 + } 107.244 + 107.245 + // There's a special case when the image is the size of the screen. 107.246 + if (CGSizeEqualToSize(screenSize, imgBounds.size)) { 107.247 + CGRect statusFrame = [self.viewController.view convertRect:[UIApplication sharedApplication].statusBarFrame fromView:nil]; 107.248 + if (!(IsAtLeastiOSVersion(@"7.0"))) { 107.249 + imgBounds.origin.y -= statusFrame.size.height; 107.250 + } 107.251 + } else if (imgBounds.size.width > 0) { 107.252 + CGRect viewBounds = self.viewController.view.bounds; 107.253 + CGFloat imgAspect = imgBounds.size.width / imgBounds.size.height; 107.254 + CGFloat viewAspect = viewBounds.size.width / viewBounds.size.height; 107.255 + // This matches the behaviour of the native splash screen. 107.256 + CGFloat ratio; 107.257 + if (viewAspect > imgAspect) { 107.258 + ratio = viewBounds.size.width / imgBounds.size.width; 107.259 + } else { 107.260 + ratio = viewBounds.size.height / imgBounds.size.height; 107.261 + } 107.262 + imgBounds.size.height *= ratio; 107.263 + imgBounds.size.width *= ratio; 107.264 + } 107.265 + 107.266 + _imageView.transform = imgTransform; 107.267 + _imageView.frame = imgBounds; 107.268 +} 107.269 + 107.270 +- (void)setVisible:(BOOL)visible 107.271 +{ 107.272 + if (visible == _visible) { 107.273 + return; 107.274 + } 107.275 + _visible = visible; 107.276 + 107.277 + id fadeSplashScreenValue = [self.commandDelegate.settings objectForKey:[@"FadeSplashScreen" lowercaseString]]; 107.278 + id fadeSplashScreenDuration = [self.commandDelegate.settings objectForKey:[@"FadeSplashScreenDuration" lowercaseString]]; 107.279 + 107.280 + float fadeDuration = fadeSplashScreenDuration == nil ? kSplashScreenDurationDefault : [fadeSplashScreenDuration floatValue]; 107.281 + 107.282 + if ((fadeSplashScreenValue == nil) || ![fadeSplashScreenValue boolValue]) { 107.283 + fadeDuration = 0; 107.284 + } 107.285 + 107.286 + // Never animate the showing of the splash screen. 107.287 + if (visible) { 107.288 + if (_imageView == nil) { 107.289 + [self createViews]; 107.290 + } 107.291 + } else if (fadeDuration == 0) { 107.292 + [self destroyViews]; 107.293 + } else { 107.294 + [UIView transitionWithView:self.viewController.view 107.295 + duration:fadeDuration 107.296 + options:UIViewAnimationOptionTransitionNone 107.297 + animations:^(void) { 107.298 + [_imageView setAlpha:0]; 107.299 + [_activityView setAlpha:0]; 107.300 + } 107.301 + completion:^(BOOL finished) { 107.302 + if (finished) { 107.303 + [self destroyViews]; 107.304 + } 107.305 + } 107.306 + ]; 107.307 + } 107.308 +} 107.309 + 107.310 +@end
108.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 108.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/tizen/SplashScreenProxy.js Thu Jun 04 14:50:33 2015 +0200 108.3 @@ -0,0 +1,43 @@ 108.4 +/* 108.5 + * 108.6 + * Licensed to the Apache Software Foundation (ASF) under one 108.7 + * or more contributor license agreements. See the NOTICE file 108.8 + * distributed with this work for additional information 108.9 + * regarding copyright ownership. The ASF licenses this file 108.10 + * to you under the Apache License, Version 2.0 (the 108.11 + * "License"); you may not use this file except in compliance 108.12 + * with the License. You may obtain a copy of the License at 108.13 + * 108.14 + * http://www.apache.org/licenses/LICENSE-2.0 108.15 + * 108.16 + * Unless required by applicable law or agreed to in writing, 108.17 + * software distributed under the License is distributed on an 108.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 108.19 + * KIND, either express or implied. See the License for the 108.20 + * specific language governing permissions and limitations 108.21 + * under the License. 108.22 + * 108.23 +*/ 108.24 + 108.25 +( function() { 108.26 + 108.27 +win = null; 108.28 + 108.29 +module.exports = { 108.30 + show: function() { 108.31 + if ( win === null ) { 108.32 + win = window.open('splashscreen.html'); 108.33 + } 108.34 + }, 108.35 + 108.36 + hide: function() { 108.37 + if ( win !== null ) { 108.38 + win.close(); 108.39 + win = null; 108.40 + } 108.41 + } 108.42 +}; 108.43 + 108.44 +require("cordova/tizen/commandProxy").add("SplashScreen", module.exports); 108.45 + 108.46 +})();
109.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 109.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/ubuntu/splashscreen.cpp Thu Jun 04 14:50:33 2015 +0200 109.3 @@ -0,0 +1,42 @@ 109.4 +/* 109.5 + * 109.6 + * Copyright 2013 Canonical Ltd. 109.7 + * 109.8 + * Licensed to the Apache Software Foundation (ASF) under one 109.9 + * or more contributor license agreements. See the NOTICE file 109.10 + * distributed with this work for additional information 109.11 + * regarding copyright ownership. The ASF licenses this file 109.12 + * to you under the Apache License, Version 2.0 (the 109.13 + * "License"); you may not use this file except in compliance 109.14 + * with the License. You may obtain a copy of the License at 109.15 + * 109.16 + * http://www.apache.org/licenses/LICENSE-2.0 109.17 + * 109.18 + * Unless required by applicable law or agreed to in writing, 109.19 + * software distributed under the License is distributed on an 109.20 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 109.21 + * KIND, either express or implied. See the License for the 109.22 + * specific language governing permissions and limitations 109.23 + * under the License. 109.24 + * 109.25 +*/ 109.26 + 109.27 +#include <QQuickItem> 109.28 + 109.29 +#include "splashscreen.h" 109.30 +#include <cordova.h> 109.31 + 109.32 +#define SPLASHSCREEN_STATE_NAME "splashscreen" 109.33 + 109.34 +Splashscreen::Splashscreen(Cordova *cordova): CPlugin(cordova) { 109.35 +} 109.36 + 109.37 +void Splashscreen::show(int, int) { 109.38 + m_cordova->rootObject()->setProperty("splashscreenPath", m_cordova->getSplashscreenPath()); 109.39 + 109.40 + m_cordova->pushViewState(SPLASHSCREEN_STATE_NAME); 109.41 +} 109.42 + 109.43 +void Splashscreen::hide(int, int) { 109.44 + m_cordova->popViewState(SPLASHSCREEN_STATE_NAME); 109.45 +}
110.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 110.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/ubuntu/splashscreen.h Thu Jun 04 14:50:33 2015 +0200 110.3 @@ -0,0 +1,52 @@ 110.4 +/* 110.5 + * 110.6 + * Copyright 2013 Canonical Ltd. 110.7 + * 110.8 + * Licensed to the Apache Software Foundation (ASF) under one 110.9 + * or more contributor license agreements. See the NOTICE file 110.10 + * distributed with this work for additional information 110.11 + * regarding copyright ownership. The ASF licenses this file 110.12 + * to you under the Apache License, Version 2.0 (the 110.13 + * "License"); you may not use this file except in compliance 110.14 + * with the License. You may obtain a copy of the License at 110.15 + * 110.16 + * http://www.apache.org/licenses/LICENSE-2.0 110.17 + * 110.18 + * Unless required by applicable law or agreed to in writing, 110.19 + * software distributed under the License is distributed on an 110.20 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 110.21 + * KIND, either express or implied. See the License for the 110.22 + * specific language governing permissions and limitations 110.23 + * under the License. 110.24 + * 110.25 +*/ 110.26 + 110.27 +#ifndef SPLASHSCREEN_H 110.28 +#define SPLASHSCREEN_H 110.29 + 110.30 +#include <QtCore> 110.31 +#include <cplugin.h> 110.32 + 110.33 +class Splashscreen: public CPlugin { 110.34 + Q_OBJECT 110.35 +public: 110.36 + explicit Splashscreen(Cordova *cordova); 110.37 + 110.38 + virtual const QString fullName() override { 110.39 + return Splashscreen::fullID(); 110.40 + } 110.41 + 110.42 + virtual const QString shortName() override { 110.43 + return "SplashScreen"; 110.44 + } 110.45 + 110.46 + static const QString fullID() { 110.47 + return "SplashScreen"; 110.48 + } 110.49 + 110.50 +public slots: 110.51 + void show(int, int); 110.52 + void hide(int, int); 110.53 +}; 110.54 + 110.55 +#endif // SPLASHSCREEN_H
111.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 111.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/src/wp/SplashScreen.cs Thu Jun 04 14:50:33 2015 +0200 111.3 @@ -0,0 +1,167 @@ 111.4 +/* 111.5 + Licensed under the Apache License, Version 2.0 (the "License"); 111.6 + you may not use this file except in compliance with the License. 111.7 + You may obtain a copy of the License at 111.8 + 111.9 + http://www.apache.org/licenses/LICENSE-2.0 111.10 + 111.11 + Unless required by applicable law or agreed to in writing, software 111.12 + distributed under the License is distributed on an "AS IS" BASIS, 111.13 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 111.14 + See the License for the specific language governing permissions and 111.15 + limitations under the License. 111.16 +*/ 111.17 + 111.18 +using System; 111.19 +using System.Net; 111.20 +using System.Windows; 111.21 +using System.Windows.Controls; 111.22 +using System.Windows.Documents; 111.23 +using System.Windows.Ink; 111.24 +using System.Windows.Input; 111.25 +using System.Windows.Media; 111.26 +using System.Windows.Media.Animation; 111.27 +using System.Windows.Shapes; 111.28 +using Microsoft.Phone.Info; 111.29 +using System.Windows.Controls.Primitives; 111.30 +using System.Diagnostics; 111.31 +using System.Windows.Media.Imaging; 111.32 +using System.Windows.Resources; 111.33 +using System.IO; 111.34 +using System.Xml.Linq; 111.35 +using System.Linq; 111.36 +using System.Windows.Threading; 111.37 + 111.38 +namespace WPCordovaClassLib.Cordova.Commands 111.39 +{ 111.40 + /// <summary> 111.41 + /// Listens for changes to the state of the battery on the device. 111.42 + /// Currently only the "isPlugged" parameter available via native APIs. 111.43 + /// </summary> 111.44 + public class SplashScreen : BaseCommand 111.45 + { 111.46 + private Popup popup; 111.47 + private bool autohide = true; 111.48 + 111.49 + private static bool WasShown = false; 111.50 + 111.51 + public SplashScreen() 111.52 + { 111.53 + Image SplashScreen = new Image(); 111.54 + BitmapImage splash_image = new BitmapImage(); 111.55 + splash_image.SetSource(Application.GetResourceStream(new Uri(@"SplashScreenImage.jpg", UriKind.Relative)).Stream); 111.56 + SplashScreen.Source = splash_image; 111.57 + 111.58 + // Instansiate the popup and set the Child property of Popup to SplashScreen 111.59 + popup = new Popup() {IsOpen = false, Child = SplashScreen }; 111.60 + // Orient the popup accordingly 111.61 + popup.HorizontalAlignment = HorizontalAlignment.Stretch; 111.62 + popup.VerticalAlignment = VerticalAlignment.Center; 111.63 + 111.64 + 111.65 + LoadConfigValues(); 111.66 + } 111.67 + 111.68 + public override void OnInit() 111.69 + { 111.70 + // we only want to autoload the first time a page is loaded. 111.71 + if (!WasShown) 111.72 + { 111.73 + WasShown = true; 111.74 + show(); 111.75 + } 111.76 + } 111.77 + 111.78 + void LoadConfigValues() 111.79 + { 111.80 + StreamResourceInfo streamInfo = Application.GetResourceStream(new Uri("config.xml", UriKind.Relative)); 111.81 + 111.82 + if (streamInfo != null) 111.83 + { 111.84 + StreamReader sr = new StreamReader(streamInfo.Stream); 111.85 + //This will Read Keys Collection for the xml file 111.86 + XDocument document = XDocument.Parse(sr.ReadToEnd()); 111.87 + 111.88 + var preferences = from results in document.Descendants() 111.89 + where (string)results.Attribute("name") == "AutoHideSplashScreen" 111.90 + select (string)results.Attribute("value") == "true"; 111.91 + 111.92 + if (preferences.Count() > 0 && preferences.First() == false) 111.93 + { 111.94 + autohide = false; 111.95 + } 111.96 + } 111.97 + } 111.98 + 111.99 + public void show(string options = null) 111.100 + { 111.101 + Deployment.Current.Dispatcher.BeginInvoke(() => 111.102 + { 111.103 + if (popup.IsOpen) 111.104 + { 111.105 + return; 111.106 + } 111.107 + 111.108 + popup.Child.Opacity = 0; 111.109 + 111.110 + Storyboard story = new Storyboard(); 111.111 + DoubleAnimation animation; 111.112 + animation = new DoubleAnimation(); 111.113 + animation.From = 0.0; 111.114 + animation.To = 1.0; 111.115 + animation.Duration = new Duration(TimeSpan.FromSeconds(0.2)); 111.116 + 111.117 + Storyboard.SetTarget(animation, popup.Child); 111.118 + Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity")); 111.119 + story.Children.Add(animation); 111.120 + 111.121 + Debug.WriteLine("Fading the splash screen in"); 111.122 + 111.123 + story.Begin(); 111.124 + 111.125 + popup.IsOpen = true; 111.126 + 111.127 + if (autohide) 111.128 + { 111.129 + DispatcherTimer timer = new DispatcherTimer(); 111.130 + timer.Tick += (object sender, EventArgs e) => 111.131 + { 111.132 + hide(); 111.133 + }; 111.134 + timer.Interval = TimeSpan.FromSeconds(1.2); 111.135 + timer.Start(); 111.136 + } 111.137 + }); 111.138 + } 111.139 + 111.140 + 111.141 + public void hide(string options = null) 111.142 + { 111.143 + Deployment.Current.Dispatcher.BeginInvoke(() => 111.144 + { 111.145 + if (!popup.IsOpen) 111.146 + { 111.147 + return; 111.148 + } 111.149 + 111.150 + popup.Child.Opacity = 1.0; 111.151 + 111.152 + Storyboard story = new Storyboard(); 111.153 + DoubleAnimation animation; 111.154 + animation = new DoubleAnimation(); 111.155 + animation.From = 1.0; 111.156 + animation.To = 0.0; 111.157 + animation.Duration = new Duration(TimeSpan.FromSeconds(0.4)); 111.158 + 111.159 + Storyboard.SetTarget(animation, popup.Child); 111.160 + Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity")); 111.161 + story.Children.Add(animation); 111.162 + story.Completed += (object sender, EventArgs e) => 111.163 + { 111.164 + popup.IsOpen = false; 111.165 + }; 111.166 + story.Begin(); 111.167 + }); 111.168 + } 111.169 + } 111.170 +}
112.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 112.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/contents.xcworkspacedata Thu Jun 04 14:50:33 2015 +0200 112.3 @@ -0,0 +1,7 @@ 112.4 +<?xml version="1.0" encoding="UTF-8"?> 112.5 +<Workspace 112.6 + version = "1.0"> 112.7 + <FileRef 112.8 + location = "container:CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj"> 112.9 + </FileRef> 112.10 +</Workspace>
113.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 113.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/xcshareddata/CDVSplashScreenTest.xccheckout Thu Jun 04 14:50:33 2015 +0200 113.3 @@ -0,0 +1,41 @@ 113.4 +<?xml version="1.0" encoding="UTF-8"?> 113.5 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 113.6 +<plist version="1.0"> 113.7 +<dict> 113.8 + <key>IDESourceControlProjectFavoriteDictionaryKey</key> 113.9 + <false/> 113.10 + <key>IDESourceControlProjectIdentifier</key> 113.11 + <string>6BE9AD73-1B9F-4362-98D7-DC631BEC6185</string> 113.12 + <key>IDESourceControlProjectName</key> 113.13 + <string>CDVSplashScreenTest</string> 113.14 + <key>IDESourceControlProjectOriginsDictionary</key> 113.15 + <dict> 113.16 + <key>BEF5A5D0FF64801E558286389440357A9233D7DB</key> 113.17 + <string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</string> 113.18 + </dict> 113.19 + <key>IDESourceControlProjectPath</key> 113.20 + <string>tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj</string> 113.21 + <key>IDESourceControlProjectRelativeInstallPathDictionary</key> 113.22 + <dict> 113.23 + <key>BEF5A5D0FF64801E558286389440357A9233D7DB</key> 113.24 + <string>../../../../..</string> 113.25 + </dict> 113.26 + <key>IDESourceControlProjectURL</key> 113.27 + <string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</string> 113.28 + <key>IDESourceControlProjectVersion</key> 113.29 + <integer>111</integer> 113.30 + <key>IDESourceControlProjectWCCIdentifier</key> 113.31 + <string>BEF5A5D0FF64801E558286389440357A9233D7DB</string> 113.32 + <key>IDESourceControlProjectWCConfigurations</key> 113.33 + <array> 113.34 + <dict> 113.35 + <key>IDESourceControlRepositoryExtensionIdentifierKey</key> 113.36 + <string>public.vcs.git</string> 113.37 + <key>IDESourceControlWCCIdentifierKey</key> 113.38 + <string>BEF5A5D0FF64801E558286389440357A9233D7DB</string> 113.39 + <key>IDESourceControlWCCName</key> 113.40 + <string>cordova-plugin-splashscreen</string> 113.41 + </dict> 113.42 + </array> 113.43 +</dict> 113.44 +</plist>
114.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 114.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme Thu Jun 04 14:50:33 2015 +0200 114.3 @@ -0,0 +1,77 @@ 114.4 +<?xml version="1.0" encoding="UTF-8"?> 114.5 +<Scheme 114.6 + LastUpgradeVersion = "0600" 114.7 + version = "1.3"> 114.8 + <BuildAction 114.9 + parallelizeBuildables = "YES" 114.10 + buildImplicitDependencies = "YES"> 114.11 + <BuildActionEntries> 114.12 + <BuildActionEntry 114.13 + buildForTesting = "YES" 114.14 + buildForRunning = "YES" 114.15 + buildForProfiling = "YES" 114.16 + buildForArchiving = "YES" 114.17 + buildForAnalyzing = "YES"> 114.18 + <BuildableReference 114.19 + BuildableIdentifier = "primary" 114.20 + BlueprintIdentifier = "D2AAC07D0554694100DB518D" 114.21 + BuildableName = "libCordova.a" 114.22 + BlueprintName = "CordovaLib" 114.23 + ReferencedContainer = "container:node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj"> 114.24 + </BuildableReference> 114.25 + </BuildActionEntry> 114.26 + </BuildActionEntries> 114.27 + </BuildAction> 114.28 + <TestAction 114.29 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 114.30 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 114.31 + shouldUseLaunchSchemeArgsEnv = "YES" 114.32 + buildConfiguration = "Debug"> 114.33 + <Testables> 114.34 + </Testables> 114.35 + </TestAction> 114.36 + <LaunchAction 114.37 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 114.38 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 114.39 + launchStyle = "0" 114.40 + useCustomWorkingDirectory = "NO" 114.41 + buildConfiguration = "Debug" 114.42 + ignoresPersistentStateOnLaunch = "NO" 114.43 + debugDocumentVersioning = "YES" 114.44 + allowLocationSimulation = "YES"> 114.45 + <MacroExpansion> 114.46 + <BuildableReference 114.47 + BuildableIdentifier = "primary" 114.48 + BlueprintIdentifier = "D2AAC07D0554694100DB518D" 114.49 + BuildableName = "libCordova.a" 114.50 + BlueprintName = "CordovaLib" 114.51 + ReferencedContainer = "container:node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj"> 114.52 + </BuildableReference> 114.53 + </MacroExpansion> 114.54 + <AdditionalOptions> 114.55 + </AdditionalOptions> 114.56 + </LaunchAction> 114.57 + <ProfileAction 114.58 + shouldUseLaunchSchemeArgsEnv = "YES" 114.59 + savedToolIdentifier = "" 114.60 + useCustomWorkingDirectory = "NO" 114.61 + buildConfiguration = "Release" 114.62 + debugDocumentVersioning = "YES"> 114.63 + <MacroExpansion> 114.64 + <BuildableReference 114.65 + BuildableIdentifier = "primary" 114.66 + BlueprintIdentifier = "D2AAC07D0554694100DB518D" 114.67 + BuildableName = "libCordova.a" 114.68 + BlueprintName = "CordovaLib" 114.69 + ReferencedContainer = "container:node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj"> 114.70 + </BuildableReference> 114.71 + </MacroExpansion> 114.72 + </ProfileAction> 114.73 + <AnalyzeAction 114.74 + buildConfiguration = "Debug"> 114.75 + </AnalyzeAction> 114.76 + <ArchiveAction 114.77 + buildConfiguration = "Release" 114.78 + revealArchiveInOrganizer = "YES"> 114.79 + </ArchiveAction> 114.80 +</Scheme>
115.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 115.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTest.m Thu Jun 04 14:50:33 2015 +0200 115.3 @@ -0,0 +1,702 @@ 115.4 +/* 115.5 + Licensed to the Apache Software Foundation (ASF) under one 115.6 + or more contributor license agreements. See the NOTICE file 115.7 + distributed with this work for additional information 115.8 + regarding copyright ownership. The ASF licenses this file 115.9 + to you under the Apache License, Version 2.0 (the 115.10 + "License"); you may not use this file except in compliance 115.11 + with the License. You may obtain a copy of the License at 115.12 + 115.13 + http://www.apache.org/licenses/LICENSE-2.0 115.14 + 115.15 + Unless required by applicable law or agreed to in writing, 115.16 + software distributed under the License is distributed on an 115.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 115.18 + KIND, either express or implied. See the License for the 115.19 + specific language governing permissions and limitations 115.20 + under the License. 115.21 + */ 115.22 + 115.23 +#import <UIKit/UIKit.h> 115.24 +#import <XCTest/XCTest.h> 115.25 +#import <Cordova/CDVScreenOrientationDelegate.h> 115.26 +#import "CDVSplashScreen.h" 115.27 +#import "ImageNameTestDelegates.h" 115.28 + 115.29 +const CDV_iOSDevice CDV_iOSDeviceZero = { 0, 0, 0, 0, 0, 0 }; 115.30 + 115.31 +@interface ImageNameTest : XCTestCase 115.32 + 115.33 +@property (nonatomic, strong) CDVSplashScreen* plugin; 115.34 + 115.35 +@end 115.36 + 115.37 +@interface CDVSplashScreen () 115.38 + 115.39 +// expose private interface 115.40 +- (NSString*)getImageName:(UIInterfaceOrientation)currentOrientation delegate:(id<CDVScreenOrientationDelegate>)orientationDelegate device:(CDV_iOSDevice)device; 115.41 + 115.42 +@end 115.43 + 115.44 +@implementation ImageNameTest 115.45 + 115.46 +- (void)setUp { 115.47 + [super setUp]; 115.48 + // Put setup code here. This method is called before the invocation of each test method in the class. 115.49 + 115.50 + self.plugin = [[CDVSplashScreen alloc] init]; 115.51 +} 115.52 + 115.53 +- (void)tearDown { 115.54 + // Put teardown code here. This method is called after the invocation of each test method in the class. 115.55 + [super tearDown]; 115.56 +} 115.57 + 115.58 +- (void) orientationHelper:(id<CDVScreenOrientationDelegate>)delegate expectedImageNameDictionary:(NSDictionary*)expectedImageNameDictionary device:(CDV_iOSDevice)device{ 115.59 + 115.60 + NSString* name = nil; 115.61 + NSString* expectedImageName = nil; 115.62 + UIInterfaceOrientation currentOrientation; 115.63 + NSString* deviceName = device.iPad? @"iPad" : device.iPhone6Plus? @"iPhone6Plus": device.iPhone6? @"iPhone6": device.iPhone5? @"iPhone5" : @"iPhone"; 115.64 + 115.65 + // LandscapeLeft, should always return expectedImageName 115.66 + currentOrientation = UIInterfaceOrientationLandscapeLeft; 115.67 + name = [self.plugin getImageName:currentOrientation delegate:delegate device:device]; 115.68 + expectedImageName = [expectedImageNameDictionary objectForKey:@"landscapeLeft"]; 115.69 + XCTAssertTrue([expectedImageName isEqualToString:name], @"%@ - %@ failed (%@)", @"Landscape", deviceName, name); 115.70 + 115.71 + // LandscapeRight - should always return expectedImageName 115.72 + currentOrientation = UIInterfaceOrientationLandscapeRight; 115.73 + name = [self.plugin getImageName:currentOrientation delegate:delegate device:device]; 115.74 + expectedImageName = [expectedImageNameDictionary objectForKey:@"landscapeRight"]; 115.75 + XCTAssertTrue([expectedImageName isEqualToString:name], @"%@ - %@ failed (%@)", @"Landscape", deviceName, name); 115.76 + 115.77 + // Portrait - should always return expectedImageName 115.78 + currentOrientation = UIInterfaceOrientationPortrait; 115.79 + name = [self.plugin getImageName:currentOrientation delegate:delegate device:device]; 115.80 + expectedImageName = [expectedImageNameDictionary objectForKey:@"portrait"]; 115.81 + XCTAssertTrue([expectedImageName isEqualToString:name], @"%@ - %@ failed (%@)", @"Portrait", deviceName, name); 115.82 + 115.83 + // PortraitUpsideDown - should always return expectedImageName 115.84 + currentOrientation = UIInterfaceOrientationPortraitUpsideDown; 115.85 + name = [self.plugin getImageName:currentOrientation delegate:delegate device:device]; 115.86 + expectedImageName = [expectedImageNameDictionary objectForKey:@"portraitUpsideDown"]; 115.87 + XCTAssertTrue([expectedImageName isEqualToString:name], @"%@ - %@ failed (%@)", @"Portrait", deviceName, name); 115.88 +} 115.89 + 115.90 +- (void)testiPadOrientation { 115.91 + 115.92 + CDV_iOSDevice device = CDV_iOSDeviceZero; 115.93 + device.iPad = YES; 115.94 + 115.95 + // One orientation 115.96 + 115.97 + PortraitOnly* delegate = [[PortraitOnly alloc] init]; 115.98 + [self orientationHelper:delegate expectedImageNameDictionary:@{ 115.99 + @"landscapeLeft" : @"Default-Portrait", 115.100 + @"landscapeRight" : @"Default-Portrait", 115.101 + @"portrait" : @"Default-Portrait", 115.102 + @"portraitUpsideDown" : @"Default-Portrait" 115.103 + } 115.104 + device:device]; 115.105 + 115.106 + PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init]; 115.107 + [self orientationHelper:delegate2 expectedImageNameDictionary:@{ 115.108 + @"landscapeLeft" : @"Default-Portrait", 115.109 + @"landscapeRight" : @"Default-Portrait", 115.110 + @"portrait" : @"Default-Portrait", 115.111 + @"portraitUpsideDown" : @"Default-Portrait" 115.112 + } 115.113 + device:device]; 115.114 + 115.115 + LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init]; 115.116 + [self orientationHelper:delegate3 expectedImageNameDictionary:@{ 115.117 + @"landscapeLeft" : @"Default-Landscape", 115.118 + @"landscapeRight" : @"Default-Landscape", 115.119 + @"portrait" : @"Default-Landscape", 115.120 + @"portraitUpsideDown" : @"Default-Landscape" 115.121 + } 115.122 + device:device]; 115.123 + 115.124 + LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init]; 115.125 + [self orientationHelper:delegate4 expectedImageNameDictionary:@{ 115.126 + @"landscapeLeft" : @"Default-Landscape", 115.127 + @"landscapeRight" : @"Default-Landscape", 115.128 + @"portrait" : @"Default-Landscape", 115.129 + @"portraitUpsideDown" : @"Default-Landscape" 115.130 + } 115.131 + device:device]; 115.132 + 115.133 + // All Portrait 115.134 + 115.135 + AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init]; 115.136 + [self orientationHelper:delegate5 expectedImageNameDictionary:@{ 115.137 + @"landscapeLeft" : @"Default-Portrait", 115.138 + @"landscapeRight" : @"Default-Portrait", 115.139 + @"portrait" : @"Default-Portrait", 115.140 + @"portraitUpsideDown" : @"Default-Portrait" 115.141 + } 115.142 + device:device]; 115.143 + 115.144 + // All Landscape 115.145 + 115.146 + AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init]; 115.147 + [self orientationHelper:delegate6 expectedImageNameDictionary:@{ 115.148 + @"landscapeLeft" : @"Default-Landscape", 115.149 + @"landscapeRight" : @"Default-Landscape", 115.150 + @"portrait" : @"Default-Landscape", 115.151 + @"portraitUpsideDown" : @"Default-Landscape" 115.152 + } 115.153 + device:device]; 115.154 + 115.155 + 115.156 + // All orientations 115.157 + 115.158 + AllOrientations* delegate7 = [[AllOrientations alloc] init]; 115.159 + [self orientationHelper:delegate7 expectedImageNameDictionary:@{ 115.160 + @"landscapeLeft" : @"Default-Landscape", 115.161 + @"landscapeRight" : @"Default-Landscape", 115.162 + @"portrait" : @"Default-Portrait", 115.163 + @"portraitUpsideDown" : @"Default-Portrait" 115.164 + } 115.165 + device:device]; 115.166 + 115.167 + // Portrait and Landscape Left 115.168 + 115.169 + PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init]; 115.170 + [self orientationHelper:delegate8 expectedImageNameDictionary:@{ 115.171 + @"landscapeLeft" : @"Default-Landscape", 115.172 + @"landscapeRight" : @"Default-Landscape", 115.173 + @"portrait" : @"Default-Portrait", 115.174 + @"portraitUpsideDown" : @"Default-Portrait" 115.175 + } 115.176 + device:device]; 115.177 + 115.178 + // Portrait and Landscape Right 115.179 + 115.180 + PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init]; 115.181 + [self orientationHelper:delegate9 expectedImageNameDictionary:@{ 115.182 + @"landscapeLeft" : @"Default-Landscape", 115.183 + @"landscapeRight" : @"Default-Landscape", 115.184 + @"portrait" : @"Default-Portrait", 115.185 + @"portraitUpsideDown" : @"Default-Portrait" 115.186 + } 115.187 + device:device]; 115.188 + 115.189 + // PortraitUpsideDown and Landscape Left 115.190 + 115.191 + PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init]; 115.192 + [self orientationHelper:delegate10 expectedImageNameDictionary:@{ 115.193 + @"landscapeLeft" : @"Default-Landscape", 115.194 + @"landscapeRight" : @"Default-Landscape", 115.195 + @"portrait" : @"Default-Portrait", 115.196 + @"portraitUpsideDown" : @"Default-Portrait" 115.197 + } 115.198 + device:device]; 115.199 + 115.200 + // PortraitUpsideDown and Landscape Right 115.201 + 115.202 + PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init]; 115.203 + [self orientationHelper:delegate11 expectedImageNameDictionary:@{ 115.204 + @"landscapeLeft" : @"Default-Landscape", 115.205 + @"landscapeRight" : @"Default-Landscape", 115.206 + @"portrait" : @"Default-Portrait", 115.207 + @"portraitUpsideDown" : @"Default-Portrait" 115.208 + } 115.209 + device:device]; 115.210 +} 115.211 + 115.212 +- (void)testiPhoneOrientation { 115.213 + 115.214 + CDV_iOSDevice device = CDV_iOSDeviceZero; 115.215 + device.iPhone = YES; 115.216 + 115.217 + // One orientation 115.218 + 115.219 + PortraitOnly* delegate = [[PortraitOnly alloc] init]; 115.220 + [self orientationHelper:delegate expectedImageNameDictionary:@{ 115.221 + @"landscapeLeft" : @"Default", 115.222 + @"landscapeRight" : @"Default", 115.223 + @"portrait" : @"Default", 115.224 + @"portraitUpsideDown" : @"Default" 115.225 + } 115.226 + device:device]; 115.227 + 115.228 + PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init]; 115.229 + [self orientationHelper:delegate2 expectedImageNameDictionary:@{ 115.230 + @"landscapeLeft" : @"Default", 115.231 + @"landscapeRight" : @"Default", 115.232 + @"portrait" : @"Default", 115.233 + @"portraitUpsideDown" : @"Default" 115.234 + } 115.235 + device:device]; 115.236 + 115.237 + LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init]; 115.238 + [self orientationHelper:delegate3 expectedImageNameDictionary:@{ 115.239 + @"landscapeLeft" : @"Default", 115.240 + @"landscapeRight" : @"Default", 115.241 + @"portrait" : @"Default", 115.242 + @"portraitUpsideDown" : @"Default" 115.243 + } 115.244 + device:device]; 115.245 + 115.246 + LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init]; 115.247 + [self orientationHelper:delegate4 expectedImageNameDictionary:@{ 115.248 + @"landscapeLeft" : @"Default", 115.249 + @"landscapeRight" : @"Default", 115.250 + @"portrait" : @"Default", 115.251 + @"portraitUpsideDown" : @"Default" 115.252 + } 115.253 + device:device]; 115.254 + 115.255 + // All Portrait 115.256 + 115.257 + AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init]; 115.258 + [self orientationHelper:delegate5 expectedImageNameDictionary:@{ 115.259 + @"landscapeLeft" : @"Default", 115.260 + @"landscapeRight" : @"Default", 115.261 + @"portrait" : @"Default", 115.262 + @"portraitUpsideDown" : @"Default" 115.263 + } 115.264 + device:device]; 115.265 + 115.266 + // All Landscape 115.267 + 115.268 + AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init]; 115.269 + [self orientationHelper:delegate6 expectedImageNameDictionary:@{ 115.270 + @"landscapeLeft" : @"Default", 115.271 + @"landscapeRight" : @"Default", 115.272 + @"portrait" : @"Default", 115.273 + @"portraitUpsideDown" : @"Default" 115.274 + } 115.275 + device:device]; 115.276 + 115.277 + 115.278 + // All orientations 115.279 + 115.280 + AllOrientations* delegate7 = [[AllOrientations alloc] init]; 115.281 + [self orientationHelper:delegate7 expectedImageNameDictionary:@{ 115.282 + @"landscapeLeft" : @"Default", 115.283 + @"landscapeRight" : @"Default", 115.284 + @"portrait" : @"Default", 115.285 + @"portraitUpsideDown" : @"Default" 115.286 + } 115.287 + device:device]; 115.288 + 115.289 + // Portrait and Landscape Left 115.290 + 115.291 + PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init]; 115.292 + [self orientationHelper:delegate8 expectedImageNameDictionary:@{ 115.293 + @"landscapeLeft" : @"Default", 115.294 + @"landscapeRight" : @"Default", 115.295 + @"portrait" : @"Default", 115.296 + @"portraitUpsideDown" : @"Default" 115.297 + } 115.298 + device:device]; 115.299 + 115.300 + // Portrait and Landscape Right 115.301 + 115.302 + PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init]; 115.303 + [self orientationHelper:delegate9 expectedImageNameDictionary:@{ 115.304 + @"landscapeLeft" : @"Default", 115.305 + @"landscapeRight" : @"Default", 115.306 + @"portrait" : @"Default", 115.307 + @"portraitUpsideDown" : @"Default" 115.308 + } 115.309 + device:device]; 115.310 + 115.311 + // PortraitUpsideDown and Landscape Left 115.312 + 115.313 + PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init]; 115.314 + [self orientationHelper:delegate10 expectedImageNameDictionary:@{ 115.315 + @"landscapeLeft" : @"Default", 115.316 + @"landscapeRight" : @"Default", 115.317 + @"portrait" : @"Default", 115.318 + @"portraitUpsideDown" : @"Default" 115.319 + } 115.320 + device:device]; 115.321 + 115.322 + // PortraitUpsideDown and Landscape Right 115.323 + 115.324 + PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init]; 115.325 + [self orientationHelper:delegate11 expectedImageNameDictionary:@{ 115.326 + @"landscapeLeft" : @"Default", 115.327 + @"landscapeRight" : @"Default", 115.328 + @"portrait" : @"Default", 115.329 + @"portraitUpsideDown" : @"Default" 115.330 + } 115.331 + device:device]; 115.332 +} 115.333 + 115.334 +- (void)testiPhone5Orientation { 115.335 + 115.336 + CDV_iOSDevice device = CDV_iOSDeviceZero; 115.337 + device.iPhone = YES; 115.338 + device.iPhone5 = YES; 115.339 + 115.340 + // One orientation 115.341 + 115.342 + PortraitOnly* delegate = [[PortraitOnly alloc] init]; 115.343 + [self orientationHelper:delegate expectedImageNameDictionary:@{ 115.344 + @"landscapeLeft" : @"Default-568h", 115.345 + @"landscapeRight" : @"Default-568h", 115.346 + @"portrait" : @"Default-568h", 115.347 + @"portraitUpsideDown" : @"Default-568h" 115.348 + } 115.349 + device:device]; 115.350 + 115.351 + PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init]; 115.352 + [self orientationHelper:delegate2 expectedImageNameDictionary:@{ 115.353 + @"landscapeLeft" : @"Default-568h", 115.354 + @"landscapeRight" : @"Default-568h", 115.355 + @"portrait" : @"Default-568h", 115.356 + @"portraitUpsideDown" : @"Default-568h" 115.357 + } 115.358 + device:device]; 115.359 + 115.360 + LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init]; 115.361 + [self orientationHelper:delegate3 expectedImageNameDictionary:@{ 115.362 + @"landscapeLeft" : @"Default-568h", 115.363 + @"landscapeRight" : @"Default-568h", 115.364 + @"portrait" : @"Default-568h", 115.365 + @"portraitUpsideDown" : @"Default-568h" 115.366 + } 115.367 + device:device]; 115.368 + 115.369 + LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init]; 115.370 + [self orientationHelper:delegate4 expectedImageNameDictionary:@{ 115.371 + @"landscapeLeft" : @"Default-568h", 115.372 + @"landscapeRight" : @"Default-568h", 115.373 + @"portrait" : @"Default-568h", 115.374 + @"portraitUpsideDown" : @"Default-568h" 115.375 + } 115.376 + device:device]; 115.377 + 115.378 + // All Portrait 115.379 + 115.380 + AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init]; 115.381 + [self orientationHelper:delegate5 expectedImageNameDictionary:@{ 115.382 + @"landscapeLeft" : @"Default-568h", 115.383 + @"landscapeRight" : @"Default-568h", 115.384 + @"portrait" : @"Default-568h", 115.385 + @"portraitUpsideDown" : @"Default-568h" 115.386 + } 115.387 + device:device]; 115.388 + 115.389 + // All Landscape 115.390 + 115.391 + AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init]; 115.392 + [self orientationHelper:delegate6 expectedImageNameDictionary:@{ 115.393 + @"landscapeLeft" : @"Default-568h", 115.394 + @"landscapeRight" : @"Default-568h", 115.395 + @"portrait" : @"Default-568h", 115.396 + @"portraitUpsideDown" : @"Default-568h" 115.397 + } 115.398 + device:device]; 115.399 + 115.400 + 115.401 + // All orientations 115.402 + 115.403 + AllOrientations* delegate7 = [[AllOrientations alloc] init]; 115.404 + [self orientationHelper:delegate7 expectedImageNameDictionary:@{ 115.405 + @"landscapeLeft" : @"Default-568h", 115.406 + @"landscapeRight" : @"Default-568h", 115.407 + @"portrait" : @"Default-568h", 115.408 + @"portraitUpsideDown" : @"Default-568h" 115.409 + } 115.410 + device:device]; 115.411 + 115.412 + // Portrait and Landscape Left 115.413 + 115.414 + PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init]; 115.415 + [self orientationHelper:delegate8 expectedImageNameDictionary:@{ 115.416 + @"landscapeLeft" : @"Default-568h", 115.417 + @"landscapeRight" : @"Default-568h", 115.418 + @"portrait" : @"Default-568h", 115.419 + @"portraitUpsideDown" : @"Default-568h" 115.420 + } 115.421 + device:device]; 115.422 + 115.423 + // Portrait and Landscape Right 115.424 + 115.425 + PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init]; 115.426 + [self orientationHelper:delegate9 expectedImageNameDictionary:@{ 115.427 + @"landscapeLeft" : @"Default-568h", 115.428 + @"landscapeRight" : @"Default-568h", 115.429 + @"portrait" : @"Default-568h", 115.430 + @"portraitUpsideDown" : @"Default-568h" 115.431 + } 115.432 + device:device]; 115.433 + 115.434 + // PortraitUpsideDown and Landscape Left 115.435 + 115.436 + PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init]; 115.437 + [self orientationHelper:delegate10 expectedImageNameDictionary:@{ 115.438 + @"landscapeLeft" : @"Default-568h", 115.439 + @"landscapeRight" : @"Default-568h", 115.440 + @"portrait" : @"Default-568h", 115.441 + @"portraitUpsideDown" : @"Default-568h" 115.442 + } 115.443 + device:device]; 115.444 + 115.445 + // PortraitUpsideDown and Landscape Right 115.446 + 115.447 + PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init]; 115.448 + [self orientationHelper:delegate11 expectedImageNameDictionary:@{ 115.449 + @"landscapeLeft" : @"Default-568h", 115.450 + @"landscapeRight" : @"Default-568h", 115.451 + @"portrait" : @"Default-568h", 115.452 + @"portraitUpsideDown" : @"Default-568h" 115.453 + } 115.454 + device:device]; 115.455 +} 115.456 + 115.457 +- (void)testiPhone6Orientation { 115.458 + 115.459 + CDV_iOSDevice device = CDV_iOSDeviceZero; 115.460 + device.iPhone = YES; 115.461 + device.iPhone6 = YES; 115.462 + 115.463 + // One orientation 115.464 + 115.465 + PortraitOnly* delegate = [[PortraitOnly alloc] init]; 115.466 + [self orientationHelper:delegate expectedImageNameDictionary:@{ 115.467 + @"landscapeLeft" : @"Default-667h", 115.468 + @"landscapeRight" : @"Default-667h", 115.469 + @"portrait" : @"Default-667h", 115.470 + @"portraitUpsideDown" : @"Default-667h" 115.471 + } 115.472 + device:device]; 115.473 + 115.474 + PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init]; 115.475 + [self orientationHelper:delegate2 expectedImageNameDictionary:@{ 115.476 + @"landscapeLeft" : @"Default-667h", 115.477 + @"landscapeRight" : @"Default-667h", 115.478 + @"portrait" : @"Default-667h", 115.479 + @"portraitUpsideDown" : @"Default-667h" 115.480 + } 115.481 + device:device]; 115.482 + 115.483 + LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init]; 115.484 + [self orientationHelper:delegate3 expectedImageNameDictionary:@{ 115.485 + @"landscapeLeft" : @"Default-667h", 115.486 + @"landscapeRight" : @"Default-667h", 115.487 + @"portrait" : @"Default-667h", 115.488 + @"portraitUpsideDown" : @"Default-667h" 115.489 + } 115.490 + device:device]; 115.491 + 115.492 + LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init]; 115.493 + [self orientationHelper:delegate4 expectedImageNameDictionary:@{ 115.494 + @"landscapeLeft" : @"Default-667h", 115.495 + @"landscapeRight" : @"Default-667h", 115.496 + @"portrait" : @"Default-667h", 115.497 + @"portraitUpsideDown" : @"Default-667h" 115.498 + } 115.499 + device:device]; 115.500 + 115.501 + // All Portrait 115.502 + 115.503 + AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init]; 115.504 + [self orientationHelper:delegate5 expectedImageNameDictionary:@{ 115.505 + @"landscapeLeft" : @"Default-667h", 115.506 + @"landscapeRight" : @"Default-667h", 115.507 + @"portrait" : @"Default-667h", 115.508 + @"portraitUpsideDown" : @"Default-667h" 115.509 + } 115.510 + device:device]; 115.511 + 115.512 + // All Landscape 115.513 + 115.514 + AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init]; 115.515 + [self orientationHelper:delegate6 expectedImageNameDictionary:@{ 115.516 + @"landscapeLeft" : @"Default-667h", 115.517 + @"landscapeRight" : @"Default-667h", 115.518 + @"portrait" : @"Default-667h", 115.519 + @"portraitUpsideDown" : @"Default-667h" 115.520 + } 115.521 + device:device]; 115.522 + 115.523 + 115.524 + // All orientations 115.525 + 115.526 + AllOrientations* delegate7 = [[AllOrientations alloc] init]; 115.527 + [self orientationHelper:delegate7 expectedImageNameDictionary:@{ 115.528 + @"landscapeLeft" : @"Default-667h", 115.529 + @"landscapeRight" : @"Default-667h", 115.530 + @"portrait" : @"Default-667h", 115.531 + @"portraitUpsideDown" : @"Default-667h" 115.532 + } 115.533 + device:device]; 115.534 + 115.535 + // Portrait and Landscape Left 115.536 + 115.537 + PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init]; 115.538 + [self orientationHelper:delegate8 expectedImageNameDictionary:@{ 115.539 + @"landscapeLeft" : @"Default-667h", 115.540 + @"landscapeRight" : @"Default-667h", 115.541 + @"portrait" : @"Default-667h", 115.542 + @"portraitUpsideDown" : @"Default-667h" 115.543 + } 115.544 + device:device]; 115.545 + 115.546 + // Portrait and Landscape Right 115.547 + 115.548 + PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init]; 115.549 + [self orientationHelper:delegate9 expectedImageNameDictionary:@{ 115.550 + @"landscapeLeft" : @"Default-667h", 115.551 + @"landscapeRight" : @"Default-667h", 115.552 + @"portrait" : @"Default-667h", 115.553 + @"portraitUpsideDown" : @"Default-667h" 115.554 + } 115.555 + device:device]; 115.556 + 115.557 + // PortraitUpsideDown and Landscape Left 115.558 + 115.559 + PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init]; 115.560 + [self orientationHelper:delegate10 expectedImageNameDictionary:@{ 115.561 + @"landscapeLeft" : @"Default-667h", 115.562 + @"landscapeRight" : @"Default-667h", 115.563 + @"portrait" : @"Default-667h", 115.564 + @"portraitUpsideDown" : @"Default-667h" 115.565 + } 115.566 + device:device]; 115.567 + 115.568 + // PortraitUpsideDown and Landscape Right 115.569 + 115.570 + PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init]; 115.571 + [self orientationHelper:delegate11 expectedImageNameDictionary:@{ 115.572 + @"landscapeLeft" : @"Default-667h", 115.573 + @"landscapeRight" : @"Default-667h", 115.574 + @"portrait" : @"Default-667h", 115.575 + @"portraitUpsideDown" : @"Default-667h" 115.576 + } 115.577 + device:device]; 115.578 +} 115.579 + 115.580 +- (void)testiPhone6PlusOrientation { 115.581 + 115.582 + CDV_iOSDevice device = CDV_iOSDeviceZero; 115.583 + device.iPhone = YES; 115.584 + device.iPhone6Plus = YES; 115.585 + 115.586 + // One orientation 115.587 + 115.588 + PortraitOnly* delegate = [[PortraitOnly alloc] init]; 115.589 + [self orientationHelper:delegate expectedImageNameDictionary:@{ 115.590 + @"landscapeLeft" : @"Default-736h", 115.591 + @"landscapeRight" : @"Default-736h", 115.592 + @"portrait" : @"Default-736h", 115.593 + @"portraitUpsideDown" : @"Default-736h" 115.594 + } 115.595 + device:device]; 115.596 + 115.597 + PortraitUpsideDownOnly* delegate2 = [[PortraitUpsideDownOnly alloc] init]; 115.598 + [self orientationHelper:delegate2 expectedImageNameDictionary:@{ 115.599 + @"landscapeLeft" : @"Default-736h", 115.600 + @"landscapeRight" : @"Default-736h", 115.601 + @"portrait" : @"Default-736h", 115.602 + @"portraitUpsideDown" : @"Default-736h" 115.603 + } 115.604 + device:device]; 115.605 + 115.606 + LandscapeLeftOnly* delegate3 = [[LandscapeLeftOnly alloc] init]; 115.607 + [self orientationHelper:delegate3 expectedImageNameDictionary:@{ 115.608 + @"landscapeLeft" : @"Default-Landscape-736h", 115.609 + @"landscapeRight" : @"Default-Landscape-736h", 115.610 + @"portrait" : @"Default-Landscape-736h", 115.611 + @"portraitUpsideDown" : @"Default-Landscape-736h" 115.612 + } 115.613 + device:device]; 115.614 + 115.615 + LandscapeRightOnly* delegate4 = [[LandscapeRightOnly alloc] init]; 115.616 + [self orientationHelper:delegate4 expectedImageNameDictionary:@{ 115.617 + @"landscapeLeft" : @"Default-Landscape-736h", 115.618 + @"landscapeRight" : @"Default-Landscape-736h", 115.619 + @"portrait" : @"Default-Landscape-736h", 115.620 + @"portraitUpsideDown" : @"Default-Landscape-736h" 115.621 + } 115.622 + device:device]; 115.623 + 115.624 + // All Portrait 115.625 + 115.626 + AllPortraitOnly* delegate5 = [[AllPortraitOnly alloc] init]; 115.627 + [self orientationHelper:delegate5 expectedImageNameDictionary:@{ 115.628 + @"landscapeLeft" : @"Default-736h", 115.629 + @"landscapeRight" : @"Default-736h", 115.630 + @"portrait" : @"Default-736h", 115.631 + @"portraitUpsideDown" : @"Default-736h" 115.632 + } 115.633 + device:device]; 115.634 + 115.635 + // All Landscape 115.636 + 115.637 + AllLandscapeOnly* delegate6 = [[AllLandscapeOnly alloc] init]; 115.638 + [self orientationHelper:delegate6 expectedImageNameDictionary:@{ 115.639 + @"landscapeLeft" : @"Default-Landscape-736h", 115.640 + @"landscapeRight" : @"Default-Landscape-736h", 115.641 + @"portrait" : @"Default-Landscape-736h", 115.642 + @"portraitUpsideDown" : @"Default-Landscape-736h" 115.643 + } 115.644 + device:device]; 115.645 + 115.646 + 115.647 + // All orientations 115.648 + 115.649 + AllOrientations* delegate7 = [[AllOrientations alloc] init]; 115.650 + [self orientationHelper:delegate7 expectedImageNameDictionary:@{ 115.651 + @"landscapeLeft" : @"Default-Landscape-736h", 115.652 + @"landscapeRight" : @"Default-Landscape-736h", 115.653 + @"portrait" : @"Default-736h", 115.654 + @"portraitUpsideDown" : @"Default-736h" 115.655 + } 115.656 + device:device]; 115.657 + 115.658 + // Portrait and Landscape Left 115.659 + 115.660 + PortraitAndLandscapeLeftOnly* delegate8 = [[PortraitAndLandscapeLeftOnly alloc] init]; 115.661 + [self orientationHelper:delegate8 expectedImageNameDictionary:@{ 115.662 + @"landscapeLeft" : @"Default-Landscape-736h", 115.663 + @"landscapeRight" : @"Default-Landscape-736h", 115.664 + @"portrait" : @"Default-736h", 115.665 + @"portraitUpsideDown" : @"Default-736h" 115.666 + } 115.667 + device:device]; 115.668 + 115.669 + // Portrait and Landscape Right 115.670 + 115.671 + PortraitAndLandscapeRightOnly* delegate9 = [[PortraitAndLandscapeRightOnly alloc] init]; 115.672 + [self orientationHelper:delegate9 expectedImageNameDictionary:@{ 115.673 + @"landscapeLeft" : @"Default-Landscape-736h", 115.674 + @"landscapeRight" : @"Default-Landscape-736h", 115.675 + @"portrait" : @"Default-736h", 115.676 + @"portraitUpsideDown" : @"Default-736h" 115.677 + } 115.678 + device:device]; 115.679 + 115.680 + // PortraitUpsideDown and Landscape Left 115.681 + 115.682 + PortraitUpsideDownAndLandscapeLeftOnly* delegate10 = [[PortraitUpsideDownAndLandscapeLeftOnly alloc] init]; 115.683 + [self orientationHelper:delegate10 expectedImageNameDictionary:@{ 115.684 + @"landscapeLeft" : @"Default-Landscape-736h", 115.685 + @"landscapeRight" : @"Default-Landscape-736h", 115.686 + @"portrait" : @"Default-736h", 115.687 + @"portraitUpsideDown" : @"Default-736h" 115.688 + } 115.689 + device:device]; 115.690 + 115.691 + // PortraitUpsideDown and Landscape Right 115.692 + 115.693 + PortraitUpsideDownAndLandscapeRightOnly* delegate11 = [[PortraitUpsideDownAndLandscapeRightOnly alloc] init]; 115.694 + [self orientationHelper:delegate11 expectedImageNameDictionary:@{ 115.695 + @"landscapeLeft" : @"Default-Landscape-736h", 115.696 + @"landscapeRight" : @"Default-Landscape-736h", 115.697 + @"portrait" : @"Default-736h", 115.698 + @"portraitUpsideDown" : @"Default-736h" 115.699 + } 115.700 + device:device]; 115.701 +} 115.702 + 115.703 + 115.704 + 115.705 +@end
116.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 116.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTestDelegates.h Thu Jun 04 14:50:33 2015 +0200 116.3 @@ -0,0 +1,57 @@ 116.4 +/* 116.5 + Licensed to the Apache Software Foundation (ASF) under one 116.6 + or more contributor license agreements. See the NOTICE file 116.7 + distributed with this work for additional information 116.8 + regarding copyright ownership. The ASF licenses this file 116.9 + to you under the Apache License, Version 2.0 (the 116.10 + "License"); you may not use this file except in compliance 116.11 + with the License. You may obtain a copy of the License at 116.12 + 116.13 + http://www.apache.org/licenses/LICENSE-2.0 116.14 + 116.15 + Unless required by applicable law or agreed to in writing, 116.16 + software distributed under the License is distributed on an 116.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 116.18 + KIND, either express or implied. See the License for the 116.19 + specific language governing permissions and limitations 116.20 + under the License. 116.21 + */ 116.22 + 116.23 +#import <Foundation/Foundation.h> 116.24 +#import <Cordova/CDVScreenOrientationDelegate.h> 116.25 + 116.26 +@interface PortraitOnly : NSObject <CDVScreenOrientationDelegate> 116.27 +@end 116.28 + 116.29 +@interface PortraitUpsideDownOnly : NSObject <CDVScreenOrientationDelegate> 116.30 +@end 116.31 + 116.32 +@interface AllPortraitOnly : NSObject <CDVScreenOrientationDelegate> 116.33 +@end 116.34 + 116.35 + 116.36 +@interface LandscapeLeftOnly : NSObject <CDVScreenOrientationDelegate> 116.37 +@end 116.38 + 116.39 +@interface LandscapeRightOnly : NSObject <CDVScreenOrientationDelegate> 116.40 +@end 116.41 + 116.42 +@interface AllLandscapeOnly : NSObject <CDVScreenOrientationDelegate> 116.43 +@end 116.44 + 116.45 + 116.46 +@interface AllOrientations : NSObject <CDVScreenOrientationDelegate> 116.47 +@end 116.48 + 116.49 +@interface PortraitAndLandscapeLeftOnly : NSObject <CDVScreenOrientationDelegate> 116.50 +@end 116.51 + 116.52 +@interface PortraitAndLandscapeRightOnly : NSObject <CDVScreenOrientationDelegate> 116.53 +@end 116.54 + 116.55 +@interface PortraitUpsideDownAndLandscapeLeftOnly : NSObject <CDVScreenOrientationDelegate> 116.56 +@end 116.57 + 116.58 +@interface PortraitUpsideDownAndLandscapeRightOnly : NSObject <CDVScreenOrientationDelegate> 116.59 +@end 116.60 +
117.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 117.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/ImageNameTestDelegates.m Thu Jun 04 14:50:33 2015 +0200 117.3 @@ -0,0 +1,200 @@ 117.4 +/* 117.5 + Licensed to the Apache Software Foundation (ASF) under one 117.6 + or more contributor license agreements. See the NOTICE file 117.7 + distributed with this work for additional information 117.8 + regarding copyright ownership. The ASF licenses this file 117.9 + to you under the Apache License, Version 2.0 (the 117.10 + "License"); you may not use this file except in compliance 117.11 + with the License. You may obtain a copy of the License at 117.12 + 117.13 + http://www.apache.org/licenses/LICENSE-2.0 117.14 + 117.15 + Unless required by applicable law or agreed to in writing, 117.16 + software distributed under the License is distributed on an 117.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 117.18 + KIND, either express or implied. See the License for the 117.19 + specific language governing permissions and limitations 117.20 + under the License. 117.21 + */ 117.22 + 117.23 +#import <UIKit/UIKit.h> 117.24 +#import "ImageNameTestDelegates.h" 117.25 + 117.26 +@implementation PortraitOnly 117.27 + 117.28 +- (NSUInteger)supportedInterfaceOrientations { 117.29 + return UIInterfaceOrientationMaskPortrait; 117.30 +} 117.31 + 117.32 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.33 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.34 +} 117.35 + 117.36 +- (BOOL)shouldAutorotate { 117.37 + return YES; 117.38 +} 117.39 + 117.40 +@end 117.41 + 117.42 +@implementation PortraitUpsideDownOnly 117.43 + 117.44 +- (NSUInteger)supportedInterfaceOrientations { 117.45 + return UIInterfaceOrientationMaskPortraitUpsideDown; 117.46 +} 117.47 + 117.48 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.49 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.50 +} 117.51 + 117.52 +- (BOOL)shouldAutorotate { 117.53 + return YES; 117.54 +} 117.55 + 117.56 +@end 117.57 + 117.58 +@implementation AllPortraitOnly 117.59 + 117.60 +- (NSUInteger)supportedInterfaceOrientations { 117.61 + return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; 117.62 +} 117.63 + 117.64 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.65 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.66 +} 117.67 + 117.68 +- (BOOL)shouldAutorotate { 117.69 + return YES; 117.70 +} 117.71 + 117.72 +@end 117.73 + 117.74 + 117.75 +@implementation LandscapeLeftOnly 117.76 + 117.77 +- (NSUInteger)supportedInterfaceOrientations { 117.78 + return UIInterfaceOrientationMaskLandscapeLeft; 117.79 +} 117.80 + 117.81 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.82 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.83 +} 117.84 + 117.85 +- (BOOL)shouldAutorotate { 117.86 + return YES; 117.87 +} 117.88 + 117.89 +@end 117.90 + 117.91 +@implementation LandscapeRightOnly 117.92 + 117.93 +- (NSUInteger)supportedInterfaceOrientations { 117.94 + return UIInterfaceOrientationMaskLandscapeRight; 117.95 +} 117.96 + 117.97 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.98 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.99 +} 117.100 + 117.101 +- (BOOL)shouldAutorotate { 117.102 + return YES; 117.103 +} 117.104 + 117.105 +@end 117.106 + 117.107 +@implementation AllLandscapeOnly 117.108 + 117.109 +- (NSUInteger)supportedInterfaceOrientations { 117.110 + return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; 117.111 +} 117.112 + 117.113 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.114 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.115 +} 117.116 + 117.117 +- (BOOL)shouldAutorotate { 117.118 + return YES; 117.119 +} 117.120 + 117.121 +@end 117.122 + 117.123 + 117.124 +@implementation AllOrientations 117.125 + 117.126 +- (NSUInteger)supportedInterfaceOrientations { 117.127 + return UIInterfaceOrientationMaskAll; 117.128 +} 117.129 + 117.130 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.131 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.132 +} 117.133 + 117.134 +- (BOOL)shouldAutorotate { 117.135 + return YES; 117.136 +} 117.137 + 117.138 +@end 117.139 + 117.140 +@implementation PortraitAndLandscapeLeftOnly 117.141 + 117.142 +- (NSUInteger)supportedInterfaceOrientations { 117.143 + return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft; 117.144 +} 117.145 + 117.146 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.147 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.148 +} 117.149 + 117.150 +- (BOOL)shouldAutorotate { 117.151 + return YES; 117.152 +} 117.153 + 117.154 +@end 117.155 + 117.156 +@implementation PortraitAndLandscapeRightOnly 117.157 + 117.158 +- (NSUInteger)supportedInterfaceOrientations { 117.159 + return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeRight; 117.160 +} 117.161 + 117.162 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.163 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.164 +} 117.165 + 117.166 +- (BOOL)shouldAutorotate { 117.167 + return YES; 117.168 +} 117.169 + 117.170 +@end 117.171 + 117.172 +@implementation PortraitUpsideDownAndLandscapeLeftOnly 117.173 + 117.174 +- (NSUInteger)supportedInterfaceOrientations { 117.175 + return UIInterfaceOrientationMaskPortraitUpsideDown | UIInterfaceOrientationMaskLandscapeLeft; 117.176 +} 117.177 + 117.178 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.179 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.180 +} 117.181 + 117.182 +- (BOOL)shouldAutorotate { 117.183 + return YES; 117.184 +} 117.185 + 117.186 +@end 117.187 + 117.188 +@implementation PortraitUpsideDownAndLandscapeRightOnly 117.189 + 117.190 +- (NSUInteger)supportedInterfaceOrientations { 117.191 + return UIInterfaceOrientationMaskPortraitUpsideDown | UIInterfaceOrientationMaskLandscapeRight; 117.192 +} 117.193 + 117.194 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 117.195 + return [self supportedInterfaceOrientations] & (1 << interfaceOrientation) ; 117.196 +} 117.197 + 117.198 +- (BOOL)shouldAutorotate { 117.199 + return YES; 117.200 +} 117.201 + 117.202 +@end 117.203 +
118.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 118.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenLibTests/Info.plist Thu Jun 04 14:50:33 2015 +0200 118.3 @@ -0,0 +1,24 @@ 118.4 +<?xml version="1.0" encoding="UTF-8"?> 118.5 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 118.6 +<plist version="1.0"> 118.7 +<dict> 118.8 + <key>CFBundleDevelopmentRegion</key> 118.9 + <string>en</string> 118.10 + <key>CFBundleExecutable</key> 118.11 + <string>$(EXECUTABLE_NAME)</string> 118.12 + <key>CFBundleIdentifier</key> 118.13 + <string>org.apache.cordova.$(PRODUCT_NAME:rfc1034identifier)</string> 118.14 + <key>CFBundleInfoDictionaryVersion</key> 118.15 + <string>6.0</string> 118.16 + <key>CFBundleName</key> 118.17 + <string>$(PRODUCT_NAME)</string> 118.18 + <key>CFBundlePackageType</key> 118.19 + <string>BNDL</string> 118.20 + <key>CFBundleShortVersionString</key> 118.21 + <string>1.0</string> 118.22 + <key>CFBundleSignature</key> 118.23 + <string>????</string> 118.24 + <key>CFBundleVersion</key> 118.25 + <string>1</string> 118.26 +</dict> 118.27 +</plist>
119.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 119.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.pbxproj Thu Jun 04 14:50:33 2015 +0200 119.3 @@ -0,0 +1,505 @@ 119.4 +// !$*UTF8*$! 119.5 +{ 119.6 + archiveVersion = 1; 119.7 + classes = { 119.8 + }; 119.9 + objectVersion = 46; 119.10 + objects = { 119.11 + 119.12 +/* Begin PBXBuildFile section */ 119.13 + 7E9F51AB19DA10AE00DA31AC /* CDVSplashScreen.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F51A919DA10AE00DA31AC /* CDVSplashScreen.m */; }; 119.14 + 7E9F51B119DA114400DA31AC /* ImageNameTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F51B019DA114400DA31AC /* ImageNameTest.m */; }; 119.15 + 7E9F51B319DA116500DA31AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F51B219DA116500DA31AC /* Foundation.framework */; }; 119.16 + 7E9F51B519DA127E00DA31AC /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F51B419DA127E00DA31AC /* UIKit.framework */; }; 119.17 + 7E9F51B819DA14FD00DA31AC /* ImageNameTestDelegates.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F51B719DA14FD00DA31AC /* ImageNameTestDelegates.m */; }; 119.18 + 7E9F51B919DA1B1600DA31AC /* libCDVSplashScreenLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F519519DA102000DA31AC /* libCDVSplashScreenLib.a */; }; 119.19 + 7E9F51BA19DA1B2000DA31AC /* libCordova.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E9F519019DA0F8300DA31AC /* libCordova.a */; }; 119.20 +/* End PBXBuildFile section */ 119.21 + 119.22 +/* Begin PBXContainerItemProxy section */ 119.23 + 7E9F518F19DA0F8300DA31AC /* PBXContainerItemProxy */ = { 119.24 + isa = PBXContainerItemProxy; 119.25 + containerPortal = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */; 119.26 + proxyType = 2; 119.27 + remoteGlobalIDString = 68A32D7114102E1C006B237C; 119.28 + remoteInfo = CordovaLib; 119.29 + }; 119.30 + 7E9F51AC19DA10DE00DA31AC /* PBXContainerItemProxy */ = { 119.31 + isa = PBXContainerItemProxy; 119.32 + containerPortal = 7E9F517219DA09CE00DA31AC /* Project object */; 119.33 + proxyType = 1; 119.34 + remoteGlobalIDString = 7E9F519419DA102000DA31AC; 119.35 + remoteInfo = CDVSplashScreenLib; 119.36 + }; 119.37 + 7E9F51AE19DA10E100DA31AC /* PBXContainerItemProxy */ = { 119.38 + isa = PBXContainerItemProxy; 119.39 + containerPortal = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */; 119.40 + proxyType = 1; 119.41 + remoteGlobalIDString = D2AAC07D0554694100DB518D; 119.42 + remoteInfo = CordovaLib; 119.43 + }; 119.44 +/* End PBXContainerItemProxy section */ 119.45 + 119.46 +/* Begin PBXCopyFilesBuildPhase section */ 119.47 + 7E9F519319DA102000DA31AC /* CopyFiles */ = { 119.48 + isa = PBXCopyFilesBuildPhase; 119.49 + buildActionMask = 2147483647; 119.50 + dstPath = "include/$(PRODUCT_NAME)"; 119.51 + dstSubfolderSpec = 16; 119.52 + files = ( 119.53 + ); 119.54 + runOnlyForDeploymentPostprocessing = 0; 119.55 + }; 119.56 +/* End PBXCopyFilesBuildPhase section */ 119.57 + 119.58 +/* Begin PBXFileReference section */ 119.59 + 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CordovaLib.xcodeproj; path = "../node_modules/cordova-ios/CordovaLib/CordovaLib.xcodeproj"; sourceTree = "<group>"; }; 119.60 + 7E9F519519DA102000DA31AC /* libCDVSplashScreenLib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCDVSplashScreenLib.a; sourceTree = BUILT_PRODUCTS_DIR; }; 119.61 + 7E9F519F19DA102000DA31AC /* CDVSplashScreenLibTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CDVSplashScreenLibTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 119.62 + 7E9F51A219DA102000DA31AC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 119.63 + 7E9F51A919DA10AE00DA31AC /* CDVSplashScreen.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CDVSplashScreen.m; path = ../../../src/ios/CDVSplashScreen.m; sourceTree = SOURCE_ROOT; }; 119.64 + 7E9F51AA19DA10AE00DA31AC /* CDVSplashScreen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CDVSplashScreen.h; path = ../../../src/ios/CDVSplashScreen.h; sourceTree = SOURCE_ROOT; }; 119.65 + 7E9F51B019DA114400DA31AC /* ImageNameTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageNameTest.m; sourceTree = "<group>"; }; 119.66 + 7E9F51B219DA116500DA31AC /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 119.67 + 7E9F51B419DA127E00DA31AC /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 119.68 + 7E9F51B619DA12C600DA31AC /* ImageNameTestDelegates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageNameTestDelegates.h; sourceTree = "<group>"; }; 119.69 + 7E9F51B719DA14FD00DA31AC /* ImageNameTestDelegates.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageNameTestDelegates.m; sourceTree = "<group>"; }; 119.70 +/* End PBXFileReference section */ 119.71 + 119.72 +/* Begin PBXFrameworksBuildPhase section */ 119.73 + 7E9F519219DA102000DA31AC /* Frameworks */ = { 119.74 + isa = PBXFrameworksBuildPhase; 119.75 + buildActionMask = 2147483647; 119.76 + files = ( 119.77 + ); 119.78 + runOnlyForDeploymentPostprocessing = 0; 119.79 + }; 119.80 + 7E9F519C19DA102000DA31AC /* Frameworks */ = { 119.81 + isa = PBXFrameworksBuildPhase; 119.82 + buildActionMask = 2147483647; 119.83 + files = ( 119.84 + 7E9F51BA19DA1B2000DA31AC /* libCordova.a in Frameworks */, 119.85 + 7E9F51B919DA1B1600DA31AC /* libCDVSplashScreenLib.a in Frameworks */, 119.86 + 7E9F51B519DA127E00DA31AC /* UIKit.framework in Frameworks */, 119.87 + 7E9F51B319DA116500DA31AC /* Foundation.framework in Frameworks */, 119.88 + ); 119.89 + runOnlyForDeploymentPostprocessing = 0; 119.90 + }; 119.91 +/* End PBXFrameworksBuildPhase section */ 119.92 + 119.93 +/* Begin PBXGroup section */ 119.94 + 7E9F517119DA09CE00DA31AC = { 119.95 + isa = PBXGroup; 119.96 + children = ( 119.97 + 7E9F51B419DA127E00DA31AC /* UIKit.framework */, 119.98 + 7E9F51B219DA116500DA31AC /* Foundation.framework */, 119.99 + 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */, 119.100 + 7E9F519619DA102000DA31AC /* CDVSplashScreenLib */, 119.101 + 7E9F51A019DA102000DA31AC /* CDVSplashScreenLibTests */, 119.102 + 7E9F517D19DA0A0A00DA31AC /* Products */, 119.103 + ); 119.104 + sourceTree = "<group>"; 119.105 + }; 119.106 + 7E9F517D19DA0A0A00DA31AC /* Products */ = { 119.107 + isa = PBXGroup; 119.108 + children = ( 119.109 + 7E9F519519DA102000DA31AC /* libCDVSplashScreenLib.a */, 119.110 + 7E9F519F19DA102000DA31AC /* CDVSplashScreenLibTests.xctest */, 119.111 + ); 119.112 + name = Products; 119.113 + sourceTree = "<group>"; 119.114 + }; 119.115 + 7E9F518C19DA0F8300DA31AC /* Products */ = { 119.116 + isa = PBXGroup; 119.117 + children = ( 119.118 + 7E9F519019DA0F8300DA31AC /* libCordova.a */, 119.119 + ); 119.120 + name = Products; 119.121 + sourceTree = "<group>"; 119.122 + }; 119.123 + 7E9F519619DA102000DA31AC /* CDVSplashScreenLib */ = { 119.124 + isa = PBXGroup; 119.125 + children = ( 119.126 + 7E9F51A919DA10AE00DA31AC /* CDVSplashScreen.m */, 119.127 + 7E9F51AA19DA10AE00DA31AC /* CDVSplashScreen.h */, 119.128 + ); 119.129 + path = CDVSplashScreenLib; 119.130 + sourceTree = SOURCE_ROOT; 119.131 + }; 119.132 + 7E9F51A019DA102000DA31AC /* CDVSplashScreenLibTests */ = { 119.133 + isa = PBXGroup; 119.134 + children = ( 119.135 + 7E9F51A119DA102000DA31AC /* Supporting Files */, 119.136 + 7E9F51B019DA114400DA31AC /* ImageNameTest.m */, 119.137 + 7E9F51B619DA12C600DA31AC /* ImageNameTestDelegates.h */, 119.138 + 7E9F51B719DA14FD00DA31AC /* ImageNameTestDelegates.m */, 119.139 + ); 119.140 + path = CDVSplashScreenLibTests; 119.141 + sourceTree = "<group>"; 119.142 + }; 119.143 + 7E9F51A119DA102000DA31AC /* Supporting Files */ = { 119.144 + isa = PBXGroup; 119.145 + children = ( 119.146 + 7E9F51A219DA102000DA31AC /* Info.plist */, 119.147 + ); 119.148 + name = "Supporting Files"; 119.149 + sourceTree = "<group>"; 119.150 + }; 119.151 +/* End PBXGroup section */ 119.152 + 119.153 +/* Begin PBXNativeTarget section */ 119.154 + 7E9F519419DA102000DA31AC /* CDVSplashScreenLib */ = { 119.155 + isa = PBXNativeTarget; 119.156 + buildConfigurationList = 7E9F51A319DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVSplashScreenLib" */; 119.157 + buildPhases = ( 119.158 + 7E9F519119DA102000DA31AC /* Sources */, 119.159 + 7E9F519219DA102000DA31AC /* Frameworks */, 119.160 + 7E9F519319DA102000DA31AC /* CopyFiles */, 119.161 + ); 119.162 + buildRules = ( 119.163 + ); 119.164 + dependencies = ( 119.165 + ); 119.166 + name = CDVSplashScreenLib; 119.167 + productName = CDVSplashScreenLib; 119.168 + productReference = 7E9F519519DA102000DA31AC /* libCDVSplashScreenLib.a */; 119.169 + productType = "com.apple.product-type.library.static"; 119.170 + }; 119.171 + 7E9F519E19DA102000DA31AC /* CDVSplashScreenLibTests */ = { 119.172 + isa = PBXNativeTarget; 119.173 + buildConfigurationList = 7E9F51A619DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVSplashScreenLibTests" */; 119.174 + buildPhases = ( 119.175 + 7E9F519B19DA102000DA31AC /* Sources */, 119.176 + 7E9F519C19DA102000DA31AC /* Frameworks */, 119.177 + 7E9F519D19DA102000DA31AC /* Resources */, 119.178 + ); 119.179 + buildRules = ( 119.180 + ); 119.181 + dependencies = ( 119.182 + 7E9F51AF19DA10E100DA31AC /* PBXTargetDependency */, 119.183 + 7E9F51AD19DA10DE00DA31AC /* PBXTargetDependency */, 119.184 + ); 119.185 + name = CDVSplashScreenLibTests; 119.186 + productName = CDVSplashScreenLibTests; 119.187 + productReference = 7E9F519F19DA102000DA31AC /* CDVSplashScreenLibTests.xctest */; 119.188 + productType = "com.apple.product-type.bundle.unit-test"; 119.189 + }; 119.190 +/* End PBXNativeTarget section */ 119.191 + 119.192 +/* Begin PBXProject section */ 119.193 + 7E9F517219DA09CE00DA31AC /* Project object */ = { 119.194 + isa = PBXProject; 119.195 + attributes = { 119.196 + LastUpgradeCheck = 0600; 119.197 + TargetAttributes = { 119.198 + 7E9F519419DA102000DA31AC = { 119.199 + CreatedOnToolsVersion = 6.0; 119.200 + }; 119.201 + 7E9F519E19DA102000DA31AC = { 119.202 + CreatedOnToolsVersion = 6.0; 119.203 + }; 119.204 + }; 119.205 + }; 119.206 + buildConfigurationList = 7E9F517519DA09CE00DA31AC /* Build configuration list for PBXProject "CDVSplashScreenTest" */; 119.207 + compatibilityVersion = "Xcode 3.2"; 119.208 + developmentRegion = English; 119.209 + hasScannedForEncodings = 0; 119.210 + knownRegions = ( 119.211 + en, 119.212 + ); 119.213 + mainGroup = 7E9F517119DA09CE00DA31AC; 119.214 + productRefGroup = 7E9F517D19DA0A0A00DA31AC /* Products */; 119.215 + projectDirPath = ""; 119.216 + projectReferences = ( 119.217 + { 119.218 + ProductGroup = 7E9F518C19DA0F8300DA31AC /* Products */; 119.219 + ProjectRef = 7E9F518B19DA0F8300DA31AC /* CordovaLib.xcodeproj */; 119.220 + }, 119.221 + ); 119.222 + projectRoot = ""; 119.223 + targets = ( 119.224 + 7E9F519419DA102000DA31AC /* CDVSplashScreenLib */, 119.225 + 7E9F519E19DA102000DA31AC /* CDVSplashScreenLibTests */, 119.226 + ); 119.227 + }; 119.228 +/* End PBXProject section */ 119.229 + 119.230 +/* Begin PBXReferenceProxy section */ 119.231 + 7E9F519019DA0F8300DA31AC /* libCordova.a */ = { 119.232 + isa = PBXReferenceProxy; 119.233 + fileType = archive.ar; 119.234 + path = libCordova.a; 119.235 + remoteRef = 7E9F518F19DA0F8300DA31AC /* PBXContainerItemProxy */; 119.236 + sourceTree = BUILT_PRODUCTS_DIR; 119.237 + }; 119.238 +/* End PBXReferenceProxy section */ 119.239 + 119.240 +/* Begin PBXResourcesBuildPhase section */ 119.241 + 7E9F519D19DA102000DA31AC /* Resources */ = { 119.242 + isa = PBXResourcesBuildPhase; 119.243 + buildActionMask = 2147483647; 119.244 + files = ( 119.245 + ); 119.246 + runOnlyForDeploymentPostprocessing = 0; 119.247 + }; 119.248 +/* End PBXResourcesBuildPhase section */ 119.249 + 119.250 +/* Begin PBXSourcesBuildPhase section */ 119.251 + 7E9F519119DA102000DA31AC /* Sources */ = { 119.252 + isa = PBXSourcesBuildPhase; 119.253 + buildActionMask = 2147483647; 119.254 + files = ( 119.255 + 7E9F51AB19DA10AE00DA31AC /* CDVSplashScreen.m in Sources */, 119.256 + ); 119.257 + runOnlyForDeploymentPostprocessing = 0; 119.258 + }; 119.259 + 7E9F519B19DA102000DA31AC /* Sources */ = { 119.260 + isa = PBXSourcesBuildPhase; 119.261 + buildActionMask = 2147483647; 119.262 + files = ( 119.263 + 7E9F51B119DA114400DA31AC /* ImageNameTest.m in Sources */, 119.264 + 7E9F51B819DA14FD00DA31AC /* ImageNameTestDelegates.m in Sources */, 119.265 + ); 119.266 + runOnlyForDeploymentPostprocessing = 0; 119.267 + }; 119.268 +/* End PBXSourcesBuildPhase section */ 119.269 + 119.270 +/* Begin PBXTargetDependency section */ 119.271 + 7E9F51AD19DA10DE00DA31AC /* PBXTargetDependency */ = { 119.272 + isa = PBXTargetDependency; 119.273 + target = 7E9F519419DA102000DA31AC /* CDVSplashScreenLib */; 119.274 + targetProxy = 7E9F51AC19DA10DE00DA31AC /* PBXContainerItemProxy */; 119.275 + }; 119.276 + 7E9F51AF19DA10E100DA31AC /* PBXTargetDependency */ = { 119.277 + isa = PBXTargetDependency; 119.278 + name = CordovaLib; 119.279 + targetProxy = 7E9F51AE19DA10E100DA31AC /* PBXContainerItemProxy */; 119.280 + }; 119.281 +/* End PBXTargetDependency section */ 119.282 + 119.283 +/* Begin XCBuildConfiguration section */ 119.284 + 7E9F517619DA09CE00DA31AC /* Debug */ = { 119.285 + isa = XCBuildConfiguration; 119.286 + buildSettings = { 119.287 + }; 119.288 + name = Debug; 119.289 + }; 119.290 + 7E9F517719DA09CE00DA31AC /* Release */ = { 119.291 + isa = XCBuildConfiguration; 119.292 + buildSettings = { 119.293 + }; 119.294 + name = Release; 119.295 + }; 119.296 + 7E9F51A419DA102000DA31AC /* Debug */ = { 119.297 + isa = XCBuildConfiguration; 119.298 + buildSettings = { 119.299 + ALWAYS_SEARCH_USER_PATHS = NO; 119.300 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 119.301 + CLANG_CXX_LIBRARY = "libc++"; 119.302 + CLANG_ENABLE_MODULES = YES; 119.303 + CLANG_ENABLE_OBJC_ARC = YES; 119.304 + CLANG_WARN_BOOL_CONVERSION = YES; 119.305 + CLANG_WARN_CONSTANT_CONVERSION = YES; 119.306 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 119.307 + CLANG_WARN_EMPTY_BODY = YES; 119.308 + CLANG_WARN_ENUM_CONVERSION = YES; 119.309 + CLANG_WARN_INT_CONVERSION = YES; 119.310 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 119.311 + CLANG_WARN_UNREACHABLE_CODE = YES; 119.312 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 119.313 + COPY_PHASE_STRIP = NO; 119.314 + ENABLE_STRICT_OBJC_MSGSEND = YES; 119.315 + GCC_C_LANGUAGE_STANDARD = gnu99; 119.316 + GCC_DYNAMIC_NO_PIC = NO; 119.317 + GCC_OPTIMIZATION_LEVEL = 0; 119.318 + GCC_PREPROCESSOR_DEFINITIONS = ( 119.319 + "DEBUG=1", 119.320 + "$(inherited)", 119.321 + ); 119.322 + GCC_SYMBOLS_PRIVATE_EXTERN = NO; 119.323 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 119.324 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 119.325 + GCC_WARN_UNDECLARED_SELECTOR = YES; 119.326 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 119.327 + GCC_WARN_UNUSED_FUNCTION = YES; 119.328 + GCC_WARN_UNUSED_VARIABLE = YES; 119.329 + HEADER_SEARCH_PATHS = ( 119.330 + "$(inherited)", 119.331 + "\"$(TARGET_BUILD_DIR)/usr/local/lib/include\"", 119.332 + "\"$(OBJROOT)/UninstalledProducts/include\"", 119.333 + "\"$(BUILT_PRODUCTS_DIR)\"", 119.334 + ); 119.335 + IPHONEOS_DEPLOYMENT_TARGET = 8.0; 119.336 + MTL_ENABLE_DEBUG_INFO = YES; 119.337 + ONLY_ACTIVE_ARCH = YES; 119.338 + OTHER_LDFLAGS = "-ObjC"; 119.339 + PRODUCT_NAME = "$(TARGET_NAME)"; 119.340 + SDKROOT = iphoneos; 119.341 + SKIP_INSTALL = YES; 119.342 + }; 119.343 + name = Debug; 119.344 + }; 119.345 + 7E9F51A519DA102000DA31AC /* Release */ = { 119.346 + isa = XCBuildConfiguration; 119.347 + buildSettings = { 119.348 + ALWAYS_SEARCH_USER_PATHS = NO; 119.349 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 119.350 + CLANG_CXX_LIBRARY = "libc++"; 119.351 + CLANG_ENABLE_MODULES = YES; 119.352 + CLANG_ENABLE_OBJC_ARC = YES; 119.353 + CLANG_WARN_BOOL_CONVERSION = YES; 119.354 + CLANG_WARN_CONSTANT_CONVERSION = YES; 119.355 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 119.356 + CLANG_WARN_EMPTY_BODY = YES; 119.357 + CLANG_WARN_ENUM_CONVERSION = YES; 119.358 + CLANG_WARN_INT_CONVERSION = YES; 119.359 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 119.360 + CLANG_WARN_UNREACHABLE_CODE = YES; 119.361 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 119.362 + COPY_PHASE_STRIP = YES; 119.363 + ENABLE_NS_ASSERTIONS = NO; 119.364 + ENABLE_STRICT_OBJC_MSGSEND = YES; 119.365 + GCC_C_LANGUAGE_STANDARD = gnu99; 119.366 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 119.367 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 119.368 + GCC_WARN_UNDECLARED_SELECTOR = YES; 119.369 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 119.370 + GCC_WARN_UNUSED_FUNCTION = YES; 119.371 + GCC_WARN_UNUSED_VARIABLE = YES; 119.372 + HEADER_SEARCH_PATHS = ( 119.373 + "$(inherited)", 119.374 + "\"$(TARGET_BUILD_DIR)/usr/local/lib/include\"", 119.375 + "\n\"$(OBJROOT)/UninstalledProducts/include\"\n\"$(BUILT_PRODUCTS_DIR)\"", 119.376 + ); 119.377 + IPHONEOS_DEPLOYMENT_TARGET = 8.0; 119.378 + MTL_ENABLE_DEBUG_INFO = NO; 119.379 + OTHER_LDFLAGS = "-ObjC"; 119.380 + PRODUCT_NAME = "$(TARGET_NAME)"; 119.381 + SDKROOT = iphoneos; 119.382 + SKIP_INSTALL = YES; 119.383 + VALIDATE_PRODUCT = YES; 119.384 + }; 119.385 + name = Release; 119.386 + }; 119.387 + 7E9F51A719DA102000DA31AC /* Debug */ = { 119.388 + isa = XCBuildConfiguration; 119.389 + buildSettings = { 119.390 + ALWAYS_SEARCH_USER_PATHS = NO; 119.391 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 119.392 + CLANG_CXX_LIBRARY = "libc++"; 119.393 + CLANG_ENABLE_MODULES = YES; 119.394 + CLANG_ENABLE_OBJC_ARC = YES; 119.395 + CLANG_WARN_BOOL_CONVERSION = YES; 119.396 + CLANG_WARN_CONSTANT_CONVERSION = YES; 119.397 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 119.398 + CLANG_WARN_EMPTY_BODY = YES; 119.399 + CLANG_WARN_ENUM_CONVERSION = YES; 119.400 + CLANG_WARN_INT_CONVERSION = YES; 119.401 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 119.402 + CLANG_WARN_UNREACHABLE_CODE = YES; 119.403 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 119.404 + COPY_PHASE_STRIP = NO; 119.405 + ENABLE_STRICT_OBJC_MSGSEND = YES; 119.406 + FRAMEWORK_SEARCH_PATHS = ( 119.407 + "$(SDKROOT)/Developer/Library/Frameworks", 119.408 + "$(inherited)", 119.409 + ); 119.410 + GCC_C_LANGUAGE_STANDARD = gnu99; 119.411 + GCC_DYNAMIC_NO_PIC = NO; 119.412 + GCC_OPTIMIZATION_LEVEL = 0; 119.413 + GCC_PREPROCESSOR_DEFINITIONS = ( 119.414 + "DEBUG=1", 119.415 + "$(inherited)", 119.416 + ); 119.417 + GCC_SYMBOLS_PRIVATE_EXTERN = NO; 119.418 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 119.419 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 119.420 + GCC_WARN_UNDECLARED_SELECTOR = YES; 119.421 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 119.422 + GCC_WARN_UNUSED_FUNCTION = YES; 119.423 + GCC_WARN_UNUSED_VARIABLE = YES; 119.424 + INFOPLIST_FILE = CDVSplashScreenLibTests/Info.plist; 119.425 + IPHONEOS_DEPLOYMENT_TARGET = 8.0; 119.426 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 119.427 + MTL_ENABLE_DEBUG_INFO = YES; 119.428 + ONLY_ACTIVE_ARCH = YES; 119.429 + PRODUCT_NAME = "$(TARGET_NAME)"; 119.430 + SDKROOT = iphoneos; 119.431 + }; 119.432 + name = Debug; 119.433 + }; 119.434 + 7E9F51A819DA102000DA31AC /* Release */ = { 119.435 + isa = XCBuildConfiguration; 119.436 + buildSettings = { 119.437 + ALWAYS_SEARCH_USER_PATHS = NO; 119.438 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 119.439 + CLANG_CXX_LIBRARY = "libc++"; 119.440 + CLANG_ENABLE_MODULES = YES; 119.441 + CLANG_ENABLE_OBJC_ARC = YES; 119.442 + CLANG_WARN_BOOL_CONVERSION = YES; 119.443 + CLANG_WARN_CONSTANT_CONVERSION = YES; 119.444 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 119.445 + CLANG_WARN_EMPTY_BODY = YES; 119.446 + CLANG_WARN_ENUM_CONVERSION = YES; 119.447 + CLANG_WARN_INT_CONVERSION = YES; 119.448 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 119.449 + CLANG_WARN_UNREACHABLE_CODE = YES; 119.450 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 119.451 + COPY_PHASE_STRIP = YES; 119.452 + ENABLE_NS_ASSERTIONS = NO; 119.453 + ENABLE_STRICT_OBJC_MSGSEND = YES; 119.454 + FRAMEWORK_SEARCH_PATHS = ( 119.455 + "$(SDKROOT)/Developer/Library/Frameworks", 119.456 + "$(inherited)", 119.457 + ); 119.458 + GCC_C_LANGUAGE_STANDARD = gnu99; 119.459 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 119.460 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 119.461 + GCC_WARN_UNDECLARED_SELECTOR = YES; 119.462 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 119.463 + GCC_WARN_UNUSED_FUNCTION = YES; 119.464 + GCC_WARN_UNUSED_VARIABLE = YES; 119.465 + INFOPLIST_FILE = CDVSplashScreenLibTests/Info.plist; 119.466 + IPHONEOS_DEPLOYMENT_TARGET = 8.0; 119.467 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 119.468 + MTL_ENABLE_DEBUG_INFO = NO; 119.469 + PRODUCT_NAME = "$(TARGET_NAME)"; 119.470 + SDKROOT = iphoneos; 119.471 + VALIDATE_PRODUCT = YES; 119.472 + }; 119.473 + name = Release; 119.474 + }; 119.475 +/* End XCBuildConfiguration section */ 119.476 + 119.477 +/* Begin XCConfigurationList section */ 119.478 + 7E9F517519DA09CE00DA31AC /* Build configuration list for PBXProject "CDVSplashScreenTest" */ = { 119.479 + isa = XCConfigurationList; 119.480 + buildConfigurations = ( 119.481 + 7E9F517619DA09CE00DA31AC /* Debug */, 119.482 + 7E9F517719DA09CE00DA31AC /* Release */, 119.483 + ); 119.484 + defaultConfigurationIsVisible = 0; 119.485 + defaultConfigurationName = Release; 119.486 + }; 119.487 + 7E9F51A319DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVSplashScreenLib" */ = { 119.488 + isa = XCConfigurationList; 119.489 + buildConfigurations = ( 119.490 + 7E9F51A419DA102000DA31AC /* Debug */, 119.491 + 7E9F51A519DA102000DA31AC /* Release */, 119.492 + ); 119.493 + defaultConfigurationIsVisible = 0; 119.494 + defaultConfigurationName = Release; 119.495 + }; 119.496 + 7E9F51A619DA102000DA31AC /* Build configuration list for PBXNativeTarget "CDVSplashScreenLibTests" */ = { 119.497 + isa = XCConfigurationList; 119.498 + buildConfigurations = ( 119.499 + 7E9F51A719DA102000DA31AC /* Debug */, 119.500 + 7E9F51A819DA102000DA31AC /* Release */, 119.501 + ); 119.502 + defaultConfigurationIsVisible = 0; 119.503 + defaultConfigurationName = Release; 119.504 + }; 119.505 +/* End XCConfigurationList section */ 119.506 + }; 119.507 + rootObject = 7E9F517219DA09CE00DA31AC /* Project object */; 119.508 +}
120.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 120.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata Thu Jun 04 14:50:33 2015 +0200 120.3 @@ -0,0 +1,7 @@ 120.4 +<?xml version="1.0" encoding="UTF-8"?> 120.5 +<Workspace 120.6 + version = "1.0"> 120.7 + <FileRef 120.8 + location = "self:CDVSplashScreenTest.xcodeproj"> 120.9 + </FileRef> 120.10 +</Workspace>
121.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 121.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/project.xcworkspace/xcshareddata/CDVSplashScreenTest.xccheckout Thu Jun 04 14:50:33 2015 +0200 121.3 @@ -0,0 +1,41 @@ 121.4 +<?xml version="1.0" encoding="UTF-8"?> 121.5 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 121.6 +<plist version="1.0"> 121.7 +<dict> 121.8 + <key>IDESourceControlProjectFavoriteDictionaryKey</key> 121.9 + <false/> 121.10 + <key>IDESourceControlProjectIdentifier</key> 121.11 + <string>6BE9AD73-1B9F-4362-98D7-DC631BEC6185</string> 121.12 + <key>IDESourceControlProjectName</key> 121.13 + <string>CDVSplashScreenTest</string> 121.14 + <key>IDESourceControlProjectOriginsDictionary</key> 121.15 + <dict> 121.16 + <key>BEF5A5D0FF64801E558286389440357A9233D7DB</key> 121.17 + <string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</string> 121.18 + </dict> 121.19 + <key>IDESourceControlProjectPath</key> 121.20 + <string>tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj</string> 121.21 + <key>IDESourceControlProjectRelativeInstallPathDictionary</key> 121.22 + <dict> 121.23 + <key>BEF5A5D0FF64801E558286389440357A9233D7DB</key> 121.24 + <string>../../../../..</string> 121.25 + </dict> 121.26 + <key>IDESourceControlProjectURL</key> 121.27 + <string>https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git</string> 121.28 + <key>IDESourceControlProjectVersion</key> 121.29 + <integer>111</integer> 121.30 + <key>IDESourceControlProjectWCCIdentifier</key> 121.31 + <string>BEF5A5D0FF64801E558286389440357A9233D7DB</string> 121.32 + <key>IDESourceControlProjectWCConfigurations</key> 121.33 + <array> 121.34 + <dict> 121.35 + <key>IDESourceControlRepositoryExtensionIdentifierKey</key> 121.36 + <string>public.vcs.git</string> 121.37 + <key>IDESourceControlWCCIdentifierKey</key> 121.38 + <string>BEF5A5D0FF64801E558286389440357A9233D7DB</string> 121.39 + <key>IDESourceControlWCCName</key> 121.40 + <string>cordova-plugin-splashscreen</string> 121.41 + </dict> 121.42 + </array> 121.43 +</dict> 121.44 +</plist>
122.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 122.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/xcshareddata/xcschemes/CDVSplashScreenLib.xcscheme Thu Jun 04 14:50:33 2015 +0200 122.3 @@ -0,0 +1,77 @@ 122.4 +<?xml version="1.0" encoding="UTF-8"?> 122.5 +<Scheme 122.6 + LastUpgradeVersion = "0600" 122.7 + version = "1.3"> 122.8 + <BuildAction 122.9 + parallelizeBuildables = "YES" 122.10 + buildImplicitDependencies = "YES"> 122.11 + <BuildActionEntries> 122.12 + <BuildActionEntry 122.13 + buildForTesting = "YES" 122.14 + buildForRunning = "YES" 122.15 + buildForProfiling = "YES" 122.16 + buildForArchiving = "YES" 122.17 + buildForAnalyzing = "YES"> 122.18 + <BuildableReference 122.19 + BuildableIdentifier = "primary" 122.20 + BlueprintIdentifier = "7E9F519419DA102000DA31AC" 122.21 + BuildableName = "libCDVSplashScreenLib.a" 122.22 + BlueprintName = "CDVSplashScreenLib" 122.23 + ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj"> 122.24 + </BuildableReference> 122.25 + </BuildActionEntry> 122.26 + </BuildActionEntries> 122.27 + </BuildAction> 122.28 + <TestAction 122.29 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 122.30 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 122.31 + shouldUseLaunchSchemeArgsEnv = "YES" 122.32 + buildConfiguration = "Debug"> 122.33 + <Testables> 122.34 + </Testables> 122.35 + </TestAction> 122.36 + <LaunchAction 122.37 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 122.38 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 122.39 + launchStyle = "0" 122.40 + useCustomWorkingDirectory = "NO" 122.41 + buildConfiguration = "Debug" 122.42 + ignoresPersistentStateOnLaunch = "NO" 122.43 + debugDocumentVersioning = "YES" 122.44 + allowLocationSimulation = "YES"> 122.45 + <MacroExpansion> 122.46 + <BuildableReference 122.47 + BuildableIdentifier = "primary" 122.48 + BlueprintIdentifier = "7E9F519419DA102000DA31AC" 122.49 + BuildableName = "libCDVSplashScreenLib.a" 122.50 + BlueprintName = "CDVSplashScreenLib" 122.51 + ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj"> 122.52 + </BuildableReference> 122.53 + </MacroExpansion> 122.54 + <AdditionalOptions> 122.55 + </AdditionalOptions> 122.56 + </LaunchAction> 122.57 + <ProfileAction 122.58 + shouldUseLaunchSchemeArgsEnv = "YES" 122.59 + savedToolIdentifier = "" 122.60 + useCustomWorkingDirectory = "NO" 122.61 + buildConfiguration = "Release" 122.62 + debugDocumentVersioning = "YES"> 122.63 + <MacroExpansion> 122.64 + <BuildableReference 122.65 + BuildableIdentifier = "primary" 122.66 + BlueprintIdentifier = "7E9F519419DA102000DA31AC" 122.67 + BuildableName = "libCDVSplashScreenLib.a" 122.68 + BlueprintName = "CDVSplashScreenLib" 122.69 + ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj"> 122.70 + </BuildableReference> 122.71 + </MacroExpansion> 122.72 + </ProfileAction> 122.73 + <AnalyzeAction 122.74 + buildConfiguration = "Debug"> 122.75 + </AnalyzeAction> 122.76 + <ArchiveAction 122.77 + buildConfiguration = "Release" 122.78 + revealArchiveInOrganizer = "YES"> 122.79 + </ArchiveAction> 122.80 +</Scheme>
123.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 123.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/CDVSplashScreenTest/CDVSplashScreenTest.xcodeproj/xcshareddata/xcschemes/CDVSplashScreenLibTests.xcscheme Thu Jun 04 14:50:33 2015 +0200 123.3 @@ -0,0 +1,96 @@ 123.4 +<?xml version="1.0" encoding="UTF-8"?> 123.5 +<Scheme 123.6 + LastUpgradeVersion = "0600" 123.7 + version = "1.3"> 123.8 + <BuildAction 123.9 + parallelizeBuildables = "YES" 123.10 + buildImplicitDependencies = "YES"> 123.11 + <BuildActionEntries> 123.12 + <BuildActionEntry 123.13 + buildForTesting = "YES" 123.14 + buildForRunning = "YES" 123.15 + buildForProfiling = "NO" 123.16 + buildForArchiving = "NO" 123.17 + buildForAnalyzing = "YES"> 123.18 + <BuildableReference 123.19 + BuildableIdentifier = "primary" 123.20 + BlueprintIdentifier = "7E9F519E19DA102000DA31AC" 123.21 + BuildableName = "CDVSplashScreenLibTests.xctest" 123.22 + BlueprintName = "CDVSplashScreenLibTests" 123.23 + ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj"> 123.24 + </BuildableReference> 123.25 + </BuildActionEntry> 123.26 + </BuildActionEntries> 123.27 + </BuildAction> 123.28 + <TestAction 123.29 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 123.30 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 123.31 + shouldUseLaunchSchemeArgsEnv = "YES" 123.32 + buildConfiguration = "Debug"> 123.33 + <Testables> 123.34 + <TestableReference 123.35 + skipped = "NO"> 123.36 + <BuildableReference 123.37 + BuildableIdentifier = "primary" 123.38 + BlueprintIdentifier = "7E9F519E19DA102000DA31AC" 123.39 + BuildableName = "CDVSplashScreenLibTests.xctest" 123.40 + BlueprintName = "CDVSplashScreenLibTests" 123.41 + ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj"> 123.42 + </BuildableReference> 123.43 + </TestableReference> 123.44 + </Testables> 123.45 + <MacroExpansion> 123.46 + <BuildableReference 123.47 + BuildableIdentifier = "primary" 123.48 + BlueprintIdentifier = "7E9F519E19DA102000DA31AC" 123.49 + BuildableName = "CDVSplashScreenLibTests.xctest" 123.50 + BlueprintName = "CDVSplashScreenLibTests" 123.51 + ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj"> 123.52 + </BuildableReference> 123.53 + </MacroExpansion> 123.54 + </TestAction> 123.55 + <LaunchAction 123.56 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 123.57 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 123.58 + launchStyle = "0" 123.59 + useCustomWorkingDirectory = "NO" 123.60 + buildConfiguration = "Debug" 123.61 + ignoresPersistentStateOnLaunch = "NO" 123.62 + debugDocumentVersioning = "YES" 123.63 + allowLocationSimulation = "YES"> 123.64 + <MacroExpansion> 123.65 + <BuildableReference 123.66 + BuildableIdentifier = "primary" 123.67 + BlueprintIdentifier = "7E9F519E19DA102000DA31AC" 123.68 + BuildableName = "CDVSplashScreenLibTests.xctest" 123.69 + BlueprintName = "CDVSplashScreenLibTests" 123.70 + ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj"> 123.71 + </BuildableReference> 123.72 + </MacroExpansion> 123.73 + <AdditionalOptions> 123.74 + </AdditionalOptions> 123.75 + </LaunchAction> 123.76 + <ProfileAction 123.77 + shouldUseLaunchSchemeArgsEnv = "YES" 123.78 + savedToolIdentifier = "" 123.79 + useCustomWorkingDirectory = "NO" 123.80 + buildConfiguration = "Release" 123.81 + debugDocumentVersioning = "YES"> 123.82 + <MacroExpansion> 123.83 + <BuildableReference 123.84 + BuildableIdentifier = "primary" 123.85 + BlueprintIdentifier = "7E9F519E19DA102000DA31AC" 123.86 + BuildableName = "CDVSplashScreenLibTests.xctest" 123.87 + BlueprintName = "CDVSplashScreenLibTests" 123.88 + ReferencedContainer = "container:CDVSplashScreenTest.xcodeproj"> 123.89 + </BuildableReference> 123.90 + </MacroExpansion> 123.91 + </ProfileAction> 123.92 + <AnalyzeAction 123.93 + buildConfiguration = "Debug"> 123.94 + </AnalyzeAction> 123.95 + <ArchiveAction 123.96 + buildConfiguration = "Release" 123.97 + revealArchiveInOrganizer = "YES"> 123.98 + </ArchiveAction> 123.99 +</Scheme>
124.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 124.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/README.md Thu Jun 04 14:50:33 2015 +0200 124.3 @@ -0,0 +1,21 @@ 124.4 +# iOS Tests for CDVSplashScreen 124.5 + 124.6 +You need to install `node.js` to pull in `cordova-ios`. 124.7 + 124.8 +First install cordova-ios: 124.9 + 124.10 + npm install 124.11 + 124.12 +... in the current folder. 124.13 + 124.14 + 124.15 +# Testing from Xcode 124.16 + 124.17 +1. Launch the `CDVSplashScreenTest.xcworkspace` file. 124.18 +2. Choose "CDVSplashScreenLibTests" from the scheme drop-down menu 124.19 +3. Click and hold on the `Play` button, and choose the `Wrench` icon to run the tests 124.20 + 124.21 + 124.22 +# Testing from the command line 124.23 + 124.24 + npm test
125.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 125.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/ios/package.json Thu Jun 04 14:50:33 2015 +0200 125.3 @@ -0,0 +1,13 @@ 125.4 +{ 125.5 + "name": "cordova-plugin-splashscreen-test-ios", 125.6 + "version": "1.0.0", 125.7 + "description": "iOS Unit Tests for Splashscreen Plugin", 125.8 + "author": "Apache Software Foundation", 125.9 + "license": "Apache Version 2.0", 125.10 + "dependencies": { 125.11 + "cordova-ios": "^3.6.0" 125.12 + }, 125.13 + "scripts": { 125.14 + "test": "xcodebuild -scheme CordovaLib && xcodebuild test -scheme CDVSplashScreenLibTests -destination 'platform=iOS Simulator,name=iPhone 5'" 125.15 + } 125.16 +} 125.17 \ No newline at end of file
126.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 126.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/plugin.xml Thu Jun 04 14:50:33 2015 +0200 126.3 @@ -0,0 +1,29 @@ 126.4 +<?xml version="1.0" encoding="UTF-8"?> 126.5 +<!-- 126.6 + Licensed to the Apache Software Foundation (ASF) under one 126.7 + or more contributor license agreements. See the NOTICE file 126.8 + distributed with this work for additional information 126.9 + regarding copyright ownership. The ASF licenses this file 126.10 + to you under the Apache License, Version 2.0 (the 126.11 + "License"); you may not use this file except in compliance 126.12 + with the License. You may obtain a copy of the License at 126.13 + 126.14 + http://www.apache.org/licenses/LICENSE-2.0 126.15 + 126.16 + Unless required by applicable law or agreed to in writing, 126.17 + software distributed under the License is distributed on an 126.18 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 126.19 + KIND, either express or implied. See the License for the 126.20 + specific language governing permissions and limitations 126.21 + under the License. 126.22 +--> 126.23 + 126.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 126.25 + id="org.apache.cordova.splashscreen.tests" 126.26 + version="0.3.5"> 126.27 + <name>Cordova Splashscreen Plugin Tests</name> 126.28 + <license>Apache 2.0</license> 126.29 + 126.30 + <js-module src="tests.js" name="tests"> 126.31 + </js-module> 126.32 +</plugin>
127.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 127.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/tests/tests.js Thu Jun 04 14:50:33 2015 +0200 127.3 @@ -0,0 +1,62 @@ 127.4 +/* 127.5 + * 127.6 + * Licensed to the Apache Software Foundation (ASF) under one 127.7 + * or more contributor license agreements. See the NOTICE file 127.8 + * distributed with this work for additional information 127.9 + * regarding copyright ownership. The ASF licenses this file 127.10 + * to you under the Apache License, Version 2.0 (the 127.11 + * "License"); you may not use this file except in compliance 127.12 + * with the License. You may obtain a copy of the License at 127.13 + * 127.14 + * http://www.apache.org/licenses/LICENSE-2.0 127.15 + * 127.16 + * Unless required by applicable law or agreed to in writing, 127.17 + * software distributed under the License is distributed on an 127.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 127.19 + * KIND, either express or implied. See the License for the 127.20 + * specific language governing permissions and limitations 127.21 + * under the License. 127.22 + * 127.23 +*/ 127.24 + 127.25 +exports.defineAutoTest = function () { 127.26 + describe('Splashscreen (cordova)', function () { 127.27 + it("splashscreen.spec.1 should exist", function () { 127.28 + expect(navigator.splashscreen).toBeDefined(); 127.29 + }); 127.30 + 127.31 + it("splashscreen.spec.2 exec method should exist", function () { 127.32 + expect(navigator.splashscreen.show).toBeDefined(); 127.33 + expect(typeof navigator.splashscreen.show).toBe('function'); 127.34 + }); 127.35 + 127.36 + it("splashscreen.spec.3 exec method should exist", function () { 127.37 + expect(navigator.splashscreen.hide).toBeDefined(); 127.38 + expect(typeof navigator.splashscreen.hide).toBe('function'); 127.39 + }); 127.40 + }); 127.41 +}; 127.42 + 127.43 +exports.defineManualTests = function (contentEl, createActionButton) { 127.44 + function showFor(duration) { 127.45 + navigator.splashscreen.show(); 127.46 + window.setTimeout(function () { 127.47 + navigator.splashscreen.hide(); 127.48 + }, 1000 * duration); 127.49 + } 127.50 + 127.51 + contentEl.innerHTML = '<h1>Splashscreen Tests</h1>' + 127.52 + '<h3>Note for WP: AutoHideSplashScreen must be set to false in config.xml</h3>' + 127.53 + '<div id="show1"></div>' + 127.54 + 'Expected result: Will show the Cordova splashscreen for 1 second' + 127.55 + '</p> <div id="show5"></div>' + 127.56 + 'Expected result: Will show the Cordova splashscreen for 5 seconds'; 127.57 + 127.58 + createActionButton('Show for 1 second', function () { 127.59 + showFor(1); 127.60 + }, 'show1'); 127.61 + 127.62 + createActionButton('Show for 5 seconds', function () { 127.63 + showFor(5); 127.64 + }, 'show5'); 127.65 +};
128.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 128.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/www/splashscreen.js Thu Jun 04 14:50:33 2015 +0200 128.3 @@ -0,0 +1,33 @@ 128.4 +/* 128.5 + * 128.6 + * Licensed to the Apache Software Foundation (ASF) under one 128.7 + * or more contributor license agreements. See the NOTICE file 128.8 + * distributed with this work for additional information 128.9 + * regarding copyright ownership. The ASF licenses this file 128.10 + * to you under the Apache License, Version 2.0 (the 128.11 + * "License"); you may not use this file except in compliance 128.12 + * with the License. You may obtain a copy of the License at 128.13 + * 128.14 + * http://www.apache.org/licenses/LICENSE-2.0 128.15 + * 128.16 + * Unless required by applicable law or agreed to in writing, 128.17 + * software distributed under the License is distributed on an 128.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 128.19 + * KIND, either express or implied. See the License for the 128.20 + * specific language governing permissions and limitations 128.21 + * under the License. 128.22 + * 128.23 +*/ 128.24 + 128.25 +var exec = require('cordova/exec'); 128.26 + 128.27 +var splashscreen = { 128.28 + show:function() { 128.29 + exec(null, null, "SplashScreen", "show", []); 128.30 + }, 128.31 + hide:function() { 128.32 + exec(null, null, "SplashScreen", "hide", []); 128.33 + } 128.34 +}; 128.35 + 128.36 +module.exports = splashscreen;
129.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 129.2 +++ b/Touchgui/plugins/org.apache.cordova.splashscreen/www/windows8/SplashScreenProxy.js Thu Jun 04 14:50:33 2015 +0200 129.3 @@ -0,0 +1,106 @@ 129.4 +/* 129.5 + * 129.6 + * Licensed to the Apache Software Foundation (ASF) under one 129.7 + * or more contributor license agreements. See the NOTICE file 129.8 + * distributed with this work for additional information 129.9 + * regarding copyright ownership. The ASF licenses this file 129.10 + * to you under the Apache License, Version 2.0 (the 129.11 + * "License"); you may not use this file except in compliance 129.12 + * with the License. You may obtain a copy of the License at 129.13 + * 129.14 + * http://www.apache.org/licenses/LICENSE-2.0 129.15 + * 129.16 + * Unless required by applicable law or agreed to in writing, 129.17 + * software distributed under the License is distributed on an 129.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 129.19 + * KIND, either express or implied. See the License for the 129.20 + * specific language governing permissions and limitations 129.21 + * under the License. 129.22 + * 129.23 +*/ 129.24 + 129.25 +/*jslint sloppy:true */ 129.26 +/*global Windows:true, require, module, window, document, WinJS */ 129.27 + 129.28 +var cordova = require('cordova'), 129.29 + channel = require('cordova/channel'); 129.30 + 129.31 +/* This is the actual implementation part that returns the result on Windows 8 129.32 +*/ 129.33 + 129.34 +var position = { x: 0, y: 0, width: 0, height: 0 }; // defined by evt.detail.splashScreen.imageLocation 129.35 +var splash = null; // 129.36 +var localSplash; // the image to display 129.37 +var localSplashImage; 129.38 +var bgColor = "#464646"; 129.39 + 129.40 + 129.41 + 129.42 +function updateImageLocation() { 129.43 + localSplash.style.width = window.innerWidth + "px"; 129.44 + localSplash.style.height = window.innerHeight + "px"; 129.45 + localSplash.style.top = "0px"; 129.46 + localSplash.style.left = "0px"; 129.47 + 129.48 + localSplashImage.style.top = position.y + "px"; 129.49 + localSplashImage.style.left = position.x + "px"; 129.50 + localSplashImage.style.height = position.height + "px"; 129.51 + localSplashImage.style.width = position.width + "px"; 129.52 +} 129.53 + 129.54 +function onResize(evt) { 129.55 + if (splash) { 129.56 + position = splash.imageLocation; 129.57 + updateImageLocation(); 129.58 + } 129.59 +} 129.60 + 129.61 +var SplashScreen = { 129.62 + setBGColor: function (cssBGColor) { 129.63 + bgColor = cssBGColor; 129.64 + if (localSplash) { 129.65 + localSplash.style.backgroundColor = bgColor; 129.66 + } 129.67 + }, 129.68 + show: function () { 129.69 + window.addEventListener("resize", onResize, false); 129.70 + localSplash = document.createElement("div"); 129.71 + localSplash.style.backgroundColor = bgColor; 129.72 + localSplash.style.position = "absolute"; 129.73 + 129.74 + localSplashImage = document.createElement("img"); 129.75 + localSplashImage.src = "ms-appx:///images/splashscreen.png"; 129.76 + localSplashImage.style.position = "absolute"; 129.77 + 129.78 + updateImageLocation(); 129.79 + 129.80 + localSplash.appendChild(localSplashImage); 129.81 + document.body.appendChild(localSplash); 129.82 + }, 129.83 + hide: function () { 129.84 + window.removeEventListener("resize", onResize, false); 129.85 + document.body.removeChild(localSplash); 129.86 + localSplash = null; 129.87 + } 129.88 +}; 129.89 + 129.90 +module.exports = SplashScreen; 129.91 + 129.92 +function activated(evt) { 129.93 + if (evt.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) { 129.94 + splash = evt.detail.splashScreen; 129.95 + position = evt.detail.splashScreen.imageLocation; 129.96 + } 129.97 +} 129.98 + 129.99 + 129.100 + 129.101 + 129.102 +channel.onCordovaReady.subscribe(function (evt) { 129.103 + document.addEventListener("DOMContentLoaded", function (evt) { 129.104 + WinJS.Application.addEventListener("activated", activated, false); 129.105 + }, false); 129.106 +}); 129.107 + 129.108 +require("cordova/exec/proxy").add("SplashScreen", SplashScreen); 129.109 +
130.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 130.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/.fetch.json Thu Jun 04 14:50:33 2015 +0200 130.3 @@ -0,0 +1,1 @@ 130.4 +{"source":{"type":"local","path":"/opt/intel/XDK_IoT_Edition/xdk/components/server/cordova-plugins/org.apache.cordova.vibration"}} 130.5 \ No newline at end of file
131.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 131.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/CONTRIBUTING.md Thu Jun 04 14:50:33 2015 +0200 131.3 @@ -0,0 +1,37 @@ 131.4 +<!-- 131.5 +# 131.6 +# Licensed to the Apache Software Foundation (ASF) under one 131.7 +# or more contributor license agreements. See the NOTICE file 131.8 +# distributed with this work for additional information 131.9 +# regarding copyright ownership. The ASF licenses this file 131.10 +# to you under the Apache License, Version 2.0 (the 131.11 +# "License"); you may not use this file except in compliance 131.12 +# with the License. You may obtain a copy of the License at 131.13 +# 131.14 +# http://www.apache.org/licenses/LICENSE-2.0 131.15 +# 131.16 +# Unless required by applicable law or agreed to in writing, 131.17 +# software distributed under the License is distributed on an 131.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 131.19 +# KIND, either express or implied. See the License for the 131.20 +# specific language governing permissions and limitations 131.21 +# under the License. 131.22 +# 131.23 +--> 131.24 + 131.25 +# Contributing to Apache Cordova 131.26 + 131.27 +Anyone can contribute to Cordova. And we need your contributions. 131.28 + 131.29 +There are multiple ways to contribute: report bugs, improve the docs, and 131.30 +contribute code. 131.31 + 131.32 +For instructions on this, start with the 131.33 +[contribution overview](http://cordova.apache.org/#contribute). 131.34 + 131.35 +The details are explained there, but the important items are: 131.36 + - Sign and submit an Apache ICLA (Contributor License Agreement). 131.37 + - Have a Jira issue open that corresponds to your contribution. 131.38 + - Run the tests so your patch doesn't break existing functionality. 131.39 + 131.40 +We look forward to your contributions!
132.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 132.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/LICENSE Thu Jun 04 14:50:33 2015 +0200 132.3 @@ -0,0 +1,202 @@ 132.4 + 132.5 + Apache License 132.6 + Version 2.0, January 2004 132.7 + http://www.apache.org/licenses/ 132.8 + 132.9 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 132.10 + 132.11 + 1. Definitions. 132.12 + 132.13 + "License" shall mean the terms and conditions for use, reproduction, 132.14 + and distribution as defined by Sections 1 through 9 of this document. 132.15 + 132.16 + "Licensor" shall mean the copyright owner or entity authorized by 132.17 + the copyright owner that is granting the License. 132.18 + 132.19 + "Legal Entity" shall mean the union of the acting entity and all 132.20 + other entities that control, are controlled by, or are under common 132.21 + control with that entity. For the purposes of this definition, 132.22 + "control" means (i) the power, direct or indirect, to cause the 132.23 + direction or management of such entity, whether by contract or 132.24 + otherwise, or (ii) ownership of fifty percent (50%) or more of the 132.25 + outstanding shares, or (iii) beneficial ownership of such entity. 132.26 + 132.27 + "You" (or "Your") shall mean an individual or Legal Entity 132.28 + exercising permissions granted by this License. 132.29 + 132.30 + "Source" form shall mean the preferred form for making modifications, 132.31 + including but not limited to software source code, documentation 132.32 + source, and configuration files. 132.33 + 132.34 + "Object" form shall mean any form resulting from mechanical 132.35 + transformation or translation of a Source form, including but 132.36 + not limited to compiled object code, generated documentation, 132.37 + and conversions to other media types. 132.38 + 132.39 + "Work" shall mean the work of authorship, whether in Source or 132.40 + Object form, made available under the License, as indicated by a 132.41 + copyright notice that is included in or attached to the work 132.42 + (an example is provided in the Appendix below). 132.43 + 132.44 + "Derivative Works" shall mean any work, whether in Source or Object 132.45 + form, that is based on (or derived from) the Work and for which the 132.46 + editorial revisions, annotations, elaborations, or other modifications 132.47 + represent, as a whole, an original work of authorship. For the purposes 132.48 + of this License, Derivative Works shall not include works that remain 132.49 + separable from, or merely link (or bind by name) to the interfaces of, 132.50 + the Work and Derivative Works thereof. 132.51 + 132.52 + "Contribution" shall mean any work of authorship, including 132.53 + the original version of the Work and any modifications or additions 132.54 + to that Work or Derivative Works thereof, that is intentionally 132.55 + submitted to Licensor for inclusion in the Work by the copyright owner 132.56 + or by an individual or Legal Entity authorized to submit on behalf of 132.57 + the copyright owner. For the purposes of this definition, "submitted" 132.58 + means any form of electronic, verbal, or written communication sent 132.59 + to the Licensor or its representatives, including but not limited to 132.60 + communication on electronic mailing lists, source code control systems, 132.61 + and issue tracking systems that are managed by, or on behalf of, the 132.62 + Licensor for the purpose of discussing and improving the Work, but 132.63 + excluding communication that is conspicuously marked or otherwise 132.64 + designated in writing by the copyright owner as "Not a Contribution." 132.65 + 132.66 + "Contributor" shall mean Licensor and any individual or Legal Entity 132.67 + on behalf of whom a Contribution has been received by Licensor and 132.68 + subsequently incorporated within the Work. 132.69 + 132.70 + 2. Grant of Copyright License. Subject to the terms and conditions of 132.71 + this License, each Contributor hereby grants to You a perpetual, 132.72 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 132.73 + copyright license to reproduce, prepare Derivative Works of, 132.74 + publicly display, publicly perform, sublicense, and distribute the 132.75 + Work and such Derivative Works in Source or Object form. 132.76 + 132.77 + 3. Grant of Patent License. Subject to the terms and conditions of 132.78 + this License, each Contributor hereby grants to You a perpetual, 132.79 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 132.80 + (except as stated in this section) patent license to make, have made, 132.81 + use, offer to sell, sell, import, and otherwise transfer the Work, 132.82 + where such license applies only to those patent claims licensable 132.83 + by such Contributor that are necessarily infringed by their 132.84 + Contribution(s) alone or by combination of their Contribution(s) 132.85 + with the Work to which such Contribution(s) was submitted. If You 132.86 + institute patent litigation against any entity (including a 132.87 + cross-claim or counterclaim in a lawsuit) alleging that the Work 132.88 + or a Contribution incorporated within the Work constitutes direct 132.89 + or contributory patent infringement, then any patent licenses 132.90 + granted to You under this License for that Work shall terminate 132.91 + as of the date such litigation is filed. 132.92 + 132.93 + 4. Redistribution. You may reproduce and distribute copies of the 132.94 + Work or Derivative Works thereof in any medium, with or without 132.95 + modifications, and in Source or Object form, provided that You 132.96 + meet the following conditions: 132.97 + 132.98 + (a) You must give any other recipients of the Work or 132.99 + Derivative Works a copy of this License; and 132.100 + 132.101 + (b) You must cause any modified files to carry prominent notices 132.102 + stating that You changed the files; and 132.103 + 132.104 + (c) You must retain, in the Source form of any Derivative Works 132.105 + that You distribute, all copyright, patent, trademark, and 132.106 + attribution notices from the Source form of the Work, 132.107 + excluding those notices that do not pertain to any part of 132.108 + the Derivative Works; and 132.109 + 132.110 + (d) If the Work includes a "NOTICE" text file as part of its 132.111 + distribution, then any Derivative Works that You distribute must 132.112 + include a readable copy of the attribution notices contained 132.113 + within such NOTICE file, excluding those notices that do not 132.114 + pertain to any part of the Derivative Works, in at least one 132.115 + of the following places: within a NOTICE text file distributed 132.116 + as part of the Derivative Works; within the Source form or 132.117 + documentation, if provided along with the Derivative Works; or, 132.118 + within a display generated by the Derivative Works, if and 132.119 + wherever such third-party notices normally appear. The contents 132.120 + of the NOTICE file are for informational purposes only and 132.121 + do not modify the License. You may add Your own attribution 132.122 + notices within Derivative Works that You distribute, alongside 132.123 + or as an addendum to the NOTICE text from the Work, provided 132.124 + that such additional attribution notices cannot be construed 132.125 + as modifying the License. 132.126 + 132.127 + You may add Your own copyright statement to Your modifications and 132.128 + may provide additional or different license terms and conditions 132.129 + for use, reproduction, or distribution of Your modifications, or 132.130 + for any such Derivative Works as a whole, provided Your use, 132.131 + reproduction, and distribution of the Work otherwise complies with 132.132 + the conditions stated in this License. 132.133 + 132.134 + 5. Submission of Contributions. Unless You explicitly state otherwise, 132.135 + any Contribution intentionally submitted for inclusion in the Work 132.136 + by You to the Licensor shall be under the terms and conditions of 132.137 + this License, without any additional terms or conditions. 132.138 + Notwithstanding the above, nothing herein shall supersede or modify 132.139 + the terms of any separate license agreement you may have executed 132.140 + with Licensor regarding such Contributions. 132.141 + 132.142 + 6. Trademarks. This License does not grant permission to use the trade 132.143 + names, trademarks, service marks, or product names of the Licensor, 132.144 + except as required for reasonable and customary use in describing the 132.145 + origin of the Work and reproducing the content of the NOTICE file. 132.146 + 132.147 + 7. Disclaimer of Warranty. Unless required by applicable law or 132.148 + agreed to in writing, Licensor provides the Work (and each 132.149 + Contributor provides its Contributions) on an "AS IS" BASIS, 132.150 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 132.151 + implied, including, without limitation, any warranties or conditions 132.152 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 132.153 + PARTICULAR PURPOSE. You are solely responsible for determining the 132.154 + appropriateness of using or redistributing the Work and assume any 132.155 + risks associated with Your exercise of permissions under this License. 132.156 + 132.157 + 8. Limitation of Liability. In no event and under no legal theory, 132.158 + whether in tort (including negligence), contract, or otherwise, 132.159 + unless required by applicable law (such as deliberate and grossly 132.160 + negligent acts) or agreed to in writing, shall any Contributor be 132.161 + liable to You for damages, including any direct, indirect, special, 132.162 + incidental, or consequential damages of any character arising as a 132.163 + result of this License or out of the use or inability to use the 132.164 + Work (including but not limited to damages for loss of goodwill, 132.165 + work stoppage, computer failure or malfunction, or any and all 132.166 + other commercial damages or losses), even if such Contributor 132.167 + has been advised of the possibility of such damages. 132.168 + 132.169 + 9. Accepting Warranty or Additional Liability. While redistributing 132.170 + the Work or Derivative Works thereof, You may choose to offer, 132.171 + and charge a fee for, acceptance of support, warranty, indemnity, 132.172 + or other liability obligations and/or rights consistent with this 132.173 + License. However, in accepting such obligations, You may act only 132.174 + on Your own behalf and on Your sole responsibility, not on behalf 132.175 + of any other Contributor, and only if You agree to indemnify, 132.176 + defend, and hold each Contributor harmless for any liability 132.177 + incurred by, or claims asserted against, such Contributor by reason 132.178 + of your accepting any such warranty or additional liability. 132.179 + 132.180 + END OF TERMS AND CONDITIONS 132.181 + 132.182 + APPENDIX: How to apply the Apache License to your work. 132.183 + 132.184 + To apply the Apache License to your work, attach the following 132.185 + boilerplate notice, with the fields enclosed by brackets "[]" 132.186 + replaced with your own identifying information. (Don't include 132.187 + the brackets!) The text should be enclosed in the appropriate 132.188 + comment syntax for the file format. We also recommend that a 132.189 + file or class name and description of purpose be included on the 132.190 + same "printed page" as the copyright notice for easier 132.191 + identification within third-party archives. 132.192 + 132.193 + Copyright [yyyy] [name of copyright owner] 132.194 + 132.195 + Licensed under the Apache License, Version 2.0 (the "License"); 132.196 + you may not use this file except in compliance with the License. 132.197 + You may obtain a copy of the License at 132.198 + 132.199 + http://www.apache.org/licenses/LICENSE-2.0 132.200 + 132.201 + Unless required by applicable law or agreed to in writing, software 132.202 + distributed under the License is distributed on an "AS IS" BASIS, 132.203 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132.204 + See the License for the specific language governing permissions and 132.205 + limitations under the License. 132.206 \ No newline at end of file
133.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 133.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/NOTICE Thu Jun 04 14:50:33 2015 +0200 133.3 @@ -0,0 +1,7 @@ 133.4 +Apache Cordova 133.5 +Copyright 2012 The Apache Software Foundation 133.6 + 133.7 +This product includes software developed at 133.8 +The Apache Software Foundation (http://www.apache.org/). 133.9 + 133.10 +This product includes software developed by Joerg Wiedenmann under the zlib license (http://www.gzip.org/zlib/zlib_license.html)
134.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 134.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/README.md Thu Jun 04 14:50:33 2015 +0200 134.3 @@ -0,0 +1,23 @@ 134.4 +<!--- 134.5 + license: Licensed to the Apache Software Foundation (ASF) under one 134.6 + or more contributor license agreements. See the NOTICE file 134.7 + distributed with this work for additional information 134.8 + regarding copyright ownership. The ASF licenses this file 134.9 + to you under the Apache License, Version 2.0 (the 134.10 + "License"); you may not use this file except in compliance 134.11 + with the License. You may obtain a copy of the License at 134.12 + 134.13 + http://www.apache.org/licenses/LICENSE-2.0 134.14 + 134.15 + Unless required by applicable law or agreed to in writing, 134.16 + software distributed under the License is distributed on an 134.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 134.18 + KIND, either express or implied. See the License for the 134.19 + specific language governing permissions and limitations 134.20 + under the License. 134.21 +--> 134.22 + 134.23 +# org.apache.cordova.vibration 134.24 + 134.25 +Plugin documentation: [doc/index.md](doc/index.md) 134.26 +
135.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 135.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/RELEASENOTES.md Thu Jun 04 14:50:33 2015 +0200 135.3 @@ -0,0 +1,110 @@ 135.4 +<!-- 135.5 +# 135.6 +# Licensed to the Apache Software Foundation (ASF) under one 135.7 +# or more contributor license agreements. See the NOTICE file 135.8 +# distributed with this work for additional information 135.9 +# regarding copyright ownership. The ASF licenses this file 135.10 +# to you under the Apache License, Version 2.0 (the 135.11 +# "License"); you may not use this file except in compliance 135.12 +# with the License. You may obtain a copy of the License at 135.13 +# 135.14 +# http://www.apache.org/licenses/LICENSE-2.0 135.15 +# 135.16 +# Unless required by applicable law or agreed to in writing, 135.17 +# software distributed under the License is distributed on an 135.18 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 135.19 +# KIND, either express or implied. See the License for the 135.20 +# specific language governing permissions and limitations 135.21 +# under the License. 135.22 +# 135.23 +--> 135.24 +# Release Notes 135.25 + 135.26 +### 0.3.0 (Sept 5, 2013) 135.27 +* Initial FirefoxOS support 135.28 +* [CB-4661] VIBRATE permission for Android 135.29 + 135.30 +### 0.3.2 (Sept 25, 2013) 135.31 +* CB-4889 bumping&resetting version 135.32 +* CB-4889 renaming org.apache.cordova.core.vibration to org.apache.cordova.vibration 135.33 +* Rename CHANGELOG.md -> RELEASENOTES.md 135.34 +* updated to work with ffos commandProxy 135.35 +* fixed plugin.xml for vibration 135.36 +* [CB-4593] [Blackberry10] Added vibration support for bb10 135.37 +* updated plugin to work with ffos 135.38 +* [CB-4752] Incremented plugin version on dev branch. 135.39 + 135.40 +### 0.3.3 (Oct 9, 2013) 135.41 +* add missing android namespace 135.42 +* [CB-4915] Incremented plugin version on dev branch. 135.43 + 135.44 +### 0.3.4 (Oct 28, 2013) 135.45 +* add repo + issue tag to plugin.xml for vibration plugin 135.46 +* corrected plugin.xml to write properly to config.xml for ffos 135.47 +* [CB-5010] Incremented plugin version on dev branch. 135.48 + 135.49 +### 0.3.5 (Dec 4, 2013) 135.50 +* add ubuntu platform 135.51 +* Added amazon-fireos platform. Change to include amazon-fireos as a platform if the user agent string contains 'cordova-amazon-fireos' 135.52 +* CB-4747 Fixed Blackberry background vibrate 135.53 + 135.54 +### 0.3.6 (Jan 02, 2014) 135.55 +* CB-5658 Add doc/index.md for Vibration plugin 135.56 + 135.57 +### 0.3.7 (Feb 05, 2014) 135.58 +* Add support for Tizen. 135.59 +* CB-3206 - Supported platforms updated 135.60 + 135.61 +### 0.3.8 (Apr 17, 2014) 135.62 +* CB-6465: Add license headers to Tizen code 135.63 +* CB-6460: Update license headers 135.64 +* Add NOTICE file 135.65 + 135.66 +### 0.3.9 (Jun 05, 2014) 135.67 +* updated notice file 135.68 +* Github close #11 135.69 +* Extended vibrateWithPattern to allow for pattern repetition, implemented a complementary cancelVibration function and adapted documentation. 135.70 +* Implemented vibrateWithPattern (for android) and adapted documentation. 135.71 +* CB-6811 Add license to CONTRIBUTING.md 135.72 +* CB-6491 add CONTRIBUTING.md 135.73 + 135.74 +### 0.3.10 (Aug 06, 2014) 135.75 +* ubuntu: Implemented vibrateWithPattern/cancelVibration 135.76 +* **FFOS** update VibrationProxy.js 135.77 +* CB-6127 Updated translations for docs 135.78 + 135.79 +### 0.3.11 (Sep 17, 2014) 135.80 +* CB-7249 cordova-plugin-vibration documentation translation 135.81 +* CB-6724 documented Windows support for vibrate with pattern and cancel vibrate in manual test doc and moved tests to tests dir 135.82 +* add longer pattern sequence for testing, change expected result for old vibrate with pattern test 135.83 +* added more test cases, changed vibrate with pattern durations, changed where vibrateOn is set to true 135.84 +* clear settimeout when user cancels vibration 135.85 +* add setTimeout function to update vibrateOn var if user doesn't cancel vibrate, add note about iOS 135.86 +* on/off button for cancel tests, add results box and msgs 135.87 +* added tests for old vibrateWithPattern and cancelVibration calls 135.88 +* added 'Android only' to buttons for specific tests, changed where console.log is executed for user to see earlier 135.89 +* added tests to ensure compliance with w3c spec 135.90 +* CB-6963 ported vibration automated & manual tests 135.91 +* CB-6966 renamed folder to tests + added nested plugin.xml 135.92 +* CB-6966 Ported Vibration automated & manual tests 135.93 +* removed duplicate messaging 135.94 +* CB-5459 slight change to the vibration documentation for pattern due to merge issue 135.95 +* changes to how 0 is getting added to array in order to align with w3c spec 135.96 +* changes to vibration.java to align with w3c, changes to vibration.js for backwards compatibility 135.97 +* changes made to align with w3c spec 135.98 +* Updated doc with Windows support for vibrate with pattern 135.99 +* Added note to doc about w3c alignment and min time for Windows 135.100 +* update doc with another way to cancel vibration 135.101 +* update doc to show vibrate([num]) is a standard vibrate 135.102 +* vibrate([num]) is treated as a vibrate not vibrate with pattern 135.103 +* added new example to documentation 135.104 +* updated doc for w3c alignment 135.105 +* changes to how 0 is getting added to array in order to align with w3c spec 135.106 +* changes to vibration.java to align with w3c, changes to vibration.js for backwards compatibility 135.107 +* changes made to align with w3c spec 135.108 + 135.109 +### 0.3.12 (Dec 02, 2014) 135.110 +* CB-8018 Add `vibrate(pattern)` fallback on vibrate for **Windows Phone 8** 135.111 +* CB-7977 Mention `deviceready` in plugin docs 135.112 +* CB-7700 cordova-plugin-vibration documentation translation: cordova-plugin-vibration 135.113 +* CB-7571 Bump version of nested plugin to match parent plugin
136.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 136.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/de/index.md Thu Jun 04 14:50:33 2015 +0200 136.3 @@ -0,0 +1,170 @@ 136.4 +<!--- 136.5 + Licensed to the Apache Software Foundation (ASF) under one 136.6 + or more contributor license agreements. See the NOTICE file 136.7 + distributed with this work for additional information 136.8 + regarding copyright ownership. The ASF licenses this file 136.9 + to you under the Apache License, Version 2.0 (the 136.10 + "License"); you may not use this file except in compliance 136.11 + with the License. You may obtain a copy of the License at 136.12 + 136.13 + http://www.apache.org/licenses/LICENSE-2.0 136.14 + 136.15 + Unless required by applicable law or agreed to in writing, 136.16 + software distributed under the License is distributed on an 136.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 136.18 + KIND, either express or implied. See the License for the 136.19 + specific language governing permissions and limitations 136.20 + under the License. 136.21 +--> 136.22 + 136.23 +# org.apache.cordova.vibration 136.24 + 136.25 +Dieses Plugin richtet mit dem W3C Vibration Spezifikation http://www.w3.org/TR/vibration/ 136.26 + 136.27 +Dieses Plugin bietet eine Möglichkeit, das Gerät zu vibrieren. 136.28 + 136.29 +## Installation 136.30 + 136.31 + cordova plugin add org.apache.cordova.vibration 136.32 + 136.33 + 136.34 +## Unterstützte Plattformen 136.35 + 136.36 +Navigator.Vibrate 136.37 +Navigator.Notification.Vibrate - Amazon Fire OS - Android - BlackBerry 10 - Firefox OS - iOS - Windows Phone 7 und 8 136.38 + 136.39 +navigator.notification.vibrateWithPattern, 136.40 +navigator.notification.cancelVibration - Android 136.41 + 136.42 +## vibrieren (empfohlen) 136.43 + 136.44 +Diese Funktion hat drei verschiedene Funktionalitäten, die auf der Grundlage von an sie übergebenen Parameter. 136.45 + 136.46 +### Standard vibrieren 136.47 + 136.48 +Vibriert das Gerät für einen bestimmten Zeitraum. 136.49 + 136.50 + navigator.vibrate(time) 136.51 + 136.52 + 136.53 +oder 136.54 + 136.55 + navigator.vibrate([time]) 136.56 + 136.57 + 136.58 +-**Zeit**: Millisekunden das Gerät vibriert. *(Anzahl)* 136.59 + 136.60 +#### Beispiel 136.61 + 136.62 + // Vibrate for 3 seconds 136.63 + navigator.vibrate(3000); 136.64 + 136.65 + // Vibrate for 3 seconds 136.66 + navigator.vibrate([3000]); 136.67 + 136.68 + 136.69 +#### iOS Macken 136.70 + 136.71 +* **Zeit**: ignoriert die angegebene Zeit und für eine voreingestellte Zeit vibriert. 136.72 + 136.73 + navigator.vibrate(3000); // 3000 is ignored 136.74 + 136.75 +#### Windows und Blackberry-Kniffe 136.76 + 136.77 +* **Zeit**: Max. Zeit 5000ms (5 s) und min Zeit ist 1ms 136.78 + 136.79 + navigator.vibrate(8000); // will be truncated to 5000 136.80 + 136.81 +### Vibrieren Sie mit einem Muster (Android und Windows nur) 136.82 + 136.83 +Vibriert das Gerät mit einem vorgegebenen Muster 136.84 + 136.85 + navigator.vibrate(pattern); 136.86 + 136.87 + 136.88 +* **Muster**: Folge von Dauer (in Millisekunden) für den ein-oder Ausschalten der Vibrator. *(Array von Zahlen)* 136.89 + 136.90 +#### Beispiel 136.91 + 136.92 + // Vibrate for 1 second 136.93 + // Wait for 1 second 136.94 + // Vibrate for 3 seconds 136.95 + // Wait for 1 second 136.96 + // Vibrate for 5 seconds 136.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 136.98 + 136.99 + 136.100 +### "Abbrechen" Vibration (nicht in iOS unterstützt) 136.101 + 136.102 +Sofort bricht alle derzeit ausgeführten Schwingungen. 136.103 + 136.104 + navigator.vibrate(0) 136.105 + 136.106 + 136.107 +oder 136.108 + 136.109 + navigator.vibrate([]) 136.110 + 136.111 + 136.112 +oder 136.113 + 136.114 + navigator.vibrate([0]) 136.115 + 136.116 + 136.117 +Übergabe eines Parameters 0, wird ein leeres Array, oder ein Array mit einem Element der Wert 0 auftretender Schwingungen abbrechen. 136.118 + 136.119 +## *Notification.Vibrate (veraltet) 136.120 + 136.121 +Vibriert das Gerät für einen bestimmten Zeitraum. 136.122 + 136.123 + navigator.notification.vibrate(time) 136.124 + 136.125 + 136.126 +* **Zeit**: Millisekunden das Gerät vibriert. *(Anzahl)* 136.127 + 136.128 +### Beispiel 136.129 + 136.130 + // Vibrate for 2.5 seconds 136.131 + navigator.notification.vibrate(2500); 136.132 + 136.133 + 136.134 +### iOS Macken 136.135 + 136.136 +* **Zeit**: ignoriert die angegebene Zeit und für eine voreingestellte Zeit vibriert. 136.137 + 136.138 + navigator.notification.vibrate(); 136.139 + navigator.notification.vibrate(2500); // 2500 is ignored 136.140 + 136.141 + 136.142 +## *Notification.vibrateWithPattern (veraltet) 136.143 + 136.144 +Vibriert das Gerät mit einem vorgegebenen Muster. 136.145 + 136.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 136.147 + 136.148 + 136.149 +* **Muster**: Folge von Dauer (in Millisekunden) für den ein-oder Ausschalten der Vibrator. *(Array von Zahlen)* 136.150 +* **Wiederholen**: optionale Index in das Array Muster an der wiederholte (wird wiederholt, bis abgebrochen) zu starten, oder-1 für Wiederholung (Standard). *(Anzahl)* 136.151 + 136.152 +### Beispiel 136.153 + 136.154 + // Immediately start vibrating 136.155 + // vibrate for 100ms, 136.156 + // wait for 100ms, 136.157 + // vibrate for 200ms, 136.158 + // wait for 100ms, 136.159 + // vibrate for 400ms, 136.160 + // wait for 100ms, 136.161 + // vibrate for 800ms, 136.162 + // (do not repeat) 136.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 136.164 + 136.165 + 136.166 +## *Notification.cancelVibration (veraltet) 136.167 + 136.168 +Sofort bricht alle derzeit ausgeführten Schwingungen. 136.169 + 136.170 + navigator.notification.cancelVibration() 136.171 + 136.172 + 136.173 +* Note - durch Angleichung an die w3c-Spezifikation, die markierten Methoden abgeschafft werden wird 136.174 \ No newline at end of file
137.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 137.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/es/index.md Thu Jun 04 14:50:33 2015 +0200 137.3 @@ -0,0 +1,170 @@ 137.4 +<!--- 137.5 + Licensed to the Apache Software Foundation (ASF) under one 137.6 + or more contributor license agreements. See the NOTICE file 137.7 + distributed with this work for additional information 137.8 + regarding copyright ownership. The ASF licenses this file 137.9 + to you under the Apache License, Version 2.0 (the 137.10 + "License"); you may not use this file except in compliance 137.11 + with the License. You may obtain a copy of the License at 137.12 + 137.13 + http://www.apache.org/licenses/LICENSE-2.0 137.14 + 137.15 + Unless required by applicable law or agreed to in writing, 137.16 + software distributed under the License is distributed on an 137.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 137.18 + KIND, either express or implied. See the License for the 137.19 + specific language governing permissions and limitations 137.20 + under the License. 137.21 +--> 137.22 + 137.23 +# org.apache.cordova.vibration 137.24 + 137.25 +Este plugin se alinea con la vibración W3C especificación http://www.w3.org/TR/vibration/ 137.26 + 137.27 +Este plugin proporciona una manera de vibrar el dispositivo. 137.28 + 137.29 +## Instalación 137.30 + 137.31 + cordova plugin add org.apache.cordova.vibration 137.32 + 137.33 + 137.34 +## Plataformas soportadas 137.35 + 137.36 +Navigator.Vibrate 137.37 +Navigator.Notification.Vibrate - Amazon fuego OS - sistema operativo Android - BlackBerry 10 - Firefox - iOS - Windows Phone 7 y 8 137.38 + 137.39 +navigator.notification.vibrateWithPattern, 137.40 +navigator.notification.cancelVibration - Android 137.41 + 137.42 +## vibrar (recomendado) 137.43 + 137.44 +Esta función tiene tres diferentes funcionalidades basadas en los parámetros pasados a él. 137.45 + 137.46 +### Estándar de vibrar 137.47 + 137.48 +Vibra el dispositivo para una cantidad dada de tiempo. 137.49 + 137.50 + navigator.vibrate(time) 137.51 + 137.52 + 137.53 +o 137.54 + 137.55 + navigator.vibrate([time]) 137.56 + 137.57 + 137.58 +-**tiempo**: milisegundos a vibrar el dispositivo. *(Número)* 137.59 + 137.60 +#### Ejemplo 137.61 + 137.62 + // Vibrate for 3 seconds 137.63 + navigator.vibrate(3000); 137.64 + 137.65 + // Vibrate for 3 seconds 137.66 + navigator.vibrate([3000]); 137.67 + 137.68 + 137.69 +#### iOS rarezas 137.70 + 137.71 +* **time**: ignora el tiempo especificado y vibra por un tiempo preestablecido. 137.72 + 137.73 + navigator.vibrate(3000); // 3000 is ignored 137.74 + 137.75 +#### Windows y rarezas de Blackberry 137.76 + 137.77 +* **tiempo**: tiempo máximo es 5000ms (5s) y min tiempo 1ms 137.78 + 137.79 + navigator.vibrate(8000); // will be truncated to 5000 137.80 + 137.81 +### Vibrar con un patrón (Android y Windows solamente) 137.82 + 137.83 +Vibra el dispositivo con un patrón determinado 137.84 + 137.85 + navigator.vibrate(pattern); 137.86 + 137.87 + 137.88 +* **patrón**: secuencia de duraciones (en milisegundos) que desea activar o desactivar el vibrador. *(Matriz de números)* 137.89 + 137.90 +#### Ejemplo 137.91 + 137.92 + // Vibrate for 1 second 137.93 + // Wait for 1 second 137.94 + // Vibrate for 3 seconds 137.95 + // Wait for 1 second 137.96 + // Vibrate for 5 seconds 137.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 137.98 + 137.99 + 137.100 +### Cancelar vibración (no soportada en iOS) 137.101 + 137.102 +Inmediatamente se cancela cualquier vibración actualmente en ejecución. 137.103 + 137.104 + navigator.vibrate(0) 137.105 + 137.106 + 137.107 +o 137.108 + 137.109 + navigator.vibrate([]) 137.110 + 137.111 + 137.112 +o 137.113 + 137.114 + navigator.vibrate([0]) 137.115 + 137.116 + 137.117 +Pasando en un parámetro de 0, una matriz vacía o una matriz con un elemento de valor 0 se cancelará cualquier vibraciones. 137.118 + 137.119 +## *Notification.Vibrate (obsoleto) 137.120 + 137.121 +Vibra el dispositivo para una cantidad dada de tiempo. 137.122 + 137.123 + navigator.notification.vibrate(time) 137.124 + 137.125 + 137.126 +* **tiempo**: milisegundos a vibrar el dispositivo. *(Número)* 137.127 + 137.128 +### Ejemplo 137.129 + 137.130 + // Vibrate for 2.5 seconds 137.131 + navigator.notification.vibrate(2500); 137.132 + 137.133 + 137.134 +### iOS rarezas 137.135 + 137.136 +* **time**: ignora el tiempo especificado y vibra por un tiempo preestablecido. 137.137 + 137.138 + navigator.notification.vibrate(); 137.139 + navigator.notification.vibrate(2500); // 2500 is ignored 137.140 + 137.141 + 137.142 +## *Notification.vibrateWithPattern (obsoleto) 137.143 + 137.144 +Vibra el dispositivo con un patrón determinado. 137.145 + 137.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 137.147 + 137.148 + 137.149 +* **patrón**: secuencia de duraciones (en milisegundos) que desea activar o desactivar el vibrador. *(Matriz de números)* 137.150 +* **repito**: índice opcional en la matriz de patrón en el cual comenzar repitiendo (se repite hasta que se cancele), o -1 para la no repetición (por defecto). *(Número)* 137.151 + 137.152 +### Ejemplo 137.153 + 137.154 + // Immediately start vibrating 137.155 + // vibrate for 100ms, 137.156 + // wait for 100ms, 137.157 + // vibrate for 200ms, 137.158 + // wait for 100ms, 137.159 + // vibrate for 400ms, 137.160 + // wait for 100ms, 137.161 + // vibrate for 800ms, 137.162 + // (do not repeat) 137.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 137.164 + 137.165 + 137.166 +## *Notification.cancelVibration (obsoleto) 137.167 + 137.168 +Inmediatamente se cancela cualquier vibración actualmente en ejecución. 137.169 + 137.170 + navigator.notification.cancelVibration() 137.171 + 137.172 + 137.173 +* Nota: debido a la alineación con la especificación del w3c, los métodos favoritos a ser eliminados 137.174 \ No newline at end of file
138.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 138.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/fr/index.md Thu Jun 04 14:50:33 2015 +0200 138.3 @@ -0,0 +1,170 @@ 138.4 +<!--- 138.5 + Licensed to the Apache Software Foundation (ASF) under one 138.6 + or more contributor license agreements. See the NOTICE file 138.7 + distributed with this work for additional information 138.8 + regarding copyright ownership. The ASF licenses this file 138.9 + to you under the Apache License, Version 2.0 (the 138.10 + "License"); you may not use this file except in compliance 138.11 + with the License. You may obtain a copy of the License at 138.12 + 138.13 + http://www.apache.org/licenses/LICENSE-2.0 138.14 + 138.15 + Unless required by applicable law or agreed to in writing, 138.16 + software distributed under the License is distributed on an 138.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 138.18 + KIND, either express or implied. See the License for the 138.19 + specific language governing permissions and limitations 138.20 + under the License. 138.21 +--> 138.22 + 138.23 +# org.apache.cordova.vibration 138.24 + 138.25 +Ce plugin s'aligne avec le W3C vibration spécification http://www.w3.org/TR/vibration/ 138.26 + 138.27 +Ce plugin permet de vibrer l'appareil. 138.28 + 138.29 +## Installation 138.30 + 138.31 + cordova plugin add org.apache.cordova.vibration 138.32 + 138.33 + 138.34 +## Plates-formes prises en charge 138.35 + 138.36 +Navigator.VIBRATE 138.37 +Navigator.notification.VIBRATE - Amazon Fire OS - Android - BlackBerry 10 - Firefox OS - iOS - Windows Phone 7 et 8 138.38 + 138.39 +navigator.notification.vibrateWithPattern, 138.40 +navigator.notification.cancelVibration - Android 138.41 + 138.42 +## vibrer (recommandée) 138.43 + 138.44 +Cette fonction a trois différentes fonctionnalités basées sur les paramètres passés à elle. 138.45 + 138.46 +### Norme vibrer 138.47 + 138.48 +Vibre l'appareil pendant un certain temps. 138.49 + 138.50 + navigator.vibrate(time) 138.51 + 138.52 + 138.53 +ou 138.54 + 138.55 + navigator.vibrate([time]) 138.56 + 138.57 + 138.58 +-**temps**: millisecondes à vibrer l'appareil. *(Nombre)* 138.59 + 138.60 +#### Exemple 138.61 + 138.62 + // Vibrate for 3 seconds 138.63 + navigator.vibrate(3000); 138.64 + 138.65 + // Vibrate for 3 seconds 138.66 + navigator.vibrate([3000]); 138.67 + 138.68 + 138.69 +#### iOS Quirks 138.70 + 138.71 +* **temps**: ne tient pas compte de la durée spécifiée et vibre pendant un temps prédéterminé. 138.72 + 138.73 + navigator.vibrate(3000); // 3000 is ignored 138.74 + 138.75 +#### Windows et les bizarreries de Blackberry 138.76 + 138.77 +* **temps**: temps Max est 5000ms (5 s) et heure min est de 1 ms 138.78 + 138.79 + navigator.vibrate(8000); // will be truncated to 5000 138.80 + 138.81 +### Vibrer avec un motif (Android et Windows uniquement) 138.82 + 138.83 +Vibre l'appareil avec un motif donné 138.84 + 138.85 + navigator.vibrate(pattern); 138.86 + 138.87 + 138.88 +* **modèle**: séquence de la durée (en millisecondes) pour lequel activer ou désactiver le vibreur. *(Tableau de nombres)* 138.89 + 138.90 +#### Exemple 138.91 + 138.92 + // Vibrate for 1 second 138.93 + // Wait for 1 second 138.94 + // Vibrate for 3 seconds 138.95 + // Wait for 1 second 138.96 + // Vibrate for 5 seconds 138.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 138.98 + 138.99 + 138.100 +### Annuler les vibrations (ne pas de prise en charge d'iOS) 138.101 + 138.102 +Immédiatement annule des vibrations en cours d'exécution. 138.103 + 138.104 + navigator.vibrate(0) 138.105 + 138.106 + 138.107 +ou 138.108 + 138.109 + navigator.vibrate([]) 138.110 + 138.111 + 138.112 +ou 138.113 + 138.114 + navigator.vibrate([0]) 138.115 + 138.116 + 138.117 +En passant un paramètre de 0, un tableau vide, ou un tableau contenant un seul élément de valeur 0 annulera toute vibration. 138.118 + 138.119 +## *notification.VIBRATE (obsolète) 138.120 + 138.121 +Vibre l'appareil pendant un certain temps. 138.122 + 138.123 + navigator.notification.vibrate(time) 138.124 + 138.125 + 138.126 +* **temps**: millisecondes à vibrer l'appareil. *(Nombre)* 138.127 + 138.128 +### Exemple 138.129 + 138.130 + // Vibrate for 2.5 seconds 138.131 + navigator.notification.vibrate(2500); 138.132 + 138.133 + 138.134 +### iOS Quirks 138.135 + 138.136 +* **temps**: ne tient pas compte de la durée spécifiée et vibre pendant un temps prédéterminé. 138.137 + 138.138 + navigator.notification.vibrate(); 138.139 + navigator.notification.vibrate(2500); // 2500 is ignored 138.140 + 138.141 + 138.142 +## *notification.vibrateWithPattern (obsolète) 138.143 + 138.144 +Vibre l'appareil avec un modèle donné. 138.145 + 138.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 138.147 + 138.148 + 138.149 +* **modèle**: séquence de la durée (en millisecondes) pour lequel activer ou désactiver le vibreur. *(Tableau de nombres)* 138.150 +* **répéter**: optionnel index dans le tableau de configuration à laquelle commencer à répéter (répétera jusqu'à annulation), ou -1 pour aucune répétition (par défaut). *(Nombre)* 138.151 + 138.152 +### Exemple 138.153 + 138.154 + // Immediately start vibrating 138.155 + // vibrate for 100ms, 138.156 + // wait for 100ms, 138.157 + // vibrate for 200ms, 138.158 + // wait for 100ms, 138.159 + // vibrate for 400ms, 138.160 + // wait for 100ms, 138.161 + // vibrate for 800ms, 138.162 + // (do not repeat) 138.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 138.164 + 138.165 + 138.166 +## *notification.cancelVibration (obsolète) 138.167 + 138.168 +Immédiatement annule des vibrations en cours d'exécution. 138.169 + 138.170 + navigator.notification.cancelVibration() 138.171 + 138.172 + 138.173 +* Remarque : en raison de l'alignement avec les spécifications w3c, les méthodes étoilées seront progressivement 138.174 \ No newline at end of file
139.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 139.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/index.md Thu Jun 04 14:50:33 2015 +0200 139.3 @@ -0,0 +1,175 @@ 139.4 +<!--- 139.5 + Licensed to the Apache Software Foundation (ASF) under one 139.6 + or more contributor license agreements. See the NOTICE file 139.7 + distributed with this work for additional information 139.8 + regarding copyright ownership. The ASF licenses this file 139.9 + to you under the Apache License, Version 2.0 (the 139.10 + "License"); you may not use this file except in compliance 139.11 + with the License. You may obtain a copy of the License at 139.12 + 139.13 + http://www.apache.org/licenses/LICENSE-2.0 139.14 + 139.15 + Unless required by applicable law or agreed to in writing, 139.16 + software distributed under the License is distributed on an 139.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 139.18 + KIND, either express or implied. See the License for the 139.19 + specific language governing permissions and limitations 139.20 + under the License. 139.21 +--> 139.22 + 139.23 +# org.apache.cordova.vibration 139.24 + 139.25 +This plugin aligns with the W3C vibration specification http://www.w3.org/TR/vibration/ 139.26 + 139.27 +This plugin provides a way to vibrate the device. 139.28 + 139.29 +This plugin defines global objects including `navigator.vibrate`. 139.30 + 139.31 +Although in the global scope, they are not available until after the `deviceready` event. 139.32 + 139.33 + document.addEventListener("deviceready", onDeviceReady, false); 139.34 + function onDeviceReady() { 139.35 + console.log(navigator.vibrate); 139.36 + } 139.37 + 139.38 +## Installation 139.39 + 139.40 + cordova plugin add org.apache.cordova.vibration 139.41 + 139.42 +## Supported Platforms 139.43 + 139.44 +navigator.vibrate,<br /> 139.45 +navigator.notification.vibrate 139.46 +- Amazon Fire OS 139.47 +- Android 139.48 +- BlackBerry 10 139.49 +- Firefox OS 139.50 +- iOS 139.51 +- Windows Phone 7 and 8 139.52 + 139.53 +navigator.notification.vibrateWithPattern,<br />navigator.notification.cancelVibration 139.54 +- Android 139.55 +- Windows Phone 8 139.56 + 139.57 +## vibrate (recommended) 139.58 + 139.59 +This function has three different functionalities based on parameters passed to it. 139.60 + 139.61 +###Standard vibrate 139.62 + 139.63 +Vibrates the device for a given amount of time. 139.64 + 139.65 + navigator.vibrate(time) 139.66 + 139.67 +or 139.68 + 139.69 + navigator.vibrate([time]) 139.70 + 139.71 + 139.72 +-__time__: Milliseconds to vibrate the device. _(Number)_ 139.73 + 139.74 +####Example 139.75 + 139.76 + // Vibrate for 3 seconds 139.77 + navigator.vibrate(3000); 139.78 + 139.79 + // Vibrate for 3 seconds 139.80 + navigator.vibrate([3000]); 139.81 + 139.82 +####iOS Quirks 139.83 + 139.84 +- __time__: Ignores the specified time and vibrates for a pre-set amount of time. 139.85 + 139.86 + navigator.vibrate(3000); // 3000 is ignored 139.87 + 139.88 +####Windows and Blackberry Quirks 139.89 + 139.90 +- __time__: Max time is 5000ms (5s) and min time is 1ms 139.91 + 139.92 + navigator.vibrate(8000); // will be truncated to 5000 139.93 + 139.94 +###Vibrate with a pattern (Android and Windows only) 139.95 +Vibrates the device with a given pattern 139.96 + 139.97 + navigator.vibrate(pattern); 139.98 + 139.99 +- __pattern__: Sequence of durations (in milliseconds) for which to turn on or off the vibrator. _(Array of Numbers)_ 139.100 + 139.101 +####Example 139.102 + 139.103 + // Vibrate for 1 second 139.104 + // Wait for 1 second 139.105 + // Vibrate for 3 seconds 139.106 + // Wait for 1 second 139.107 + // Vibrate for 5 seconds 139.108 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 139.109 + 139.110 +####Windows Phone 8 Quirks 139.111 + 139.112 +- vibrate(pattern) falls back on vibrate with default duration 139.113 + 139.114 +###Cancel vibration (not supported in iOS) 139.115 + 139.116 +Immediately cancels any currently running vibration. 139.117 + 139.118 + navigator.vibrate(0) 139.119 + 139.120 +or 139.121 + 139.122 + navigator.vibrate([]) 139.123 + 139.124 +or 139.125 + 139.126 + navigator.vibrate([0]) 139.127 + 139.128 +Passing in a parameter of 0, an empty array, or an array with one element of value 0 will cancel any vibrations. 139.129 + 139.130 +## *notification.vibrate (deprecated) 139.131 + 139.132 +Vibrates the device for a given amount of time. 139.133 + 139.134 + navigator.notification.vibrate(time) 139.135 + 139.136 +- __time__: Milliseconds to vibrate the device. _(Number)_ 139.137 + 139.138 +### Example 139.139 + 139.140 + // Vibrate for 2.5 seconds 139.141 + navigator.notification.vibrate(2500); 139.142 + 139.143 +### iOS Quirks 139.144 + 139.145 +- __time__: Ignores the specified time and vibrates for a pre-set amount of time. 139.146 + 139.147 + navigator.notification.vibrate(); 139.148 + navigator.notification.vibrate(2500); // 2500 is ignored 139.149 + 139.150 +## *notification.vibrateWithPattern (deprecated) 139.151 + 139.152 +Vibrates the device with a given pattern. 139.153 + 139.154 + navigator.notification.vibrateWithPattern(pattern, repeat) 139.155 + 139.156 +- __pattern__: Sequence of durations (in milliseconds) for which to turn on or off the vibrator. _(Array of Numbers)_ 139.157 +- __repeat__: Optional index into the pattern array at which to start repeating (will repeat until canceled), or -1 for no repetition (default). _(Number)_ 139.158 + 139.159 +### Example 139.160 + 139.161 + // Immediately start vibrating 139.162 + // vibrate for 100ms, 139.163 + // wait for 100ms, 139.164 + // vibrate for 200ms, 139.165 + // wait for 100ms, 139.166 + // vibrate for 400ms, 139.167 + // wait for 100ms, 139.168 + // vibrate for 800ms, 139.169 + // (do not repeat) 139.170 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 139.171 + 139.172 +## *notification.cancelVibration (deprecated) 139.173 + 139.174 +Immediately cancels any currently running vibration. 139.175 + 139.176 + navigator.notification.cancelVibration() 139.177 + 139.178 +*Note - due to alignment with w3c spec, the starred methods will be phased out
140.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 140.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/it/index.md Thu Jun 04 14:50:33 2015 +0200 140.3 @@ -0,0 +1,170 @@ 140.4 +<!--- 140.5 + Licensed to the Apache Software Foundation (ASF) under one 140.6 + or more contributor license agreements. See the NOTICE file 140.7 + distributed with this work for additional information 140.8 + regarding copyright ownership. The ASF licenses this file 140.9 + to you under the Apache License, Version 2.0 (the 140.10 + "License"); you may not use this file except in compliance 140.11 + with the License. You may obtain a copy of the License at 140.12 + 140.13 + http://www.apache.org/licenses/LICENSE-2.0 140.14 + 140.15 + Unless required by applicable law or agreed to in writing, 140.16 + software distributed under the License is distributed on an 140.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 140.18 + KIND, either express or implied. See the License for the 140.19 + specific language governing permissions and limitations 140.20 + under the License. 140.21 +--> 140.22 + 140.23 +# org.apache.cordova.vibration 140.24 + 140.25 +Questo plugin si allinea con il W3C vibrazione specifica http://www.w3.org/TR/vibration/ 140.26 + 140.27 +Questo plugin consente di vibrare il dispositivo. 140.28 + 140.29 +## Installazione 140.30 + 140.31 + cordova plugin add org.apache.cordova.vibration 140.32 + 140.33 + 140.34 +## Piattaforme supportate 140.35 + 140.36 +Navigator.vibrate 140.37 +Navigator.Notification.vibrate - Amazon fuoco OS - OS di Firefox - 10 BlackBerry - Android - iOS - Windows Phone 7 e 8 140.38 + 140.39 +navigator.notification.vibrateWithPattern, 140.40 +navigator.notification.cancelVibration - Android 140.41 + 140.42 +## vibrare (consigliato) 140.43 + 140.44 +Questa funzione ha tre differenti funzionalità basate su parametri passati ad esso. 140.45 + 140.46 +### Standard vibrare 140.47 + 140.48 +Vibra il dispositivo per un determinato periodo di tempo. 140.49 + 140.50 + navigator.vibrate(time) 140.51 + 140.52 + 140.53 +o 140.54 + 140.55 + navigator.vibrate([time]) 140.56 + 140.57 + 140.58 +-**tempo**: millisecondi a vibrare il dispositivo. *(Numero)* 140.59 + 140.60 +#### Esempio 140.61 + 140.62 + // Vibrate for 3 seconds 140.63 + navigator.vibrate(3000); 140.64 + 140.65 + // Vibrate for 3 seconds 140.66 + navigator.vibrate([3000]); 140.67 + 140.68 + 140.69 +#### iOS stranezze 140.70 + 140.71 +* **tempo**: ignora il tempo specificato e vibra per un tempo pre-impostato. 140.72 + 140.73 + navigator.vibrate(3000); // 3000 is ignored 140.74 + 140.75 +#### Windows e stranezze di Blackberry 140.76 + 140.77 +* **tempo**: tempo Max 5000ms (5s) edè min tempo di 1ms 140.78 + 140.79 + navigator.vibrate(8000); // will be truncated to 5000 140.80 + 140.81 +### Vibrare con un pattern (Android e solo per Windows) 140.82 + 140.83 +Vibra il dispositivo con un determinato modello 140.84 + 140.85 + navigator.vibrate(pattern); 140.86 + 140.87 + 140.88 +* **modello**: sequenza di durate (in millisecondi) per il quale attivare o disattivare il vibratore. *(Matrice di numeri)* 140.89 + 140.90 +#### Esempio 140.91 + 140.92 + // Vibrate for 1 second 140.93 + // Wait for 1 second 140.94 + // Vibrate for 3 seconds 140.95 + // Wait for 1 second 140.96 + // Vibrate for 5 seconds 140.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 140.98 + 140.99 + 140.100 +### Annullare le vibrazioni (non supportata in iOS) 140.101 + 140.102 +Annulla immediatamente qualsiasi vibrazione attualmente in esecuzione. 140.103 + 140.104 + navigator.vibrate(0) 140.105 + 140.106 + 140.107 +o 140.108 + 140.109 + navigator.vibrate([]) 140.110 + 140.111 + 140.112 +o 140.113 + 140.114 + navigator.vibrate([0]) 140.115 + 140.116 + 140.117 +Passa un parametro 0, matrice vuota o una matrice con un elemento di valore 0 annullerà eventuali vibrazioni. 140.118 + 140.119 +## *Notification.vibrate (obsoleto) 140.120 + 140.121 +Vibra il dispositivo per un determinato periodo di tempo. 140.122 + 140.123 + navigator.notification.vibrate(time) 140.124 + 140.125 + 140.126 +* **tempo**: millisecondi a vibrare il dispositivo. *(Numero)* 140.127 + 140.128 +### Esempio 140.129 + 140.130 + // Vibrate for 2.5 seconds 140.131 + navigator.notification.vibrate(2500); 140.132 + 140.133 + 140.134 +### iOS stranezze 140.135 + 140.136 +* **tempo**: ignora il tempo specificato e vibra per un tempo pre-impostato. 140.137 + 140.138 + navigator.notification.vibrate(); 140.139 + navigator.notification.vibrate(2500); // 2500 is ignored 140.140 + 140.141 + 140.142 +## *Notification.vibrateWithPattern (obsoleto) 140.143 + 140.144 +Vibra il dispositivo con un determinato modello. 140.145 + 140.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 140.147 + 140.148 + 140.149 +* **modello**: sequenza di durate (in millisecondi) per il quale attivare o disattivare il vibratore. *(Matrice di numeri)* 140.150 +* **ripetere**: opzionale indice nell'array modello presso cui iniziare ripetendo (ripeterà finché non annullato), o -1 per nessuna ripetizione (impostazione predefinita). *(Numero)* 140.151 + 140.152 +### Esempio 140.153 + 140.154 + // Immediately start vibrating 140.155 + // vibrate for 100ms, 140.156 + // wait for 100ms, 140.157 + // vibrate for 200ms, 140.158 + // wait for 100ms, 140.159 + // vibrate for 400ms, 140.160 + // wait for 100ms, 140.161 + // vibrate for 800ms, 140.162 + // (do not repeat) 140.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 140.164 + 140.165 + 140.166 +## *Notification.cancelVibration (obsoleto) 140.167 + 140.168 +Annulla immediatamente qualsiasi vibrazione attualmente in esecuzione. 140.169 + 140.170 + navigator.notification.cancelVibration() 140.171 + 140.172 + 140.173 +* Nota - a causa di allineamento con le specifiche w3c, saranno essere ritirati i metodi speciali 140.174 \ No newline at end of file
141.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 141.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/ja/index.md Thu Jun 04 14:50:33 2015 +0200 141.3 @@ -0,0 +1,170 @@ 141.4 +<!--- 141.5 + Licensed to the Apache Software Foundation (ASF) under one 141.6 + or more contributor license agreements. See the NOTICE file 141.7 + distributed with this work for additional information 141.8 + regarding copyright ownership. The ASF licenses this file 141.9 + to you under the Apache License, Version 2.0 (the 141.10 + "License"); you may not use this file except in compliance 141.11 + with the License. You may obtain a copy of the License at 141.12 + 141.13 + http://www.apache.org/licenses/LICENSE-2.0 141.14 + 141.15 + Unless required by applicable law or agreed to in writing, 141.16 + software distributed under the License is distributed on an 141.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 141.18 + KIND, either express or implied. See the License for the 141.19 + specific language governing permissions and limitations 141.20 + under the License. 141.21 +--> 141.22 + 141.23 +# org.apache.cordova.vibration 141.24 + 141.25 +このプラグインに準拠 W3C 振動仕様 http://www.w3.org/TR/vibration/ 141.26 + 141.27 +このプラグインは、デバイスを振動させる方法を提供します。 141.28 + 141.29 +## インストール 141.30 + 141.31 + cordova plugin add org.apache.cordova.vibration 141.32 + 141.33 + 141.34 +## サポートされているプラットフォーム 141.35 + 141.36 +navigator.vibrate 141.37 +navigator.notification.vibrate - アマゾン火 OS - アンドロイド - ブラックベリー 10 - Firefox OS - iOS - Windows Phone 7 と 8 141.38 + 141.39 +navigator.notification.vibrateWithPattern、 141.40 +navigator.notification.cancelVibration - アンドロイド 141.41 + 141.42 +## 振動 (推奨) 141.43 + 141.44 +この関数は、渡されたパラメーターに基づいて 3 つのさまざまな機能。 141.45 + 141.46 +### 標準を振動します。 141.47 + 141.48 +一定の時間のため、デバイスが振動します。 141.49 + 141.50 + navigator.vibrate(time) 141.51 + 141.52 + 141.53 +または 141.54 + 141.55 + navigator.vibrate([time]) 141.56 + 141.57 + 141.58 +-**時刻**: ミリ秒、デバイスを振動させる。*(数)* 141.59 + 141.60 +#### 例 141.61 + 141.62 + // Vibrate for 3 seconds 141.63 + navigator.vibrate(3000); 141.64 + 141.65 + // Vibrate for 3 seconds 141.66 + navigator.vibrate([3000]); 141.67 + 141.68 + 141.69 +#### iOS の癖 141.70 + 141.71 +* **時間**: 指定された時間を無視し、時間の事前に設定された量のために振動します。 141.72 + 141.73 + navigator.vibrate(3000); // 3000 is ignored 141.74 + 141.75 +#### Windows とブラックベリー癖 141.76 + 141.77 +* **時間**: 5000 (5 秒) は、最大時間と最小時間は 1 ms 141.78 + 141.79 + navigator.vibrate(8000); // will be truncated to 5000 141.80 + 141.81 +### (人造人間と Windows のみ) パターンで振動します。 141.82 + 141.83 +特定のパターンを持つデバイスが振動します。 141.84 + 141.85 + navigator.vibrate(pattern); 141.86 + 141.87 + 141.88 +* **パターン**: シーケンスの継続時間 (ミリ秒単位) をオンまたはオフ、バイブします。*(数字の配列)* 141.89 + 141.90 +#### 例 141.91 + 141.92 + // Vibrate for 1 second 141.93 + // Wait for 1 second 141.94 + // Vibrate for 3 seconds 141.95 + // Wait for 1 second 141.96 + // Vibrate for 5 seconds 141.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 141.98 + 141.99 + 141.100 +### [キャンセル] 振動 (iOS ではサポートされていません) 141.101 + 141.102 +すぐに、現在実行中の振動をキャンセルします。 141.103 + 141.104 + navigator.vibrate(0) 141.105 + 141.106 + 141.107 +または 141.108 + 141.109 + navigator.vibrate([]) 141.110 + 141.111 + 141.112 +または 141.113 + 141.114 + navigator.vibrate([0]) 141.115 + 141.116 + 141.117 +0 のパラメーターを渡して、空の配列、または 0 の値の 1 つの要素を持つ配列は任意振動がキャンセルされます。 141.118 + 141.119 +## *notification.vibrate (非推奨) 141.120 + 141.121 +一定の時間のため、デバイスが振動します。 141.122 + 141.123 + navigator.notification.vibrate(time) 141.124 + 141.125 + 141.126 +* **時刻**: ミリ秒、デバイスを振動させる。*(数)* 141.127 + 141.128 +### 例 141.129 + 141.130 + // Vibrate for 2.5 seconds 141.131 + navigator.notification.vibrate(2500); 141.132 + 141.133 + 141.134 +### iOS の癖 141.135 + 141.136 +* **時間**: 指定された時間を無視し、時間の事前に設定された量のために振動します。 141.137 + 141.138 + navigator.notification.vibrate(); 141.139 + navigator.notification.vibrate(2500); // 2500 is ignored 141.140 + 141.141 + 141.142 +## *notification.vibrateWithPattern (非推奨) 141.143 + 141.144 +特定のパターンを持つデバイスが振動します。 141.145 + 141.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 141.147 + 141.148 + 141.149 +* **パターン**: シーケンスの継続時間 (ミリ秒単位) をオンまたはオフ、バイブします。*(数字の配列)* 141.150 +* **繰り返します**: 省略可能な配列のインデックスのパターン (でしょう) を繰り返す取り消されるまで、繰り返しを開始するまたは反復なし (既定値) の場合は-1。*(数)* 141.151 + 141.152 +### 例 141.153 + 141.154 + // Immediately start vibrating 141.155 + // vibrate for 100ms, 141.156 + // wait for 100ms, 141.157 + // vibrate for 200ms, 141.158 + // wait for 100ms, 141.159 + // vibrate for 400ms, 141.160 + // wait for 100ms, 141.161 + // vibrate for 800ms, 141.162 + // (do not repeat) 141.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 141.164 + 141.165 + 141.166 +## *notification.cancelVibration (非推奨) 141.167 + 141.168 +すぐに、現在実行中の振動をキャンセルします。 141.169 + 141.170 + navigator.notification.cancelVibration() 141.171 + 141.172 + 141.173 +* 注 - w3c の仕様を配置、ため主演メソッドがフェーズ アウトされます。 141.174 \ No newline at end of file
142.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 142.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/ko/index.md Thu Jun 04 14:50:33 2015 +0200 142.3 @@ -0,0 +1,170 @@ 142.4 +<!--- 142.5 + Licensed to the Apache Software Foundation (ASF) under one 142.6 + or more contributor license agreements. See the NOTICE file 142.7 + distributed with this work for additional information 142.8 + regarding copyright ownership. The ASF licenses this file 142.9 + to you under the Apache License, Version 2.0 (the 142.10 + "License"); you may not use this file except in compliance 142.11 + with the License. You may obtain a copy of the License at 142.12 + 142.13 + http://www.apache.org/licenses/LICENSE-2.0 142.14 + 142.15 + Unless required by applicable law or agreed to in writing, 142.16 + software distributed under the License is distributed on an 142.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 142.18 + KIND, either express or implied. See the License for the 142.19 + specific language governing permissions and limitations 142.20 + under the License. 142.21 +--> 142.22 + 142.23 +# org.apache.cordova.vibration 142.24 + 142.25 +이 플러그인에 W3C 진동 사양 http://www.w3.org/TR/vibration/ 정렬 142.26 + 142.27 +이 플러그인에는 장치를 진동 하는 방법을 제공 합니다. 142.28 + 142.29 +## 설치 142.30 + 142.31 + cordova plugin add org.apache.cordova.vibration 142.32 + 142.33 + 142.34 +## 지원 되는 플랫폼 142.35 + 142.36 +navigator.vibrate 142.37 +navigator.notification.vibrate-아마존 화재 OS-안 드 로이드-블랙베리 10-파이어 폭스 OS-iOS-Windows Phone 7과 8 142.38 + 142.39 +navigator.notification.vibrateWithPattern, 142.40 +navigator.notification.cancelVibration-안 드 로이드 142.41 + 142.42 +## 진동 (권장) 142.43 + 142.44 +이 함수는 전달 된 매개 변수에 따라 세 가지 다른 기능. 142.45 + 142.46 +### 기준 진동 142.47 + 142.48 +주어진 시간 동안 장치를 진동. 142.49 + 142.50 + navigator.vibrate(time) 142.51 + 142.52 + 142.53 +또는 142.54 + 142.55 + navigator.vibrate([time]) 142.56 + 142.57 + 142.58 +-**시간**: 진동 장치 (밀리초)입니다. *(수)* 142.59 + 142.60 +#### 예를 들어 142.61 + 142.62 + // Vibrate for 3 seconds 142.63 + navigator.vibrate(3000); 142.64 + 142.65 + // Vibrate for 3 seconds 142.66 + navigator.vibrate([3000]); 142.67 + 142.68 + 142.69 +#### iOS 단점 142.70 + 142.71 +* **시간**: 지정 된 시간을 무시 하 고 미리 설정 된 시간 동안 진동. 142.72 + 142.73 + navigator.vibrate(3000); // 3000 is ignored 142.74 + 142.75 +#### 윈도 즈와 블랙베리 단점 142.76 + 142.77 +* **시간**: 최대 시간은 2000ms (5s) 이며 최소 시간 1ms 142.78 + 142.79 + navigator.vibrate(8000); // will be truncated to 5000 142.80 + 142.81 +### (안 드 로이드와 Windows에만 해당) 패턴으로 진동 142.82 + 142.83 +지정 된 패턴으로 장치를 진동 142.84 + 142.85 + navigator.vibrate(pattern); 142.86 + 142.87 + 142.88 +* **패턴**:의 기간 (밀리초)에서 진동을 켜거나 끌 수 있는 순서. *(숫자의 배열)* 142.89 + 142.90 +#### 예를 들어 142.91 + 142.92 + // Vibrate for 1 second 142.93 + // Wait for 1 second 142.94 + // Vibrate for 3 seconds 142.95 + // Wait for 1 second 142.96 + // Vibrate for 5 seconds 142.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 142.98 + 142.99 + 142.100 +### 진동 (iOS에서 지원 되지 않음) 취소 142.101 + 142.102 +즉시 모든 현재 실행 중인 진동을 취소합니다. 142.103 + 142.104 + navigator.vibrate(0) 142.105 + 142.106 + 142.107 +또는 142.108 + 142.109 + navigator.vibrate([]) 142.110 + 142.111 + 142.112 +또는 142.113 + 142.114 + navigator.vibrate([0]) 142.115 + 142.116 + 142.117 +0의 매개 변수 전달, 빈 배열, 또는 0 값의 한 요소 배열은 어떤 진동을 취소할 것 이다. 142.118 + 142.119 +## *notification.vibrate (사용 되지 않음) 142.120 + 142.121 +주어진 시간 동안 장치를 진동. 142.122 + 142.123 + navigator.notification.vibrate(time) 142.124 + 142.125 + 142.126 +* **시간**: 진동 장치 (밀리초)입니다. *(수)* 142.127 + 142.128 +### 예를 들어 142.129 + 142.130 + // Vibrate for 2.5 seconds 142.131 + navigator.notification.vibrate(2500); 142.132 + 142.133 + 142.134 +### iOS 단점 142.135 + 142.136 +* **시간**: 지정 된 시간을 무시 하 고 미리 설정 된 시간 동안 진동. 142.137 + 142.138 + navigator.notification.vibrate(); 142.139 + navigator.notification.vibrate(2500); // 2500 is ignored 142.140 + 142.141 + 142.142 +## *notification.vibrateWithPattern (사용 되지 않음) 142.143 + 142.144 +지정 된 패턴으로 장치 진동. 142.145 + 142.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 142.147 + 142.148 + 142.149 +* **패턴**:의 기간 (밀리초)에서 진동을 켜거나 끌 수 있는 순서. *(숫자의 배열)* 142.150 +* **반복**: 반복 (취소 될 때까지 반복 됩니다), 시작 하는 또는-1 (기본값) 없는 반복에 대 한 패턴 배열에 선택적 인덱스. *(수)* 142.151 + 142.152 +### 예를 들어 142.153 + 142.154 + // Immediately start vibrating 142.155 + // vibrate for 100ms, 142.156 + // wait for 100ms, 142.157 + // vibrate for 200ms, 142.158 + // wait for 100ms, 142.159 + // vibrate for 400ms, 142.160 + // wait for 100ms, 142.161 + // vibrate for 800ms, 142.162 + // (do not repeat) 142.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 142.164 + 142.165 + 142.166 +## *notification.cancelVibration (사용 되지 않음) 142.167 + 142.168 +즉시 모든 현재 실행 중인 진동을 취소합니다. 142.169 + 142.170 + navigator.notification.cancelVibration() 142.171 + 142.172 + 142.173 +* 참고-때문에 w3c 사양 가진 줄 맞춤, 별표 메서드 밖으로 단계별로 됩니다. 142.174 \ No newline at end of file
143.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 143.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/pl/index.md Thu Jun 04 14:50:33 2015 +0200 143.3 @@ -0,0 +1,170 @@ 143.4 +<!--- 143.5 + Licensed to the Apache Software Foundation (ASF) under one 143.6 + or more contributor license agreements. See the NOTICE file 143.7 + distributed with this work for additional information 143.8 + regarding copyright ownership. The ASF licenses this file 143.9 + to you under the Apache License, Version 2.0 (the 143.10 + "License"); you may not use this file except in compliance 143.11 + with the License. You may obtain a copy of the License at 143.12 + 143.13 + http://www.apache.org/licenses/LICENSE-2.0 143.14 + 143.15 + Unless required by applicable law or agreed to in writing, 143.16 + software distributed under the License is distributed on an 143.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 143.18 + KIND, either express or implied. See the License for the 143.19 + specific language governing permissions and limitations 143.20 + under the License. 143.21 +--> 143.22 + 143.23 +# org.apache.cordova.vibration 143.24 + 143.25 +Ten plugin wyrównuje z http://www.w3.org/TR/vibration/ specyfikacji W3C wibracji 143.26 + 143.27 +Ten plugin umożliwia wibracje urządzenia. 143.28 + 143.29 +## Instalacja 143.30 + 143.31 + cordova plugin add org.apache.cordova.vibration 143.32 + 143.33 + 143.34 +## Obsługiwane platformy 143.35 + 143.36 +Navigator.vibrate 143.37 +Navigator.Notification.vibrate - Amazon ogień OS - OS Android - BlackBerry 10 - Firefox - iOS - Windows Phone 7 i 8 143.38 + 143.39 +navigator.notification.vibrateWithPattern, 143.40 +navigator.notification.cancelVibration - Android 143.41 + 143.42 +## wibracje (zalecane) 143.43 + 143.44 +Funkcja ta ma trzy różne funkcje na podstawie parametrów przekazywanych do niej. 143.45 + 143.46 +### Standardowe wibracje 143.47 + 143.48 +Wibruje urządzenie na określoną ilość czasu. 143.49 + 143.50 + navigator.vibrate(time) 143.51 + 143.52 + 143.53 +lub 143.54 + 143.55 + navigator.vibrate([time]) 143.56 + 143.57 + 143.58 +-**czas**: milisekund wibracje urządzenia. *(Liczba)* 143.59 + 143.60 +#### Przykład 143.61 + 143.62 + // Vibrate for 3 seconds 143.63 + navigator.vibrate(3000); 143.64 + 143.65 + // Vibrate for 3 seconds 143.66 + navigator.vibrate([3000]); 143.67 + 143.68 + 143.69 +#### Dziwactwa iOS 143.70 + 143.71 +* **czas**: ignoruje określony czas i wibruje na wstępnie określoną ilość czasu. 143.72 + 143.73 + Navigator.vibrate(3000); 3000 jest ignorowany 143.74 + 143.75 +#### Windows i Blackberry dziwactwa 143.76 + 143.77 +* **czas**: Max czas jest 5000ms (5s) i min czas 1ms 143.78 + 143.79 + navigator.vibrate(8000); // will be truncated to 5000 143.80 + 143.81 +### Wibracje z wzorem (Android i Windows tylko) 143.82 + 143.83 +Wibruje urządzenie z danego wzoru 143.84 + 143.85 + navigator.vibrate(pattern); 143.86 + 143.87 + 143.88 +* **wzór**: sekwencja czas trwania (w milisekundach), dla której chcesz włączyć lub wyłączyć wibrator. *(Tablica liczb)* 143.89 + 143.90 +#### Przykład 143.91 + 143.92 + // Vibrate for 1 second 143.93 + // Wait for 1 second 143.94 + // Vibrate for 3 seconds 143.95 + // Wait for 1 second 143.96 + // Vibrate for 5 seconds 143.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 143.98 + 143.99 + 143.100 +### Anuluj wibracji (nieobsługiwane w iOS) 143.101 + 143.102 +Niezwłocznie anuluje aktualnie uruchomione wibracje. 143.103 + 143.104 + navigator.vibrate(0) 143.105 + 143.106 + 143.107 +lub 143.108 + 143.109 + navigator.vibrate([]) 143.110 + 143.111 + 143.112 +lub 143.113 + 143.114 + navigator.vibrate([0]) 143.115 + 143.116 + 143.117 +Przekazując parametr 0, pustą tablicę lub tablicy z jednym z elementów wartości 0 spowoduje anulowanie wibracji. 143.118 + 143.119 +## *Notification.vibrate (przestarzałe) 143.120 + 143.121 +Wibruje urządzenie na określoną ilość czasu. 143.122 + 143.123 + navigator.notification.vibrate(time) 143.124 + 143.125 + 143.126 +* **czas**: milisekund wibracje urządzenia. *(Liczba)* 143.127 + 143.128 +### Przykład 143.129 + 143.130 + // Vibrate for 2.5 seconds 143.131 + navigator.notification.vibrate(2500); 143.132 + 143.133 + 143.134 +### Dziwactwa iOS 143.135 + 143.136 +* **czas**: ignoruje określony czas i wibruje na wstępnie określoną ilość czasu. 143.137 + 143.138 + navigator.notification.vibrate(); 143.139 + navigator.notification.vibrate(2500); // 2500 is ignored 143.140 + 143.141 + 143.142 +## *Notification.vibrateWithPattern (przestarzałe) 143.143 + 143.144 +Wibruje urządzenie z danego wzoru. 143.145 + 143.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 143.147 + 143.148 + 143.149 +* **wzór**: sekwencja czas trwania (w milisekundach), dla której chcesz włączyć lub wyłączyć wibrator. *(Tablica liczb)* 143.150 +* **Powtórz**: opcjonalny indeks do tablicy wzór który zacząć powtarzać (będzie powtarzać do momentu anulowane), lub -1 nie powtarzania (domyślnie). *(Liczba)* 143.151 + 143.152 +### Przykład 143.153 + 143.154 + // Immediately start vibrating 143.155 + // vibrate for 100ms, 143.156 + // wait for 100ms, 143.157 + // vibrate for 200ms, 143.158 + // wait for 100ms, 143.159 + // vibrate for 400ms, 143.160 + // wait for 100ms, 143.161 + // vibrate for 800ms, 143.162 + // (do not repeat) 143.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 143.164 + 143.165 + 143.166 +## *Notification.cancelVibration (przestarzałe) 143.167 + 143.168 +Niezwłocznie anuluje aktualnie uruchomione wibracje. 143.169 + 143.170 + navigator.notification.cancelVibration() 143.171 + 143.172 + 143.173 +* Uwaga - ze względu na dostosowanie specyfikacji w3c, oznaczonych gwiazdką metody zostaną wycofane 143.174 \ No newline at end of file
144.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 144.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/ru/index.md Thu Jun 04 14:50:33 2015 +0200 144.3 @@ -0,0 +1,170 @@ 144.4 +<!--- 144.5 + Licensed to the Apache Software Foundation (ASF) under one 144.6 + or more contributor license agreements. See the NOTICE file 144.7 + distributed with this work for additional information 144.8 + regarding copyright ownership. The ASF licenses this file 144.9 + to you under the Apache License, Version 2.0 (the 144.10 + "License"); you may not use this file except in compliance 144.11 + with the License. You may obtain a copy of the License at 144.12 + 144.13 + http://www.apache.org/licenses/LICENSE-2.0 144.14 + 144.15 + Unless required by applicable law or agreed to in writing, 144.16 + software distributed under the License is distributed on an 144.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 144.18 + KIND, either express or implied. See the License for the 144.19 + specific language governing permissions and limitations 144.20 + under the License. 144.21 +--> 144.22 + 144.23 +# org.apache.cordova.vibration 144.24 + 144.25 +Этот плагин выравнивает с http://www.w3.org/TR/vibration/ спецификации W3C вибрации 144.26 + 144.27 +Этот плагин позволяет вибрировать устройство. 144.28 + 144.29 +## Установка 144.30 + 144.31 + cordova plugin add org.apache.cordova.vibration 144.32 + 144.33 + 144.34 +## Поддерживаемые платформы 144.35 + 144.36 +Navigator.Vibrate 144.37 +Navigator.Notification.Vibrate - Amazon Fire OS - Android - BlackBerry 10 - Firefox OS - iOS - Windows Phone 7 и 8 144.38 + 144.39 +navigator.notification.vibrateWithPattern, 144.40 +navigator.notification.cancelVibration - Android 144.41 + 144.42 +## вибрировать (рекомендуется) 144.43 + 144.44 +Эта функция имеет три различных функций, на основе параметров, передаваемых ему. 144.45 + 144.46 +### Стандарт вибрировать 144.47 + 144.48 +Устройство вибрирует за определенное количество времени. 144.49 + 144.50 + navigator.vibrate(time) 144.51 + 144.52 + 144.53 +или 144.54 + 144.55 + navigator.vibrate([time]) 144.56 + 144.57 + 144.58 +-**time**: Сколько миллисекунд будет вибрировать устройство. *(Число)* 144.59 + 144.60 +#### Пример 144.61 + 144.62 + // Vibrate for 3 seconds 144.63 + navigator.vibrate(3000); 144.64 + 144.65 + // Vibrate for 3 seconds 144.66 + navigator.vibrate([3000]); 144.67 + 144.68 + 144.69 +#### Особенности iOS 144.70 + 144.71 +* **time**: игнорирует указанное время и вибрирует предопределенный отрезок времени. 144.72 + 144.73 + navigator.vibrate(3000); // 3000 is ignored 144.74 + 144.75 +#### Окна и Blackberry причуды 144.76 + 144.77 +* **время**: время Макс 5000ms (5с) и минимальное время 1 мс 144.78 + 144.79 + navigator.vibrate(8000); // will be truncated to 5000 144.80 + 144.81 +### Вибрировать с узором (Android и Windows только) 144.82 + 144.83 +Вибрирует на устройства с заданным шаблоном 144.84 + 144.85 + navigator.vibrate(pattern); 144.86 + 144.87 + 144.88 +* **шаблон**: последовательность длительностей (в миллисекундах), для которого требуется включить или выключить вибростол. *(Массив из чисел)* 144.89 + 144.90 +#### Пример 144.91 + 144.92 + // Vibrate for 1 second 144.93 + // Wait for 1 second 144.94 + // Vibrate for 3 seconds 144.95 + // Wait for 1 second 144.96 + // Vibrate for 5 seconds 144.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 144.98 + 144.99 + 144.100 +### Отмена вибрации (не поддерживается в iOS) 144.101 + 144.102 +Немедленно отменяет любые выполняющиеся вибрации. 144.103 + 144.104 + navigator.vibrate(0) 144.105 + 144.106 + 144.107 +или 144.108 + 144.109 + navigator.vibrate([]) 144.110 + 144.111 + 144.112 +или 144.113 + 144.114 + navigator.vibrate([0]) 144.115 + 144.116 + 144.117 +Проходя в параметре 0, пустой массив, или массив с одним элементом значения 0 будет отменить любые вибрации. 144.118 + 144.119 +## *Notification.Vibrate (устарело) 144.120 + 144.121 +Устройство вибрирует за определенное количество времени. 144.122 + 144.123 + navigator.notification.vibrate(time) 144.124 + 144.125 + 144.126 +* **time**: Сколько миллисекунд будет вибрировать устройство. *(Число)* 144.127 + 144.128 +### Пример 144.129 + 144.130 + // Vibrate for 2.5 seconds 144.131 + navigator.notification.vibrate(2500); 144.132 + 144.133 + 144.134 +### Особенности iOS 144.135 + 144.136 +* **time**: игнорирует указанное время и вибрирует предопределенный отрезок времени. 144.137 + 144.138 + navigator.notification.vibrate(); 144.139 + navigator.notification.vibrate(2500); // 2500 is ignored 144.140 + 144.141 + 144.142 +## *Notification.vibrateWithPattern (устарело) 144.143 + 144.144 +Вибрирует на устройства с заданным шаблоном. 144.145 + 144.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 144.147 + 144.148 + 144.149 +* **шаблон**: последовательность длительностей (в миллисекундах), для которого требуется включить или выключить вибростол. *(Массив из чисел)* 144.150 +* **повторяю**: дополнительный индекс в массиве шаблон для начала повторять (будет повторять пока не отменен), или -1 для не повторения (по умолчанию). *(Число)* 144.151 + 144.152 +### Пример 144.153 + 144.154 + // Immediately start vibrating 144.155 + // vibrate for 100ms, 144.156 + // wait for 100ms, 144.157 + // vibrate for 200ms, 144.158 + // wait for 100ms, 144.159 + // vibrate for 400ms, 144.160 + // wait for 100ms, 144.161 + // vibrate for 800ms, 144.162 + // (do not repeat) 144.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 144.164 + 144.165 + 144.166 +## *Notification.cancelVibration (устарело) 144.167 + 144.168 +Немедленно отменяет любые выполняющиеся вибрации. 144.169 + 144.170 + navigator.notification.cancelVibration() 144.171 + 144.172 + 144.173 +* Обратите внимание - из-за соответствие спецификации w3c, Избранные методы будут поэтапно 144.174 \ No newline at end of file
145.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 145.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/doc/zh/index.md Thu Jun 04 14:50:33 2015 +0200 145.3 @@ -0,0 +1,170 @@ 145.4 +<!--- 145.5 + Licensed to the Apache Software Foundation (ASF) under one 145.6 + or more contributor license agreements. See the NOTICE file 145.7 + distributed with this work for additional information 145.8 + regarding copyright ownership. The ASF licenses this file 145.9 + to you under the Apache License, Version 2.0 (the 145.10 + "License"); you may not use this file except in compliance 145.11 + with the License. You may obtain a copy of the License at 145.12 + 145.13 + http://www.apache.org/licenses/LICENSE-2.0 145.14 + 145.15 + Unless required by applicable law or agreed to in writing, 145.16 + software distributed under the License is distributed on an 145.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 145.18 + KIND, either express or implied. See the License for the 145.19 + specific language governing permissions and limitations 145.20 + under the License. 145.21 +--> 145.22 + 145.23 +# org.apache.cordova.vibration 145.24 + 145.25 +這個外掛程式將對齊與 W3C 振動規範 HTTP://www.w3.org/TR/vibration/ 145.26 + 145.27 +這個外掛程式提供了方法振動設備。 145.28 + 145.29 +## 安裝 145.30 + 145.31 + cordova plugin add org.apache.cordova.vibration 145.32 + 145.33 + 145.34 +## 支援的平臺 145.35 + 145.36 +navigator.vibrate 145.37 +navigator.notification.vibrate-亞馬遜火 OS-Android-黑莓 10-火狐瀏覽器作業系統 — — iOS-Windows Phone 7 和 8 145.38 + 145.39 +navigator.notification.vibrateWithPattern, 145.40 +navigator.notification.cancelVibration-安卓系統 145.41 + 145.42 +## 震動 (推薦) 145.43 + 145.44 +此函數具有三個不同的功能,基於參數傳遞給它。 145.45 + 145.46 +### 標準振動 145.47 + 145.48 +為給定時間振動設備。 145.49 + 145.50 + navigator.vibrate(time) 145.51 + 145.52 + 145.53 +或 145.54 + 145.55 + navigator.vibrate([time]) 145.56 + 145.57 + 145.58 +-**時間**: 毫秒以振動裝置。*(人數)* 145.59 + 145.60 +#### 示例 145.61 + 145.62 + // Vibrate for 3 seconds 145.63 + navigator.vibrate(3000); 145.64 + 145.65 + // Vibrate for 3 seconds 145.66 + navigator.vibrate([3000]); 145.67 + 145.68 + 145.69 +#### iOS 的怪癖 145.70 + 145.71 +* **時間**: 忽略指定的時間和震動的一個預先設定的時間。 145.72 + 145.73 + navigator.vibrate(3000); // 3000 is ignored 145.74 + 145.75 +#### Windows 和黑莓的怪癖 145.76 + 145.77 +* **時間**: 最長時間是 5000ms (5s) 和最小時間為 1ms 145.78 + 145.79 + navigator.vibrate(8000); // will be truncated to 5000 145.80 + 145.81 +### 以一種模式 (安卓系統和僅限 Windows) 振動 145.82 + 145.83 +振動具有給定模式的設備 145.84 + 145.85 + navigator.vibrate(pattern); 145.86 + 145.87 + 145.88 +* **模式**: 序列的持續時間 (以毫秒為單位) 為其打開或關閉振動器。*(數位陣列)* 145.89 + 145.90 +#### 示例 145.91 + 145.92 + // Vibrate for 1 second 145.93 + // Wait for 1 second 145.94 + // Vibrate for 3 seconds 145.95 + // Wait for 1 second 145.96 + // Vibrate for 5 seconds 145.97 + navigator.vibrate([1000, 1000, 3000, 1000, 5000]); 145.98 + 145.99 + 145.100 +### 取消振動 (iOS 中不支援) 145.101 + 145.102 +立即取消任何當前正在運行的振動。 145.103 + 145.104 + navigator.vibrate(0) 145.105 + 145.106 + 145.107 +或 145.108 + 145.109 + navigator.vibrate([]) 145.110 + 145.111 + 145.112 +或 145.113 + 145.114 + navigator.vibrate([0]) 145.115 + 145.116 + 145.117 +在一個為 0 的參數中傳遞,空陣列或陣列的一個元素的值為 0 將取消任何振動。 145.118 + 145.119 +## *notification.vibrate (已棄用) 145.120 + 145.121 +為給定時間振動設備。 145.122 + 145.123 + navigator.notification.vibrate(time) 145.124 + 145.125 + 145.126 +* **時間**: 毫秒以振動裝置。*(人數)* 145.127 + 145.128 +### 示例 145.129 + 145.130 + // Vibrate for 2.5 seconds 145.131 + navigator.notification.vibrate(2500); 145.132 + 145.133 + 145.134 +### iOS 的怪癖 145.135 + 145.136 +* **時間**: 忽略指定的時間和震動的一個預先設定的時間。 145.137 + 145.138 + navigator.notification.vibrate(); 145.139 + navigator.notification.vibrate(2500); // 2500 is ignored 145.140 + 145.141 + 145.142 +## *notification.vibrateWithPattern (已棄用) 145.143 + 145.144 +振動具有給定模式的設備。 145.145 + 145.146 + navigator.notification.vibrateWithPattern(pattern, repeat) 145.147 + 145.148 + 145.149 +* **模式**: 序列的持續時間 (以毫秒為單位) 為其打開或關閉振動器。*(數位陣列)* 145.150 +* **重複**: 在其開始重複 (會重複,直到被取消),或-1 為不重複 (預設值) 模式陣列中的可選索引。*(人數)* 145.151 + 145.152 +### 示例 145.153 + 145.154 + // Immediately start vibrating 145.155 + // vibrate for 100ms, 145.156 + // wait for 100ms, 145.157 + // vibrate for 200ms, 145.158 + // wait for 100ms, 145.159 + // vibrate for 400ms, 145.160 + // wait for 100ms, 145.161 + // vibrate for 800ms, 145.162 + // (do not repeat) 145.163 + navigator.notification.vibrateWithPattern([0, 100, 100, 200, 100, 400, 100, 800]); 145.164 + 145.165 + 145.166 +## *notification.cancelVibration (已棄用) 145.167 + 145.168 +立即取消任何當前正在運行的振動。 145.169 + 145.170 + navigator.notification.cancelVibration() 145.171 + 145.172 + 145.173 +* 請注意--對齊方式與 w3c 規範,因出演的方法將被淘汰 145.174 \ No newline at end of file
146.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 146.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/plugin.xml Thu Jun 04 14:50:33 2015 +0200 146.3 @@ -0,0 +1,137 @@ 146.4 +<?xml version="1.0" encoding="UTF-8"?> 146.5 +<!-- 146.6 + Licensed to the Apache Software Foundation (ASF) under one 146.7 + or more contributor license agreements. See the NOTICE file 146.8 + distributed with this work for additional information 146.9 + regarding copyright ownership. The ASF licenses this file 146.10 + to you under the Apache License, Version 2.0 (the 146.11 + "License"); you may not use this file except in compliance 146.12 + with the License. You may obtain a copy of the License at 146.13 + 146.14 + http://www.apache.org/licenses/LICENSE-2.0 146.15 + 146.16 + Unless required by applicable law or agreed to in writing, 146.17 + software distributed under the License is distributed on an 146.18 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 146.19 + KIND, either express or implied. See the License for the 146.20 + specific language governing permissions and limitations 146.21 + under the License. 146.22 +--> 146.23 + 146.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 146.25 + xmlns:android="http://schemas.android.com/apk/res/android" 146.26 + id="org.apache.cordova.vibration" 146.27 + version="0.3.12"> 146.28 + 146.29 + <name>Vibration</name> 146.30 + <description>Cordova Vibration Plugin</description> 146.31 + <license>Apache 2.0</license> 146.32 + <keywords>cordova,vibration</keywords> 146.33 + <repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git</repo> 146.34 + <issue>https://issues.apache.org/jira/browse/CB/component/12320639</issue> 146.35 + 146.36 + <js-module src="www/vibration.js" name="notification"> 146.37 + <merges target="navigator.notification" /> 146.38 + <merges target="navigator" /> 146.39 + </js-module> 146.40 + 146.41 + <!-- firefoxos --> 146.42 + <platform name="firefoxos"> 146.43 + <config-file target="www/config.xml" parent="/*"> 146.44 + <feature name="Vibration"> 146.45 + <param name="firefoxos-package" value="Vibration" /> 146.46 + </feature> 146.47 + </config-file> 146.48 + <js-module src="src/firefoxos/VibrationProxy.js" name="VibrationProxy"> 146.49 + <runs /> 146.50 + </js-module> 146.51 + </platform> 146.52 + 146.53 + <!-- wp7 --> 146.54 + <platform name="wp7"> 146.55 + <config-file target="config.xml" parent="/*"> 146.56 + <feature name="Vibration"> 146.57 + <param name="wp-package" value="Vibration"/> 146.58 + </feature> 146.59 + </config-file> 146.60 + 146.61 + <source-file src="src/wp/Vibration.cs" /> 146.62 + </platform> 146.63 + 146.64 + <!-- wp8 --> 146.65 + <platform name="wp8"> 146.66 + <config-file target="config.xml" parent="/*"> 146.67 + <feature name="Vibration"> 146.68 + <param name="wp-package" value="Vibration"/> 146.69 + </feature> 146.70 + </config-file> 146.71 + 146.72 + <source-file src="src/wp/Vibration.cs" /> 146.73 + </platform> 146.74 + 146.75 + <!-- android --> 146.76 + <platform name="android"> 146.77 + <config-file target="res/xml/config.xml" parent="/*"> 146.78 + <feature name="Vibration"> 146.79 + <param name="android-package" value="org.apache.cordova.vibration.Vibration"/> 146.80 + </feature> 146.81 + </config-file> 146.82 + 146.83 + <source-file src="src/android/Vibration.java" target-dir="src/org/apache/cordova/vibration" /> 146.84 + 146.85 + <config-file target="AndroidManifest.xml" parent="/manifest"> 146.86 + <uses-permission android:name="android.permission.VIBRATE"/> 146.87 + </config-file> 146.88 + </platform> 146.89 + 146.90 + <!-- amazon-fireos --> 146.91 + <platform name="amazon-fireos"> 146.92 + <config-file target="res/xml/config.xml" parent="/*"> 146.93 + <feature name="Vibration"> 146.94 + <param name="android-package" value="org.apache.cordova.vibration.Vibration"/> 146.95 + </feature> 146.96 + </config-file> 146.97 + 146.98 + <source-file src="src/android/Vibration.java" target-dir="src/org/apache/cordova/vibration" /> 146.99 + 146.100 + <config-file target="AndroidManifest.xml" parent="/manifest"> 146.101 + <uses-permission android:name="android.permission.VIBRATE"/> 146.102 + </config-file> 146.103 + </platform> 146.104 + 146.105 + <!-- ubuntu --> 146.106 + <platform name="ubuntu"> 146.107 + <header-file src="src/ubuntu/vibration.h" /> 146.108 + <source-file src="src/ubuntu/vibration.cpp" /> 146.109 + </platform> 146.110 + 146.111 + <!-- ios --> 146.112 + <platform name="ios"> 146.113 + <config-file target="config.xml" parent="/*"> 146.114 + <feature name="Vibration"> 146.115 + <param name="ios-package" value="CDVVibration"/> 146.116 + </feature> 146.117 + </config-file> 146.118 + <header-file src="src/ios/CDVVibration.h" /> 146.119 + <source-file src="src/ios/CDVVibration.m" /> 146.120 + 146.121 + <framework src="AudioToolbox.framework" weak="true" /> 146.122 + </platform> 146.123 + 146.124 + <!-- blackberry10 --> 146.125 + <platform name="blackberry10"> 146.126 + <source-file src="src/blackberry10/index.js" target-dir="Vibration"/> 146.127 + <lib-file src="src/blackberry10/native/device/libVibration.so" arch="device" /> 146.128 + <lib-file src="src/blackberry10/native/simulator/libVibration.so" arch="simulator" /> 146.129 + <config-file target="www/config.xml" parent="/widget"> 146.130 + <feature name="Vibration" value="Vibration" /> 146.131 + </config-file> 146.132 + </platform> 146.133 + 146.134 + <!-- tizen --> 146.135 + <platform name="tizen"> 146.136 + <js-module src="src/tizen/VibrationProxy.js" name="VibrationProxy"> 146.137 + <runs /> 146.138 + </js-module> 146.139 + </platform> 146.140 +</plugin>
147.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 147.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/android/Vibration.java Thu Jun 04 14:50:33 2015 +0200 147.3 @@ -0,0 +1,126 @@ 147.4 +/* 147.5 + Licensed to the Apache Software Foundation (ASF) under one 147.6 + or more contributor license agreements. See the NOTICE file 147.7 + distributed with this work for additional information 147.8 + regarding copyright ownership. The ASF licenses this file 147.9 + to you under the Apache License, Version 2.0 (the 147.10 + "License"); you may not use this file except in compliance 147.11 + with the License. You may obtain a copy of the License at 147.12 + 147.13 + http://www.apache.org/licenses/LICENSE-2.0 147.14 + 147.15 + Unless required by applicable law or agreed to in writing, 147.16 + software distributed under the License is distributed on an 147.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 147.18 + KIND, either express or implied. See the License for the 147.19 + specific language governing permissions and limitations 147.20 + under the License. 147.21 +*/ 147.22 +package org.apache.cordova.vibration; 147.23 + 147.24 +import org.apache.cordova.CallbackContext; 147.25 +import org.apache.cordova.CordovaPlugin; 147.26 +import org.json.JSONArray; 147.27 +import org.json.JSONException; 147.28 +import android.content.Context; 147.29 +import android.os.Vibrator; 147.30 + 147.31 +/** 147.32 + * This class provides access to vibration on the device. 147.33 + */ 147.34 +public class Vibration extends CordovaPlugin { 147.35 + 147.36 + /** 147.37 + * Constructor. 147.38 + */ 147.39 + public Vibration() { 147.40 + } 147.41 + 147.42 + /** 147.43 + * Executes the request and returns PluginResult. 147.44 + * 147.45 + * @param action The action to execute. 147.46 + * @param args JSONArray of arguments for the plugin. 147.47 + * @param callbackContext The callback context used when calling back into JavaScript. 147.48 + * @return True when the action was valid, false otherwise. 147.49 + */ 147.50 + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 147.51 + if (action.equals("vibrate")) { 147.52 + this.vibrate(args.getLong(0)); 147.53 + } 147.54 + else if (action.equals("vibrateWithPattern")) { 147.55 + JSONArray pattern = args.getJSONArray(0); 147.56 + int repeat = args.getInt(1); 147.57 + //add a 0 at the beginning of pattern to align with w3c 147.58 + long[] patternArray = new long[pattern.length()+1]; 147.59 + patternArray[0] = 0; 147.60 + for (int i = 0; i < pattern.length(); i++) { 147.61 + patternArray[i+1] = pattern.getLong(i); 147.62 + } 147.63 + this.vibrateWithPattern(patternArray, repeat); 147.64 + } 147.65 + else if (action.equals("cancelVibration")) { 147.66 + this.cancelVibration(); 147.67 + } 147.68 + else { 147.69 + return false; 147.70 + } 147.71 + 147.72 + // Only alert and confirm are async. 147.73 + callbackContext.success(); 147.74 + 147.75 + return true; 147.76 + } 147.77 + 147.78 + //-------------------------------------------------------------------------- 147.79 + // LOCAL METHODS 147.80 + //-------------------------------------------------------------------------- 147.81 + 147.82 + /** 147.83 + * Vibrates the device for a given amount of time. 147.84 + * 147.85 + * @param time Time to vibrate in ms. 147.86 + */ 147.87 + public void vibrate(long time) { 147.88 + // Start the vibration, 0 defaults to half a second. 147.89 + if (time == 0) { 147.90 + time = 500; 147.91 + } 147.92 + Vibrator vibrator = (Vibrator) this.cordova.getActivity().getSystemService(Context.VIBRATOR_SERVICE); 147.93 + vibrator.vibrate(time); 147.94 + } 147.95 + 147.96 + /** 147.97 + * Vibrates the device with a given pattern. 147.98 + * 147.99 + * @param pattern Pattern with which to vibrate the device. 147.100 + * Pass in an array of longs that 147.101 + * are the durations for which to 147.102 + * turn on or off the vibrator in 147.103 + * milliseconds. The first value 147.104 + * indicates the number of milliseconds 147.105 + * to wait before turning the vibrator 147.106 + * on. The next value indicates the 147.107 + * number of milliseconds for which 147.108 + * to keep the vibrator on before 147.109 + * turning it off. Subsequent values 147.110 + * alternate between durations in 147.111 + * milliseconds to turn the vibrator 147.112 + * off or to turn the vibrator on. 147.113 + * 147.114 + * @param repeat Optional index into the pattern array at which 147.115 + * to start repeating, or -1 for no repetition (default). 147.116 + */ 147.117 + public void vibrateWithPattern(long[] pattern, int repeat) { 147.118 + Vibrator vibrator = (Vibrator) this.cordova.getActivity().getSystemService(Context.VIBRATOR_SERVICE); 147.119 + vibrator.vibrate(pattern, repeat); 147.120 + } 147.121 + 147.122 + /** 147.123 + * Immediately cancels any currently running vibration. 147.124 + */ 147.125 + public void cancelVibration() { 147.126 + Vibrator vibrator = (Vibrator) this.cordova.getActivity().getSystemService(Context.VIBRATOR_SERVICE); 147.127 + vibrator.cancel(); 147.128 + } 147.129 +}
148.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 148.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/index.js Thu Jun 04 14:50:33 2015 +0200 148.3 @@ -0,0 +1,80 @@ 148.4 +/* 148.5 + * 148.6 + * Licensed to the Apache Software Foundation (ASF) under one 148.7 + * or more contributor license agreements. See the NOTICE file 148.8 + * distributed with this work for additional information 148.9 + * regarding copyright ownership. The ASF licenses this file 148.10 + * to you under the Apache License, Version 2.0 (the 148.11 + * "License"); you may not use this file except in compliance 148.12 + * with the License. You may obtain a copy of the License at 148.13 + * 148.14 + * http://www.apache.org/licenses/LICENSE-2.0 148.15 + * 148.16 + * Unless required by applicable law or agreed to in writing, 148.17 + * software distributed under the License is distributed on an 148.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 148.19 + * KIND, either express or implied. See the License for the 148.20 + * specific language governing permissions and limitations 148.21 + * under the License. 148.22 + * 148.23 +*/ 148.24 + 148.25 +var vibration; 148.26 + 148.27 +module.exports = { 148.28 + vibrate: function (success, fail, args, env) { 148.29 + var result = new PluginResult(args, env), 148.30 + duration = args[0], 148.31 + response = vibration.getInstance().vibrate(duration); 148.32 + result.ok(response, false); 148.33 + } 148.34 +}; 148.35 + 148.36 +/////////////////////////////////////////////////////////////////// 148.37 +// JavaScript wrapper for JNEXT plugin 148.38 +/////////////////////////////////////////////////////////////////// 148.39 + 148.40 +JNEXT.Vibration = function () { 148.41 + var self = this, 148.42 + hasInstance = false; 148.43 + 148.44 + self.vibrate = function (duration) { 148.45 + //This is how Javascript calls into native 148.46 + return JNEXT.invoke(self.m_id, "vibrate " + duration); 148.47 + }; 148.48 + 148.49 + self.init = function () { 148.50 + //Checks that the jnext library is present and loads it 148.51 + if (!JNEXT.require("libVibration")) { 148.52 + return false; 148.53 + } 148.54 + 148.55 + //Creates the native object that this interface will call 148.56 + self.m_id = JNEXT.createObject("libVibration.Vibration"); 148.57 + 148.58 + if (self.m_id === "") { 148.59 + return false; 148.60 + } 148.61 + 148.62 + //Registers for the JNEXT event loop 148.63 + JNEXT.registerEvents(self); 148.64 + }; 148.65 + 148.66 + self.m_id = ""; 148.67 + 148.68 + //Used by JNEXT library to get the ID 148.69 + self.getId = function () { 148.70 + return self.m_id; 148.71 + }; 148.72 + 148.73 + //Not truly required but useful for instance management 148.74 + self.getInstance = function () { 148.75 + if (!hasInstance) { 148.76 + self.init(); 148.77 + hasInstance = true; 148.78 + } 148.79 + return self; 148.80 + }; 148.81 +}; 148.82 + 148.83 +vibration = new JNEXT.Vibration();
149.1 Binary file Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/device/libVibration.so has changed
150.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 150.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/plugin.cpp Thu Jun 04 14:50:33 2015 +0200 150.3 @@ -0,0 +1,341 @@ 150.4 +/* 150.5 + * 150.6 + * Licensed to the Apache Software Foundation (ASF) under one 150.7 + * or more contributor license agreements. See the NOTICE file 150.8 + * distributed with this work for additional information 150.9 + * regarding copyright ownership. The ASF licenses this file 150.10 + * to you under the Apache License, Version 2.0 (the 150.11 + * "License"); you may not use this file except in compliance 150.12 + * with the License. You may obtain a copy of the License at 150.13 + * 150.14 + * http://www.apache.org/licenses/LICENSE-2.0 150.15 + * 150.16 + * Unless required by applicable law or agreed to in writing, 150.17 + * software distributed under the License is distributed on an 150.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 150.19 + * KIND, either express or implied. See the License for the 150.20 + * specific language governing permissions and limitations 150.21 + * under the License. 150.22 + * 150.23 +*/ 150.24 + 150.25 +#include "plugin.h" 150.26 +#include "tokenizer.h" 150.27 + 150.28 +#ifdef _WINDOWS 150.29 +#include <windows.h> 150.30 +BOOL APIENTRY DllMain( HANDLE hModule, 150.31 + DWORD ul_reason_for_call, 150.32 + LPVOID lpReserved ) 150.33 +{ 150.34 + return TRUE; 150.35 +} 150.36 +#else 150.37 +#include <errno.h> 150.38 +#include <string.h> 150.39 + 150.40 +extern int errno; 150.41 +#endif 150.42 + 150.43 +SendPluginEv SendPluginEvent; 150.44 + 150.45 +string g_GetSysErrMsg( void ) 150.46 +{ 150.47 + string strError = "Unknown"; 150.48 + // Problem loading 150.49 +#ifdef _WINDOWS 150.50 + int nErrorCode = GetLastError(); 150.51 + LPTSTR s; 150.52 + if ( ::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 150.53 + NULL, nErrorCode, 0, ( LPTSTR ) &s, 0, NULL ) ) 150.54 + { 150.55 + strError = s; 150.56 + } 150.57 + else 150.58 + { 150.59 + char szBuf[ 20 ]; 150.60 + _snprintf_s( szBuf, _countof(szBuf), 19, "%d", nErrorCode ); 150.61 + strError = szBuf; 150.62 + } 150.63 +#else 150.64 + char szError[80]; 150.65 + if ( strerror_r( errno, szError, sizeof(szError) ) ) 150.66 + { 150.67 + strError = "no description found"; 150.68 + } 150.69 + else 150.70 + { 150.71 + strError = szError; 150.72 + } 150.73 +#endif 150.74 + return strError; 150.75 +} 150.76 + 150.77 +void g_sleep( unsigned int mseconds ) 150.78 +{ 150.79 +#ifdef _WINDOWS 150.80 + Sleep( mseconds ); 150.81 +#else 150.82 + usleep( mseconds * 1000 ); 150.83 +#endif 150.84 +} 150.85 + 150.86 +string& g_trim( string& str ) 150.87 +{ 150.88 + // Whitespace characters 150.89 + char whspc[] = " \t\r\n\v\f"; 150.90 + 150.91 + // Whack off first part 150.92 + size_t pos = str.find_first_not_of( whspc ); 150.93 + 150.94 + if ( pos != string::npos ) 150.95 + str.replace( 0, pos, "" ); 150.96 + 150.97 + // Whack off trailing stuff 150.98 + pos = str.find_last_not_of( whspc ); 150.99 + 150.100 + if ( pos != string::npos ) 150.101 + str.replace( pos + 1, str.length() - pos, "" ); 150.102 + 150.103 + return str; 150.104 +} 150.105 + 150.106 +void g_tokenize( const string& str, const string& delimiters, vector<string>& tokens ) 150.107 +{ 150.108 + tokenize( str, tokens, delimiters ); 150.109 +} 150.110 + 150.111 +char* SetEventFunc( SendPluginEv funcPtr ) 150.112 +{ 150.113 + static char * szObjList = onGetObjList(); 150.114 + SendPluginEvent = funcPtr; 150.115 + return szObjList; 150.116 +} 150.117 + 150.118 + 150.119 +const int nMAXSIZE = 512; 150.120 +char* g_pszRetVal = NULL; 150.121 + 150.122 +//----------------------------------------------------------- 150.123 +// Map from an object Id to an object instance 150.124 +//----------------------------------------------------------- 150.125 +typedef std::map<string, JSExt*> StringToJExt_T; 150.126 + 150.127 +//----------------------------------------------------------- 150.128 +// Map from a browser context to an id mapping 150.129 +//----------------------------------------------------------- 150.130 +typedef std::map<void*, StringToJExt_T*> VoidToMap_T; 150.131 + 150.132 +VoidToMap_T g_context2Map; 150.133 + 150.134 +class GlobalSharedModule 150.135 +{ 150.136 + 150.137 +public: 150.138 + GlobalSharedModule( void ) 150.139 + { 150.140 + g_pszRetVal = new char[ nMAXSIZE ]; 150.141 + } 150.142 + 150.143 + ~GlobalSharedModule() 150.144 + { 150.145 + delete [] g_pszRetVal; 150.146 + 150.147 + VoidToMap_T::iterator posMaps; 150.148 + 150.149 + for ( posMaps = g_context2Map.begin(); posMaps != g_context2Map.end(); ++posMaps ) 150.150 + { 150.151 + StringToJExt_T& id2Obj = *posMaps->second; 150.152 + StringToJExt_T::iterator posMap; 150.153 + 150.154 + for ( posMap = id2Obj.begin(); posMap != id2Obj.end(); ++posMap ) 150.155 + { 150.156 + JSExt* pJSExt = posMap->second; 150.157 + 150.158 + if ( pJSExt->CanDelete() ) 150.159 + { 150.160 + delete pJSExt; 150.161 + } 150.162 + } 150.163 + 150.164 + id2Obj.erase( id2Obj.begin(), id2Obj.end() ); 150.165 + } 150.166 + 150.167 + g_context2Map.erase( g_context2Map.begin(), g_context2Map.end() ); 150.168 + } 150.169 +}; 150.170 + 150.171 +GlobalSharedModule g_sharedModule; 150.172 + 150.173 +char* g_str2global( const string& strRetVal ) 150.174 +{ 150.175 + int nLen = strRetVal.size(); 150.176 + 150.177 + if ( nLen >= nMAXSIZE ) 150.178 + { 150.179 + delete [] g_pszRetVal; 150.180 + g_pszRetVal = new char[ nLen + 1 ]; 150.181 + } 150.182 + 150.183 + else 150.184 + { 150.185 + // To minimaize the number of memory reallocations, the assumption 150.186 + // is that in most times this will be the case 150.187 + delete [] g_pszRetVal; 150.188 + g_pszRetVal = new char[ nMAXSIZE ]; 150.189 + } 150.190 + 150.191 + strcpy( g_pszRetVal, strRetVal.c_str() ); 150.192 + return g_pszRetVal; 150.193 +} 150.194 + 150.195 +bool g_unregisterObject( const string& strObjId, void* pContext ) 150.196 +{ 150.197 + // Called by the plugin extension implementation 150.198 + // if the extension handles the deletion of its object 150.199 + 150.200 + StringToJExt_T * pID2Obj = NULL; 150.201 + 150.202 + VoidToMap_T::iterator iter = g_context2Map.find( pContext ); 150.203 + 150.204 + if ( iter != g_context2Map.end() ) 150.205 + { 150.206 + pID2Obj = iter->second; 150.207 + } 150.208 + else 150.209 + { 150.210 + return false; 150.211 + } 150.212 + 150.213 + StringToJExt_T& mapID2Obj = *pID2Obj; 150.214 + 150.215 + StringToJExt_T::iterator r = mapID2Obj.find( strObjId ); 150.216 + 150.217 + if ( r == mapID2Obj.end() ) 150.218 + { 150.219 + return false; 150.220 + } 150.221 + 150.222 + mapID2Obj.erase( strObjId ); 150.223 + return true; 150.224 +} 150.225 + 150.226 +char* InvokeFunction( const char* szCommand, void* pContext ) 150.227 +{ 150.228 + StringToJExt_T * pID2Obj = NULL; 150.229 + 150.230 + VoidToMap_T::iterator iter = g_context2Map.find( pContext ); 150.231 + 150.232 + if ( iter != g_context2Map.end() ) 150.233 + { 150.234 + pID2Obj = iter->second; 150.235 + } 150.236 + else 150.237 + { 150.238 + pID2Obj = new StringToJExt_T; 150.239 + g_context2Map[ pContext ] = pID2Obj; 150.240 + } 150.241 + 150.242 + StringToJExt_T& mapID2Obj = *pID2Obj; 150.243 + 150.244 + string strFullCommand = szCommand; 150.245 + vector<string> arParams; 150.246 + g_tokenize( strFullCommand, " ", arParams ); 150.247 + string strCommand = arParams[ 0 ]; 150.248 + string strRetVal = szERROR; 150.249 + 150.250 + if ( strCommand == szCREATE ) 150.251 + { 150.252 + string strClassName = arParams[ 1 ]; 150.253 + string strObjId = arParams[ 2 ]; 150.254 + 150.255 + StringToJExt_T::iterator r = mapID2Obj.find( strObjId ); 150.256 + 150.257 + if ( r != mapID2Obj.end() ) 150.258 + { 150.259 + strRetVal += strObjId; 150.260 + strRetVal += " :Object already exists."; 150.261 + return g_str2global( strRetVal ); 150.262 + } 150.263 + 150.264 + JSExt* pJSExt = onCreateObject( strClassName, strObjId ); 150.265 + 150.266 + if ( pJSExt == NULL ) 150.267 + { 150.268 + strRetVal += strObjId; 150.269 + strRetVal += " :Unknown object type "; 150.270 + strRetVal += strClassName; 150.271 + return g_str2global( strRetVal ); 150.272 + } 150.273 + 150.274 + pJSExt->m_pContext = pContext; 150.275 + mapID2Obj[ strObjId ] = pJSExt; 150.276 + 150.277 + strRetVal = szOK; 150.278 + strRetVal += strObjId; 150.279 + return g_str2global( strRetVal ); 150.280 + } 150.281 + else 150.282 + if ( strCommand == szINVOKE ) 150.283 + { 150.284 + string strObjId = arParams[ 1 ]; 150.285 + string strMethod = arParams[ 2 ]; 150.286 + 150.287 + StringToJExt_T::iterator r = mapID2Obj.find( strObjId ); 150.288 + 150.289 + if ( r == mapID2Obj.end() ) 150.290 + { 150.291 + strRetVal += strObjId; 150.292 + strRetVal += " :No object found for id."; 150.293 + return g_str2global( strRetVal ); 150.294 + } 150.295 + 150.296 + JSExt* pJSExt = r->second; 150.297 + 150.298 + size_t nLoc = strFullCommand.find( strObjId ); 150.299 + 150.300 + if ( nLoc == string::npos ) 150.301 + { 150.302 + strRetVal += strObjId; 150.303 + strRetVal += " :Internal InvokeMethod error."; 150.304 + return g_str2global( strRetVal ); 150.305 + } 150.306 + 150.307 + if ( strMethod == szDISPOSE ) 150.308 + { 150.309 + StringToJExt_T::iterator r = mapID2Obj.find( strObjId ); 150.310 + 150.311 + if ( r == mapID2Obj.end() ) 150.312 + { 150.313 + strRetVal = szERROR; 150.314 + strRetVal += strObjId; 150.315 + return g_str2global( strRetVal ); 150.316 + } 150.317 + 150.318 + JSExt * pJSExt = mapID2Obj[ strObjId ]; 150.319 + 150.320 + if ( pJSExt->CanDelete() ) 150.321 + { 150.322 + delete pJSExt; 150.323 + } 150.324 + 150.325 + mapID2Obj.erase( strObjId ); 150.326 + strRetVal = szOK; 150.327 + strRetVal += strObjId; 150.328 + return g_str2global( strRetVal ); 150.329 + } 150.330 + 150.331 + size_t nSuffixLoc = nLoc + strObjId.size(); 150.332 + string strInvoke = strFullCommand.substr( nSuffixLoc ); 150.333 + strInvoke = g_trim( strInvoke ); 150.334 + strRetVal = pJSExt->InvokeMethod( strInvoke ); 150.335 + return g_str2global( strRetVal ); 150.336 + } 150.337 + 150.338 + strRetVal += " :Unknown command "; 150.339 + strRetVal += strCommand; 150.340 + return g_str2global( strRetVal ); 150.341 +} 150.342 + 150.343 +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 150.344 +
151.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 151.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/plugin.h Thu Jun 04 14:50:33 2015 +0200 151.3 @@ -0,0 +1,91 @@ 151.4 +/* 151.5 + * 151.6 + * Licensed to the Apache Software Foundation (ASF) under one 151.7 + * or more contributor license agreements. See the NOTICE file 151.8 + * distributed with this work for additional information 151.9 + * regarding copyright ownership. The ASF licenses this file 151.10 + * to you under the Apache License, Version 2.0 (the 151.11 + * "License"); you may not use this file except in compliance 151.12 + * with the License. You may obtain a copy of the License at 151.13 + * 151.14 + * http://www.apache.org/licenses/LICENSE-2.0 151.15 + * 151.16 + * Unless required by applicable law or agreed to in writing, 151.17 + * software distributed under the License is distributed on an 151.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 151.19 + * KIND, either express or implied. See the License for the 151.20 + * specific language governing permissions and limitations 151.21 + * under the License. 151.22 + * 151.23 +*/ 151.24 + 151.25 +#ifndef _PLUGIN_H 151.26 +#define _PLUGIN_H 151.27 + 151.28 +#include <map> 151.29 +#include <string> 151.30 +#include <vector> 151.31 +#include <unistd.h> 151.32 +//#include "tokenizer.h" 151.33 + 151.34 +using namespace std; 151.35 + 151.36 +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 151.37 +//%% Functions exported by this DLL 151.38 +//%% Should always be only SetEventFunc and InvokeFunction 151.39 +//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 151.40 +// g++ requires extern "C" otherwise the names of SetEventFunc and InvokeFunction 151.41 +// are mangled C++ style. MS Visual Studio doesn't seem to care though. 151.42 +extern "C" 151.43 +{ 151.44 + typedef void (*SendPluginEv)( const char* szEvent, void* pContext ); 151.45 + char* SetEventFunc(SendPluginEv funcPtr); 151.46 + char* InvokeFunction( const char* szCommand, void* pContext ); 151.47 +} 151.48 + 151.49 +// JNEXT Framework function of the form: 151.50 +// typedef void (*SendPluginEv)( const char* szEvent ); 151.51 +// used to notify JavaScript of an asynchronous event 151.52 +extern SendPluginEv SendPluginEvent; 151.53 + 151.54 +///////////////////////////////////////////////////////////////////////// 151.55 +// Constants and methods common to all JNEXT extensions types 151.56 +///////////////////////////////////////////////////////////////////////// 151.57 +#define szERROR "Error " 151.58 +#define szOK "Ok " 151.59 + 151.60 +#define szDISPOSE "Dispose" 151.61 +#define szINVOKE "InvokeMethod" 151.62 +#define szCREATE "CreateObj" 151.63 + 151.64 +///////////////////////////////////////////////////////////////////////// 151.65 +// Utility functions 151.66 +///////////////////////////////////////////////////////////////////////// 151.67 +string& g_trim( string& str ); 151.68 +void g_tokenize(const string& str,const string& delimiters, vector<string>& tokens); 151.69 +char* g_str2static( const string& strRetVal ); 151.70 +void g_sleep( unsigned int mseconds ); 151.71 +bool g_unregisterObject( const string& strObjId, void* pContext ); 151.72 + 151.73 + 151.74 +///////////////////////////////////////////////////////////////////////// 151.75 +// Abstract extension object 151.76 +///////////////////////////////////////////////////////////////////////// 151.77 +class JSExt 151.78 +{ 151.79 +public: 151.80 + virtual ~JSExt() {}; 151.81 + virtual string InvokeMethod( const string& strCommand ) = 0; 151.82 + virtual bool CanDelete( void ) = 0; 151.83 + virtual void TryDelete( void ) {} 151.84 +public: 151.85 + void* m_pContext; 151.86 +}; 151.87 + 151.88 +///////////////////////////////////////////////////////////////////////// 151.89 +// Callback functions to be implemented by the plugin implementation 151.90 +///////////////////////////////////////////////////////////////////////// 151.91 +extern char* onGetObjList( void ); 151.92 +extern JSExt* onCreateObject( const string& strClassName, const string& strObjId ); 151.93 + 151.94 +#endif
152.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 152.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/tokenizer.cpp Thu Jun 04 14:50:33 2015 +0200 152.3 @@ -0,0 +1,222 @@ 152.4 +/************************************************************************ 152.5 +The zlib/libpng License 152.6 + 152.7 +Copyright (c) 2006 Joerg Wiedenmann 152.8 + 152.9 +This software is provided 'as-is', without any express or implied warranty. 152.10 +In no event will the authors be held liable for any damages arising from 152.11 +the use of this software. 152.12 + 152.13 +Permission is granted to anyone to use this software for any purpose, 152.14 +including commercial applications, and to alter it and redistribute it 152.15 +freely, subject to the following restrictions: 152.16 + 152.17 +1. The origin of this software must not be misrepresented; 152.18 +you must not claim that you wrote the original software. 152.19 +If you use this software in a product, an acknowledgment 152.20 +in the product documentation would be appreciated but is 152.21 +not required. 152.22 + 152.23 +2. Altered source versions must be plainly marked as such, 152.24 +and must not be misrepresented as being the original software. 152.25 + 152.26 +3. This notice may not be removed or altered from any source distribution. 152.27 + 152.28 +***********************************************************************/ 152.29 + 152.30 +/******************************************************************** 152.31 + created: 2006-01-28 152.32 + filename: tokenizer.cpp 152.33 + author: Jrg Wiedenmann 152.34 + 152.35 + purpose: A tokenizer function which provides a very 152.36 + customizable way of breaking up strings. 152.37 + 152.38 + history: 2006-01-28, Original version 152.39 + 2006-03-04, Fixed a small parsing bug, thanks Elias. 152.40 +*********************************************************************/ 152.41 + 152.42 +#include "tokenizer.h" 152.43 + 152.44 +using namespace std; 152.45 + 152.46 +void tokenize ( const string& str, vector<string>& result, 152.47 + const string& delimiters, const string& delimiters_preserve, 152.48 + const string& quote, const string& esc ) 152.49 +{ 152.50 + // clear the vector 152.51 + if ( false == result.empty() ) 152.52 + { 152.53 + result.clear(); 152.54 + } 152.55 + 152.56 + string::size_type pos = 0; // the current position (char) in the string 152.57 + char ch = 0; // buffer for the current character 152.58 + char delimiter = 0; // the buffer for the delimiter char which 152.59 + // will be added to the tokens if the delimiter 152.60 + // is preserved 152.61 + char current_quote = 0; // the char of the current open quote 152.62 + bool quoted = false; // indicator if there is an open quote 152.63 + string token; // string buffer for the token 152.64 + bool token_complete = false; // indicates if the current token is 152.65 + // read to be added to the result vector 152.66 + string::size_type len = str.length(); // length of the input-string 152.67 + 152.68 + // for every char in the input-string 152.69 + while ( len > pos ) 152.70 + { 152.71 + // get the character of the string and reset the delimiter buffer 152.72 + ch = str.at(pos); 152.73 + delimiter = 0; 152.74 + 152.75 + // assume ch isn't a delimiter 152.76 + bool add_char = true; 152.77 + 152.78 + // check ... 152.79 + 152.80 + // ... if the delimiter is an escaped character 152.81 + bool escaped = false; // indicates if the next char is protected 152.82 + if ( false == esc.empty() ) // check if esc-chars are provided 152.83 + { 152.84 + if ( string::npos != esc.find_first_of(ch) ) 152.85 + { 152.86 + // get the escaped char 152.87 + ++pos; 152.88 + if ( pos < len ) // if there are more chars left 152.89 + { 152.90 + // get the next one 152.91 + ch = str.at(pos); 152.92 + 152.93 + // add the escaped character to the token 152.94 + add_char = true; 152.95 + } 152.96 + else // cannot get any more characters 152.97 + { 152.98 + // don't add the esc-char 152.99 + add_char = false; 152.100 + } 152.101 + 152.102 + // ignore the remaining delimiter checks 152.103 + escaped = true; 152.104 + } 152.105 + } 152.106 + 152.107 + // ... if the delimiter is a quote 152.108 + if ( false == quote.empty() && false == escaped ) 152.109 + { 152.110 + // if quote chars are provided and the char isn't protected 152.111 + if ( string::npos != quote.find_first_of(ch) ) 152.112 + { 152.113 + // if not quoted, set state to open quote and set 152.114 + // the quote character 152.115 + if ( false == quoted ) 152.116 + { 152.117 + quoted = true; 152.118 + current_quote = ch; 152.119 + 152.120 + // don't add the quote-char to the token 152.121 + add_char = false; 152.122 + } 152.123 + else // if quote is open already 152.124 + { 152.125 + // check if it is the matching character to close it 152.126 + if ( current_quote == ch ) 152.127 + { 152.128 + // close quote and reset the quote character 152.129 + quoted = false; 152.130 + current_quote = 0; 152.131 + 152.132 + // don't add the quote-char to the token 152.133 + add_char = false; 152.134 + } 152.135 + } // else 152.136 + } 152.137 + } 152.138 + 152.139 + // ... if the delimiter isn't preserved 152.140 + if ( false == delimiters.empty() && false == escaped && 152.141 + false == quoted ) 152.142 + { 152.143 + // if a delimiter is provided and the char isn't protected by 152.144 + // quote or escape char 152.145 + if ( string::npos != delimiters.find_first_of(ch) ) 152.146 + { 152.147 + // if ch is a delimiter and the token string isn't empty 152.148 + // the token is complete 152.149 + if ( false == token.empty() ) // BUGFIX: 2006-03-04 152.150 + { 152.151 + token_complete = true; 152.152 + } 152.153 + 152.154 + // don't add the delimiter to the token 152.155 + add_char = false; 152.156 + } 152.157 + } 152.158 + 152.159 + // ... if the delimiter is preserved - add it as a token 152.160 + bool add_delimiter = false; 152.161 + if ( false == delimiters_preserve.empty() && false == escaped && 152.162 + false == quoted ) 152.163 + { 152.164 + // if a delimiter which will be preserved is provided and the 152.165 + // char isn't protected by quote or escape char 152.166 + if ( string::npos != delimiters_preserve.find_first_of(ch) ) 152.167 + { 152.168 + // if ch is a delimiter and the token string isn't empty 152.169 + // the token is complete 152.170 + if ( false == token.empty() ) // BUGFIX: 2006-03-04 152.171 + { 152.172 + token_complete = true; 152.173 + } 152.174 + 152.175 + // don't add the delimiter to the token 152.176 + add_char = false; 152.177 + 152.178 + // add the delimiter 152.179 + delimiter = ch; 152.180 + add_delimiter = true; 152.181 + } 152.182 + } 152.183 + 152.184 + 152.185 + // add the character to the token 152.186 + if ( true == add_char ) 152.187 + { 152.188 + // add the current char 152.189 + token.push_back( ch ); 152.190 + } 152.191 + 152.192 + // add the token if it is complete 152.193 + if ( true == token_complete && false == token.empty() ) 152.194 + { 152.195 + // add the token string 152.196 + result.push_back( token ); 152.197 + 152.198 + // clear the contents 152.199 + token.clear(); 152.200 + 152.201 + // build the next token 152.202 + token_complete = false; 152.203 + } 152.204 + 152.205 + // add the delimiter 152.206 + if ( true == add_delimiter ) 152.207 + { 152.208 + // the next token is the delimiter 152.209 + string delim_token; 152.210 + delim_token.push_back( delimiter ); 152.211 + result.push_back( delim_token ); 152.212 + 152.213 + // REMOVED: 2006-03-04, Bugfix 152.214 + } 152.215 + 152.216 + // repeat for the next character 152.217 + ++pos; 152.218 + } // while 152.219 + 152.220 + // add the final token 152.221 + if ( false == token.empty() ) 152.222 + { 152.223 + result.push_back( token ); 152.224 + } 152.225 +}
153.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 153.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/public/tokenizer.h Thu Jun 04 14:50:33 2015 +0200 153.3 @@ -0,0 +1,55 @@ 153.4 +/************************************************************************ 153.5 +The zlib/libpng License 153.6 + 153.7 +Copyright (c) 2006 Joerg Wiedenmann 153.8 + 153.9 +This software is provided 'as-is', without any express or implied warranty. 153.10 +In no event will the authors be held liable for any damages arising from 153.11 +the use of this software. 153.12 + 153.13 +Permission is granted to anyone to use this software for any purpose, 153.14 +including commercial applications, and to alter it and redistribute it 153.15 +freely, subject to the following restrictions: 153.16 + 153.17 +1. The origin of this software must not be misrepresented; 153.18 + you must not claim that you wrote the original software. 153.19 + If you use this software in a product, an acknowledgment 153.20 + in the product documentation would be appreciated but is 153.21 + not required. 153.22 + 153.23 +2. Altered source versions must be plainly marked as such, 153.24 + and must not be misrepresented as being the original software. 153.25 + 153.26 +3. This notice may not be removed or altered from any source distribution. 153.27 + 153.28 +***********************************************************************/ 153.29 + 153.30 +/******************************************************************** 153.31 + created: 2006-01-28 153.32 + filename: tokenizer.cpp 153.33 + author: Jrg Wiedenmann 153.34 + 153.35 + purpose: A tokenizer function which provides a very 153.36 + customizable way of breaking up strings. 153.37 +*********************************************************************/ 153.38 + 153.39 +#include <vector> 153.40 +#include <string> 153.41 +using namespace std; 153.42 + 153.43 +// Function to break up a string into tokens 153.44 +// 153.45 +// Parameters: 153.46 +//----------- 153.47 +// str = the input string that will be tokenized 153.48 +// result = the tokens for str 153.49 +// delimiters = the delimiter characters 153.50 +// delimiters preserve = same as above, but the delimiter characters 153.51 +// will be put into the result as a token 153.52 +// quote = characters to protect the enclosed characters 153.53 +// esc = characters to protect a single character 153.54 +// 153.55 + 153.56 +void tokenize ( const string& str, vector<string>& result, 153.57 + const string& delimiters, const string& delimiters_preserve = "", 153.58 + const string& quote = "\"", const string& esc = "\\" );
154.1 Binary file Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/simulator/libVibration.so has changed
155.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 155.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/src/vibration_js.cpp Thu Jun 04 14:50:33 2015 +0200 155.3 @@ -0,0 +1,116 @@ 155.4 +/* 155.5 + * 155.6 + * Licensed to the Apache Software Foundation (ASF) under one 155.7 + * or more contributor license agreements. See the NOTICE file 155.8 + * distributed with this work for additional information 155.9 + * regarding copyright ownership. The ASF licenses this file 155.10 + * to you under the Apache License, Version 2.0 (the 155.11 + * "License"); you may not use this file except in compliance 155.12 + * with the License. You may obtain a copy of the License at 155.13 + * 155.14 + * http://www.apache.org/licenses/LICENSE-2.0 155.15 + * 155.16 + * Unless required by applicable law or agreed to in writing, 155.17 + * software distributed under the License is distributed on an 155.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 155.19 + * KIND, either express or implied. See the License for the 155.20 + * specific language governing permissions and limitations 155.21 + * under the License. 155.22 + * 155.23 +*/ 155.24 + 155.25 +#include <string> 155.26 +#include <sstream> 155.27 +#include <sys/stat.h> 155.28 +#include <sys/types.h> 155.29 +#include <stdio.h> 155.30 +#include <stdlib.h> 155.31 +#include "vibration_js.hpp" 155.32 +#include <bps/vibration.h> 155.33 + 155.34 +using namespace std; 155.35 + 155.36 +/** 155.37 + * Default constructor. 155.38 + */ 155.39 +Vibration::Vibration(const std::string& id) : m_id(id){ 155.40 + bps_initialize(); 155.41 +} 155.42 + 155.43 +/** 155.44 + * Vibration destructor. 155.45 + */ 155.46 +Vibration::~Vibration() { 155.47 + bps_shutdown(); 155.48 +} 155.49 + 155.50 +/** 155.51 + * This method returns the list of objects implemented by this native extension. 155.52 + */ 155.53 +char* onGetObjList() { 155.54 + static char name[] = "Vibration"; 155.55 + return name; 155.56 +} 155.57 + 155.58 +/** 155.59 + * This method is used by JNext to instantiate the Vibration object when 155.60 + * an object is created on the JavaScript server side. 155.61 + */ 155.62 +JSExt* onCreateObject(const string& className, const string& id) { 155.63 + if (className == "Vibration") { 155.64 + return new Vibration(id); 155.65 + } 155.66 + return NULL; 155.67 +} 155.68 + 155.69 +/** 155.70 + * Method used by JNext to determine if the object can be deleted. 155.71 + */ 155.72 +bool Vibration::CanDelete() { 155.73 + return true; 155.74 +} 155.75 + 155.76 +/** 155.77 + * It will be called from JNext JavaScript side with passed string. 155.78 + * This method implements the interface for the JavaScript to native binding 155.79 + * for invoking native code. This method is triggered when JNext.invoke is 155.80 + * called on the JavaScript side with this native objects id. 155.81 + */ 155.82 +string Vibration::InvokeMethod(const string& command) { 155.83 + 155.84 + // parse command and args from string 155.85 + int indexOfFirstSpace = command.find_first_of(" "); 155.86 + string strCommand = command.substr(0, indexOfFirstSpace); 155.87 + string strValue = command.substr(indexOfFirstSpace + 1, command.length()); 155.88 + char info[1024]; 155.89 + 155.90 + //Process the vibrate command 155.91 + if (strCommand == "vibrate") { 155.92 + //Get the duration 155.93 + int duration = atoi(strValue.substr(0, strValue.length()).c_str()); 155.94 + 155.95 + if (duration <= 0) { 155.96 + //Default to 1 second 155.97 + duration = 1000; 155.98 + } else if (duration > 5000) { 155.99 + //Max 5 seconds 155.100 + duration = 5000; 155.101 + } 155.102 + 155.103 + //Vibrate 155.104 + int value = vibration_request(VIBRATION_INTENSITY_HIGH , duration); 155.105 + 155.106 + //Check return 155.107 + if (value == BPS_SUCCESS) { 155.108 + sprintf(info, "Vibration successful."); 155.109 + } else if(value == BPS_FAILURE) { 155.110 + sprintf(info, "Vibration failed."); 155.111 + } else { 155.112 + sprintf(info, "Vibration unknown error: %d", value); 155.113 + } 155.114 + return info; 155.115 + } else { 155.116 + sprintf(info, "Unsupported method: %s", strCommand.c_str()); 155.117 + } 155.118 + return info; 155.119 +}
156.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 156.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/blackberry10/native/src/vibration_js.hpp Thu Jun 04 14:50:33 2015 +0200 156.3 @@ -0,0 +1,42 @@ 156.4 +/* 156.5 + * 156.6 + * Licensed to the Apache Software Foundation (ASF) under one 156.7 + * or more contributor license agreements. See the NOTICE file 156.8 + * distributed with this work for additional information 156.9 + * regarding copyright ownership. The ASF licenses this file 156.10 + * to you under the Apache License, Version 2.0 (the 156.11 + * "License"); you may not use this file except in compliance 156.12 + * with the License. You may obtain a copy of the License at 156.13 + * 156.14 + * http://www.apache.org/licenses/LICENSE-2.0 156.15 + * 156.16 + * Unless required by applicable law or agreed to in writing, 156.17 + * software distributed under the License is distributed on an 156.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 156.19 + * KIND, either express or implied. See the License for the 156.20 + * specific language governing permissions and limitations 156.21 + * under the License. 156.22 + * 156.23 +*/ 156.24 + 156.25 +#ifndef VIBRATION_JS_HPP_ 156.26 +#define VIBRATION_JS_HPP_ 156.27 + 156.28 +#include <string> 156.29 +#include "../public/plugin.h" 156.30 + 156.31 +class Vibration: public JSExt { 156.32 + 156.33 +public: 156.34 + explicit Vibration(const std::string& id); 156.35 + virtual ~Vibration(); 156.36 + 156.37 + // Interfaces of JSExt 156.38 + virtual bool CanDelete(); 156.39 + virtual std::string InvokeMethod(const std::string& command); 156.40 + 156.41 +private: 156.42 + std::string m_id; 156.43 +}; 156.44 + 156.45 +#endif /* VIBRATION_JS_HPP_ */
157.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 157.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/firefoxos/VibrationProxy.js Thu Jun 04 14:50:33 2015 +0200 157.3 @@ -0,0 +1,35 @@ 157.4 +/* 157.5 + * 157.6 + * Licensed to the Apache Software Foundation (ASF) under one 157.7 + * or more contributor license agreements. See the NOTICE file 157.8 + * distributed with this work for additional information 157.9 + * regarding copyright ownership. The ASF licenses this file 157.10 + * to you under the Apache License, Version 2.0 (the 157.11 + * "License"); you may not use this file except in compliance 157.12 + * with the License. You may obtain a copy of the License at 157.13 + * 157.14 + * http://www.apache.org/licenses/LICENSE-2.0 157.15 + * 157.16 + * Unless required by applicable law or agreed to in writing, 157.17 + * software distributed under the License is distributed on an 157.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 157.19 + * KIND, either express or implied. See the License for the 157.20 + * specific language governing permissions and limitations 157.21 + * under the License. 157.22 + * 157.23 +*/ 157.24 + 157.25 +var cordova = require('cordova'); 157.26 + 157.27 +module.exports = { 157.28 + 157.29 + vibrate: function(success, fail, milliseconds) { 157.30 + if (navigator.notification.vibrate) { 157.31 + navigator.vibrate(milliseconds); 157.32 + } else { 157.33 + console.log ("cordova/plugin/firefoxos/vibration, vibrate API does not exist"); 157.34 + } 157.35 + } 157.36 +}; 157.37 + 157.38 +require("cordova/exec/proxy").add("Vibration", module.exports); 157.39 \ No newline at end of file
158.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 158.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ios/CDVVibration.h Thu Jun 04 14:50:33 2015 +0200 158.3 @@ -0,0 +1,29 @@ 158.4 +/* 158.5 + Licensed to the Apache Software Foundation (ASF) under one 158.6 + or more contributor license agreements. See the NOTICE file 158.7 + distributed with this work for additional information 158.8 + regarding copyright ownership. The ASF licenses this file 158.9 + to you under the Apache License, Version 2.0 (the 158.10 + "License"); you may not use this file except in compliance 158.11 + with the License. You may obtain a copy of the License at 158.12 + 158.13 + http://www.apache.org/licenses/LICENSE-2.0 158.14 + 158.15 + Unless required by applicable law or agreed to in writing, 158.16 + software distributed under the License is distributed on an 158.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 158.18 + KIND, either express or implied. See the License for the 158.19 + specific language governing permissions and limitations 158.20 + under the License. 158.21 + */ 158.22 + 158.23 +#import <Foundation/Foundation.h> 158.24 +#import <UIKit/UIKit.h> 158.25 +#import <AudioToolbox/AudioServices.h> 158.26 +#import <Cordova/CDVPlugin.h> 158.27 + 158.28 +@interface CDVVibration : CDVPlugin {} 158.29 + 158.30 +- (void)vibrate:(CDVInvokedUrlCommand*)command; 158.31 + 158.32 +@end
159.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 159.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ios/CDVVibration.m Thu Jun 04 14:50:33 2015 +0200 159.3 @@ -0,0 +1,29 @@ 159.4 +/* 159.5 + Licensed to the Apache Software Foundation (ASF) under one 159.6 + or more contributor license agreements. See the NOTICE file 159.7 + distributed with this work for additional information 159.8 + regarding copyright ownership. The ASF licenses this file 159.9 + to you under the Apache License, Version 2.0 (the 159.10 + "License"); you may not use this file except in compliance 159.11 + with the License. You may obtain a copy of the License at 159.12 + 159.13 + http://www.apache.org/licenses/LICENSE-2.0 159.14 + 159.15 + Unless required by applicable law or agreed to in writing, 159.16 + software distributed under the License is distributed on an 159.17 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 159.18 + KIND, either express or implied. See the License for the 159.19 + specific language governing permissions and limitations 159.20 + under the License. 159.21 + */ 159.22 + 159.23 +#import "CDVVibration.h" 159.24 + 159.25 +@implementation CDVVibration 159.26 + 159.27 +- (void)vibrate:(CDVInvokedUrlCommand*)command 159.28 +{ 159.29 + AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 159.30 +} 159.31 + 159.32 +@end
160.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 160.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/tizen/VibrationProxy.js Thu Jun 04 14:50:33 2015 +0200 160.3 @@ -0,0 +1,30 @@ 160.4 +/* 160.5 + * 160.6 + * Licensed to the Apache Software Foundation (ASF) under one 160.7 + * or more contributor license agreements. See the NOTICE file 160.8 + * distributed with this work for additional information 160.9 + * regarding copyright ownership. The ASF licenses this file 160.10 + * to you under the Apache License, Version 2.0 (the 160.11 + * "License"); you may not use this file except in compliance 160.12 + * with the License. You may obtain a copy of the License at 160.13 + * 160.14 + * http://www.apache.org/licenses/LICENSE-2.0 160.15 + * 160.16 + * Unless required by applicable law or agreed to in writing, 160.17 + * software distributed under the License is distributed on an 160.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 160.19 + * KIND, either express or implied. See the License for the 160.20 + * specific language governing permissions and limitations 160.21 + * under the License. 160.22 + * 160.23 +*/ 160.24 + 160.25 +module.exports = { 160.26 + vibrate: function(milliseconds) { 160.27 + if (navigator.vibrate) { 160.28 + navigator.vibrate(milliseconds); 160.29 + } 160.30 + } 160.31 +}; 160.32 + 160.33 +require("cordova/tizen/commandProxy").add("Vibration", module.exports);
161.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 161.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.cpp Thu Jun 04 14:50:33 2015 +0200 161.3 @@ -0,0 +1,64 @@ 161.4 +/* 161.5 + * 161.6 + * Copyright 2013 Canonical Ltd. 161.7 + * 161.8 + * Licensed under the Apache License, Version 2.0 (the "License"); 161.9 + * you may not use this file except in compliance with the License. 161.10 + * You may obtain a copy of the License at 161.11 + * 161.12 + * http://www.apache.org/licenses/LICENSE-2.0 161.13 + * 161.14 + * Unless required by applicable law or agreed to in writing, 161.15 + * software distributed under the License is distributed on an 161.16 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 161.17 + * KIND, either express or implied. See the License for the 161.18 + * specific language governing permissions and limitations 161.19 + * under the License. 161.20 + * 161.21 +*/ 161.22 + 161.23 +#include "vibration.h" 161.24 + 161.25 +void Vibration::vibrate(int, int, int mills) { 161.26 + QSharedPointer<QFeedbackHapticsEffect> vibrate = QSharedPointer<QFeedbackHapticsEffect>::create(); 161.27 + vibrate->setIntensity(1.0); 161.28 + vibrate->setDuration(mills); 161.29 + 161.30 + vibrate->start(); 161.31 + 161.32 + _effects.append(vibrate); 161.33 +} 161.34 + 161.35 +void Vibration::cancelVibration(int, int) { 161.36 + _timers.clear(); 161.37 + _effects.clear(); 161.38 +} 161.39 + 161.40 +void Vibration::vibrateWithPattern(int, int, const QList<int> &pattern, int repeat) { 161.41 + QSharedPointer<QTimer> timer = QSharedPointer<QTimer>::create(); 161.42 + QSharedPointer<int> k = QSharedPointer<int>::create(); 161.43 + 161.44 + QSharedPointer<QFeedbackHapticsEffect> vibrate = QSharedPointer<QFeedbackHapticsEffect>::create(); 161.45 + vibrate->setIntensity(1.0); 161.46 + 161.47 + _effects.append(vibrate); 161.48 + _timers.append(timer); 161.49 + 161.50 + timer->connect(timer.data(), &QTimer::timeout, [=, timer = timer.data()] () { 161.51 + if (*k >= pattern.size()) { 161.52 + if (repeat < 0 || repeat >= pattern.size()) { 161.53 + timer->stop(); 161.54 + return; 161.55 + } 161.56 + *k = repeat; 161.57 + } 161.58 + bool idle = (*k % 2 == 0); 161.59 + if (!idle) { 161.60 + vibrate->setDuration(pattern[*k]); 161.61 + vibrate->start(); 161.62 + } 161.63 + timer->start(pattern[*k]); 161.64 + (*k)++; 161.65 + }); 161.66 + timer->start(1); 161.67 +}
162.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 162.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.h Thu Jun 04 14:50:33 2015 +0200 162.3 @@ -0,0 +1,54 @@ 162.4 +/* 162.5 + * 162.6 + * Copyright 2013 Canonical Ltd. 162.7 + * 162.8 + * Licensed under the Apache License, Version 2.0 (the "License"); 162.9 + * you may not use this file except in compliance with the License. 162.10 + * You may obtain a copy of the License at 162.11 + * 162.12 + * http://www.apache.org/licenses/LICENSE-2.0 162.13 + * 162.14 + * Unless required by applicable law or agreed to in writing, 162.15 + * software distributed under the License is distributed on an 162.16 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 162.17 + * KIND, either express or implied. See the License for the 162.18 + * specific language governing permissions and limitations 162.19 + * under the License. 162.20 + * 162.21 +*/ 162.22 + 162.23 +#ifndef _VIBRATION_H_SFAFKNVX3456 162.24 +#define _VIBRATION_H_SFAFKNVX3456 162.25 + 162.26 +#include <QtCore> 162.27 +#include <QFeedbackHapticsEffect> 162.28 +#include <cplugin.h> 162.29 + 162.30 +class Vibration: public CPlugin { 162.31 + Q_OBJECT 162.32 +public: 162.33 + explicit Vibration(Cordova *cordova): CPlugin(cordova) { 162.34 + } 162.35 + 162.36 + virtual const QString fullName() override { 162.37 + return Vibration::fullID(); 162.38 + } 162.39 + 162.40 + virtual const QString shortName() override { 162.41 + return "Vibration"; 162.42 + } 162.43 + 162.44 + static const QString fullID() { 162.45 + return "Vibration"; 162.46 + } 162.47 +public slots: 162.48 + void vibrate(int, int, int mills); 162.49 + void cancelVibration(int, int); 162.50 + void vibrateWithPattern(int, int, const QList<int> &pattern, int); 162.51 + 162.52 +private: 162.53 + QList<QSharedPointer<QFeedbackEffect>> _effects; 162.54 + QList<QSharedPointer<QTimer>> _timers; 162.55 +}; 162.56 + 162.57 +#endif
163.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 163.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/wp/Vibration.cs Thu Jun 04 14:50:33 2015 +0200 163.3 @@ -0,0 +1,77 @@ 163.4 +/* 163.5 + Licensed under the Apache License, Version 2.0 (the "License"); 163.6 + you may not use this file except in compliance with the License. 163.7 + You may obtain a copy of the License at 163.8 + 163.9 + http://www.apache.org/licenses/LICENSE-2.0 163.10 + 163.11 + Unless required by applicable law or agreed to in writing, software 163.12 + distributed under the License is distributed on an "AS IS" BASIS, 163.13 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163.14 + See the License for the specific language governing permissions and 163.15 + limitations under the License. 163.16 +*/ 163.17 + 163.18 +using System; 163.19 +using System.Windows; 163.20 +using System.Windows.Controls; 163.21 +using Microsoft.Devices; 163.22 +using System.Runtime.Serialization; 163.23 +using System.Threading; 163.24 +using System.Windows.Resources; 163.25 +using Microsoft.Phone.Controls; 163.26 +using System.Diagnostics; 163.27 + 163.28 + 163.29 +namespace WPCordovaClassLib.Cordova.Commands 163.30 +{ 163.31 + public class Vibration : BaseCommand 163.32 + { 163.33 + private static readonly int DEFAULT_DURATION = 200; 163.34 + 163.35 + public void vibrate(string vibrateDuration) 163.36 + { 163.37 + int msecs = DEFAULT_DURATION; // set default 163.38 + 163.39 + try 163.40 + { 163.41 + string[] args = JSON.JsonHelper.Deserialize<string[]>(vibrateDuration); 163.42 + 163.43 + msecs = int.Parse(args[0]); 163.44 + if (msecs < 1) 163.45 + { 163.46 + msecs = 1; 163.47 + } 163.48 + } 163.49 + catch (FormatException) 163.50 + { 163.51 + 163.52 + } 163.53 + 163.54 + vibrateMs(msecs); 163.55 + 163.56 + // TODO: may need to add listener to trigger DispatchCommandResult when the vibration ends... 163.57 + DispatchCommandResult(); 163.58 + } 163.59 + 163.60 + private static void vibrateMs(int msecs) 163.61 + { 163.62 + VibrateController.Default.Start(TimeSpan.FromMilliseconds(msecs)); 163.63 + } 163.64 + 163.65 + public void vibrateWithPattern(string options) 163.66 + { 163.67 + // falling back to vibrate 163.68 + vibrateMs(DEFAULT_DURATION); 163.69 + 163.70 + // TODO: may need to add listener to trigger DispatchCommandResult when the vibration ends... 163.71 + DispatchCommandResult(); 163.72 + } 163.73 + 163.74 + public void cancelVibration(string options) 163.75 + { 163.76 + VibrateController.Default.Stop(); 163.77 + DispatchCommandResult(); 163.78 + } 163.79 + } 163.80 +}
164.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 164.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/tests/plugin.xml Thu Jun 04 14:50:33 2015 +0200 164.3 @@ -0,0 +1,31 @@ 164.4 +<?xml version="1.0" encoding="UTF-8"?> 164.5 +<!-- 164.6 + Licensed to the Apache Software Foundation (ASF) under one 164.7 + or more contributor license agreements. See the NOTICE file 164.8 + distributed with this work for additional information 164.9 + regarding copyright ownership. The ASF licenses this file 164.10 + to you under the Apache License, Version 2.0 (the 164.11 + "License"); you may not use this file except in compliance 164.12 + with the License. You may obtain a copy of the License at 164.13 + 164.14 + http://www.apache.org/licenses/LICENSE-2.0 164.15 + 164.16 + Unless required by applicable law or agreed to in writing, 164.17 + software distributed under the License is distributed on an 164.18 + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 164.19 + KIND, either express or implied. See the License for the 164.20 + specific language governing permissions and limitations 164.21 + under the License. 164.22 +--> 164.23 + 164.24 +<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" 164.25 + xmlns:rim="http://www.blackberry.com/ns/widgets" 164.26 + xmlns:android="http://schemas.android.com/apk/res/android" 164.27 + id="org.apache.cordova.vibration.tests" 164.28 + version="0.3.12"> 164.29 + <name>Cordova Vibration Plugin Tests</name> 164.30 + <license>Apache 2.0</license> 164.31 + 164.32 + <js-module src="tests.js" name="tests"> 164.33 + </js-module> 164.34 +</plugin>
165.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 165.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/tests/tests.js Thu Jun 04 14:50:33 2015 +0200 165.3 @@ -0,0 +1,313 @@ 165.4 +/* 165.5 + * 165.6 + * Licensed to the Apache Software Foundation (ASF) under one 165.7 + * or more contributor license agreements. See the NOTICE file 165.8 + * distributed with this work for additional information 165.9 + * regarding copyright ownership. The ASF licenses this file 165.10 + * to you under the Apache License, Version 2.0 (the 165.11 + * "License"); you may not use this file except in compliance 165.12 + * with the License. You may obtain a copy of the License at 165.13 + * 165.14 + * http://www.apache.org/licenses/LICENSE-2.0 165.15 + * 165.16 + * Unless required by applicable law or agreed to in writing, 165.17 + * software distributed under the License is distributed on an 165.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 165.19 + * KIND, either express or implied. See the License for the 165.20 + * specific language governing permissions and limitations 165.21 + * under the License. 165.22 + * 165.23 + */ 165.24 + 165.25 +exports.defineAutoTests = function () { 165.26 + 165.27 + describe('Vibration (navigator.notification.vibrate)', function () { 165.28 + it("navigator.notification should exist", function () { 165.29 + expect(navigator.notification).toBeDefined(); 165.30 + }); 165.31 + 165.32 + it("should contain a vibrate function", function () { 165.33 + expect(typeof navigator.notification.vibrate).toBeDefined(); 165.34 + expect(typeof navigator.notification.vibrate).toBe("function"); 165.35 + }); 165.36 + }); 165.37 +}; 165.38 + 165.39 +exports.defineManualTests = function (contentEl, createActionButton) { 165.40 + var logMessage = function (message, color) { 165.41 + var log = document.getElementById('info'); 165.42 + var logLine = document.createElement('div'); 165.43 + if (color) { 165.44 + logLine.style.color = color; 165.45 + } 165.46 + logLine.innerHTML = message; 165.47 + log.appendChild(logLine); 165.48 + } 165.49 + 165.50 + var clearLog = function () { 165.51 + var log = document.getElementById('info'); 165.52 + log.innerHTML = ''; 165.53 + } 165.54 + 165.55 + //------------------------------------------------------------------------- 165.56 + // Vibrations 165.57 + //------------------------------------------------------------------------- 165.58 + 165.59 + //old vibrate call 165.60 + var vibrateOld = function(){ 165.61 + clearLog(); 165.62 + navigator.notification.vibrate(2500); 165.63 + logMessage("navigator.notification.vibrate(2500)", "green"); 165.64 + }; 165.65 + 165.66 + //old vibrate with pattern call 165.67 + var vibrateWithPatternOld = function(){ 165.68 + clearLog(); 165.69 + navigator.notification.vibrateWithPattern([1000, 3000, 2000, 5000]); 165.70 + logMessage("navigator.notification.vibrateWithPattern([1000, 3000, 2000, 5000])", "green"); 165.71 + }; 165.72 + 165.73 + //old cancel vibrate call 165.74 + var cancelOld = function(){ 165.75 + clearLog(); 165.76 + navigator.notification.cancelVibration(); 165.77 + logMessage("navigator.notification.cancelVibration()", "green"); 165.78 + }; 165.79 + 165.80 + //new standard vibrate call that aligns to w3c spec with param long 165.81 + var vibrateWithInt = function() { 165.82 + clearLog(); 165.83 + navigator.vibrate(3000); 165.84 + logMessage("navigator.vibrate(3000)", "green"); 165.85 + }; 165.86 + 165.87 + //new standard vibrate call that aligns to w3c spec with param array 165.88 + var vibrateWithArray = function() { 165.89 + clearLog(); 165.90 + navigator.vibrate([3000]); 165.91 + logMessage("navigator.vibrate([3000])", "green"); 165.92 + }; 165.93 + 165.94 + //vibrate with a pattern using w3c spec 165.95 + var vibrateWithPattern = function() { 165.96 + clearLog(); 165.97 + navigator.vibrate([1000, 2000, 3000, 2000, 5000]); 165.98 + logMessage("navigator.vibrate([1000, 2000, 3000, 2000, 5000])", "green"); 165.99 + }; 165.100 + 165.101 + //cancel existing vibration using w3c spec navigator.vibrate(0) 165.102 + var cancelWithZero = function() { 165.103 + clearLog(); 165.104 + navigator.vibrate(0); 165.105 + logMessage("navigator.vibrate(0)", "green"); 165.106 + }; 165.107 + 165.108 + //cancel existing vibration using w3c spec navigator.vibrate([]) 165.109 + var cancelWithEmpty = function() { 165.110 + clearLog(); 165.111 + navigator.vibrate([]); 165.112 + logMessage("navigator.vibrate([])", "green"); 165.113 + }; 165.114 + 165.115 + //reference to the timeout variable 165.116 + var timeout; 165.117 + 165.118 + //special long vibrate used to test cancel 165.119 + var longVibrate = function() { 165.120 + clearLog(); 165.121 + navigator.vibrate(60000); 165.122 + vibrateOn = true; 165.123 + logMessage("navigator.vibrate(60000)", "green"); 165.124 + timeout = setTimeout(resetVibrateOn, 60000); //if user doesn't cancel vibrate, reset vibrateOn var after 60 seconds 165.125 + }; 165.126 + 165.127 + //special long vibrate with pattern used to test cancel 165.128 + var longVibrateWithPattern = function() { 165.129 + clearLog(); 165.130 + navigator.vibrate([1000, 2000, 3000, 2000, 5000, 2000, 30000]); 165.131 + vibrateOn = true; 165.132 + logMessage("navigator.vibrate([1000, 2000, 3000, 2000, 5000, 2000, 30000])", "green"); 165.133 + timeout = setTimeout(resetVibrateOn, 45000); //if user doesn't cancel vibrate, reset vibrateOn var after 45 seconds 165.134 + }; 165.135 + 165.136 + //initiate two vibrations to test cancel 165.137 + var multipleVibrations = function() { 165.138 + clearLog(); 165.139 + navigator.vibrate(20000); 165.140 + navigator.vibrate(45000); 165.141 + vibrateOn = true; 165.142 + logMessage("navigator.vibrate(15000)\nnavigator.vibrate(45000)", "green"); 165.143 + timeout = setTimeout(resetVibrateOn, 45000); //if user doesn't cancel vibrate, reset vibrateOn var after 45 seconds 165.144 + } 165.145 + 165.146 + function resetVibrateOn() { 165.147 + vibrateOn = false; 165.148 + } 165.149 + 165.150 + //check whether there is an ongoing vibration 165.151 + var vibrateOn = false; 165.152 + 165.153 + 165.154 + 165.155 + 165.156 + var vibrate_tests = '<h1>Vibrate Tests</h1>' + 165.157 + '<h3>Starred tests only work for Android and Windows. </h3>' + 165.158 + '<h3>iOS ignores the time given for a vibrate </h3>' + 165.159 + '<div id="vibrate_old"></div>' + 165.160 + 'Expected result: Vibrate once for 2.5 seconds.' + 165.161 + '<p/> <div id="vibrateWithPattern_old"></div>' + 165.162 + 'Expected result: Pause for 1s, vibrate for 3s, pause for 2s, vibrate for 5s.' + 165.163 + '<p/> <div id="cancelVibrate_old"></div>' + 165.164 + 'Expected result: Press once to initiate vibrate for 60 seconds. Press again to cancel vibrate immediately.' + 165.165 + '<p/> <div id="cancelVibrateWithPattern_old"></div>' + 165.166 + 'Expected result: Press once to initiate vibrate with pattern for 45s. Press again to cancel vibrate immediately.' + 165.167 + '<p/> <div id="vibrate_int"></div>' + 165.168 + 'Expected result: Vibrate once for 3 seconds.' + 165.169 + '<p/> <div id="vibrate_array"></div>' + 165.170 + 'Expected result: Vibrate once for 3 seconds.' + 165.171 + '<p/> <div id="vibrate_with_pattern"></div>' + 165.172 + 'Expected result: Vibrate for 1s, pause for 2s, vibrate for 3s, pause for 2s, vibrate for 5s.' + 165.173 + '<p/> <div id="cancel_zero"></div>' + 165.174 + 'Expected result: Press once to initiate vibrate for 60 seconds. Press again to cancel vibrate immediately.' + 165.175 + '<p/><div id="cancel_array"></div>' + 165.176 + 'Expected result: Press once to initiate vibrate for 60 seconds. Press again to cancel vibrate immediately.' + 165.177 + '<p/> <div id="cancelWithPattern_zero"></div>' + 165.178 + 'Expected result: Press once to initiate vibrate with pattern for 45s. Press again to cancel vibrate immediately.' + 165.179 + '<p/> <div id="cancelWithPattern_array"></div>' + 165.180 + 'Expected result: Press once to initiate vibrate with pattern for 45s. Press again to cancel vibrate immediately.' + 165.181 + '<p/> <div id="cancelMultipleVibrations"></div>' + 165.182 + 'Expected result: Press once to initiate two vibrations simultaneously (one for 20s the other for 45s so total of 45s). Press again to cancel both vibrations immediately.'; 165.183 + 165.184 + 165.185 + contentEl.innerHTML = '<div id="info"></div>' + vibrate_tests; 165.186 + 165.187 + //standard vibrate with old call 165.188 + createActionButton('Vibrate (Old)', function () { 165.189 + vibrateOld(); 165.190 + }, 'vibrate_old'); 165.191 + 165.192 + //vibrate with pattern with old call 165.193 + createActionButton('* Vibrate with a pattern (Old)', function () { 165.194 + vibrateWithPatternOld(); 165.195 + }, 'vibrateWithPattern_old'); 165.196 + 165.197 + //cancel vibrate with old call 165.198 + createActionButton('* Cancel vibration (Old)', function() { 165.199 + 165.200 + if (!vibrateOn) 165.201 + { 165.202 + longVibrate(); 165.203 + } 165.204 + else 165.205 + { 165.206 + cancelOld(); 165.207 + resetVibrateOn(); 165.208 + clearTimeout(timeout); //clear the timeout since user has canceled the vibrate 165.209 + } 165.210 + }, 'cancelVibrate_old'); 165.211 + 165.212 + //cancel vibrate with pattern with old call 165.213 + createActionButton('* Cancel vibration with pattern (Old)', function() { 165.214 + 165.215 + if (!vibrateOn) 165.216 + { 165.217 + longVibrateWithPattern(); 165.218 + } 165.219 + else 165.220 + { 165.221 + cancelOld(); 165.222 + resetVibrateOn(); 165.223 + clearTimeout(timeout); //clear the timeout since user has canceled the vibrate 165.224 + } 165.225 + }, 'cancelVibrateWithPattern_old'); 165.226 + 165.227 + //standard vibrate with new call param int 165.228 + createActionButton('Vibrate with int', function() { 165.229 + vibrateWithInt(); 165.230 + }, 'vibrate_int'); 165.231 + 165.232 + //standard vibrate with new call param array 165.233 + createActionButton('Vibrate with array', function() { 165.234 + vibrateWithArray(); 165.235 + }, 'vibrate_array'); 165.236 + 165.237 + //vibrate with a pattern 165.238 + createActionButton('* Vibrate with a pattern', function() { 165.239 + vibrateWithPattern(); 165.240 + }, 'vibrate_with_pattern'); 165.241 + 165.242 + //cancel any existing vibrations with param 0 165.243 + createActionButton('* Cancel vibration with 0', function() { 165.244 + 165.245 + if (!vibrateOn) 165.246 + { 165.247 + longVibrate(); 165.248 + } 165.249 + else 165.250 + { 165.251 + cancelWithZero(); 165.252 + resetVibrateOn(); 165.253 + clearTimeout(timeout); //clear the timeout since user has canceled the vibrate 165.254 + } 165.255 + }, 'cancel_zero'); 165.256 + 165.257 + //cancel any existing vibrations with param [] 165.258 + createActionButton('* Cancel vibration with []', function() { 165.259 + 165.260 + if (!vibrateOn) 165.261 + { 165.262 + longVibrate(); 165.263 + } 165.264 + else 165.265 + { 165.266 + cancelWithEmpty(); 165.267 + resetVibrateOn(); 165.268 + clearTimeout(timeout); //clear the timeout since user has canceled the vibrate 165.269 + } 165.270 + }, 'cancel_array'); 165.271 + 165.272 + //cancel vibration with pattern with param 0 165.273 + createActionButton('* Cancel vibration with pattern with 0', function() { 165.274 + 165.275 + if (!vibrateOn) 165.276 + { 165.277 + longVibrateWithPattern(); 165.278 + } 165.279 + else 165.280 + { 165.281 + cancelWithZero(); 165.282 + resetVibrateOn(); 165.283 + clearTimeout(timeout); //clear the timeout since user has canceled the vibrate 165.284 + } 165.285 + }, 'cancelWithPattern_zero'); 165.286 + 165.287 + //cancel vibration with pattern with param [] 165.288 + createActionButton('* Cancel vibration with pattern with []', function() { 165.289 + 165.290 + if (!vibrateOn) 165.291 + { 165.292 + longVibrateWithPattern(); 165.293 + } 165.294 + else 165.295 + { 165.296 + cancelWithEmpty(); 165.297 + resetVibrateOn(); 165.298 + clearTimeout(timeout); //clear the timeout since user has canceled the vibrate 165.299 + } 165.300 + }, 'cancelWithPattern_array'); 165.301 + 165.302 + //cancel multiple vibrations 165.303 + createActionButton('* Cancel multiple vibrations', function() { 165.304 + 165.305 + if (!vibrateOn) 165.306 + { 165.307 + multipleVibrations(); 165.308 + } 165.309 + else 165.310 + { 165.311 + cancelWithZero(); 165.312 + resetVibrateOn(); 165.313 + clearTimeout(timeout); //clear the timeout since user has canceled the vibrate 165.314 + } 165.315 + }, 'cancelMultipleVibrations'); 165.316 +};
166.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 166.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/www/blackberry10/vibrate.js Thu Jun 04 14:50:33 2015 +0200 166.3 @@ -0,0 +1,26 @@ 166.4 +/* 166.5 + * 166.6 + * Licensed to the Apache Software Foundation (ASF) under one 166.7 + * or more contributor license agreements. See the NOTICE file 166.8 + * distributed with this work for additional information 166.9 + * regarding copyright ownership. The ASF licenses this file 166.10 + * to you under the Apache License, Version 2.0 (the 166.11 + * "License"); you may not use this file except in compliance 166.12 + * with the License. You may obtain a copy of the License at 166.13 + * 166.14 + * http://www.apache.org/licenses/LICENSE-2.0 166.15 + * 166.16 + * Unless required by applicable law or agreed to in writing, 166.17 + * software distributed under the License is distributed on an 166.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 166.19 + * KIND, either express or implied. See the License for the 166.20 + * specific language governing permissions and limitations 166.21 + * under the License. 166.22 + * 166.23 +*/ 166.24 + 166.25 +var vibrate = function(duration) { 166.26 + navigator.vibrate(duration); 166.27 +}; 166.28 + 166.29 +module.exports = vibrate;
167.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 167.2 +++ b/Touchgui/plugins/org.apache.cordova.vibration/www/vibration.js Thu Jun 04 14:50:33 2015 +0200 167.3 @@ -0,0 +1,119 @@ 167.4 +/* 167.5 + * 167.6 + * Licensed to the Apache Software Foundation (ASF) under one 167.7 + * or more contributor license agreements. See the NOTICE file 167.8 + * distributed with this work for additional information 167.9 + * regarding copyright ownership. The ASF licenses this file 167.10 + * to you under the Apache License, Version 2.0 (the 167.11 + * "License"); you may not use this file except in compliance 167.12 + * with the License. You may obtain a copy of the License at 167.13 + * 167.14 + * http://www.apache.org/licenses/LICENSE-2.0 167.15 + * 167.16 + * Unless required by applicable law or agreed to in writing, 167.17 + * software distributed under the License is distributed on an 167.18 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 167.19 + * KIND, either express or implied. See the License for the 167.20 + * specific language governing permissions and limitations 167.21 + * under the License. 167.22 + * 167.23 +*/ 167.24 + 167.25 +var exec = require('cordova/exec'); 167.26 + 167.27 +/** 167.28 + * Provides access to the vibration mechanism on the device. 167.29 + */ 167.30 + 167.31 +module.exports = { 167.32 + 167.33 + /** 167.34 + * Vibrates the device for a given amount of time or for a given pattern or immediately cancels any ongoing vibrations (depending on the parameter). 167.35 + * 167.36 + * @param {Integer} param The number of milliseconds to vibrate (if 0, cancels vibration) 167.37 + * 167.38 + * 167.39 + * @param {Array of Integer} param Pattern with which to vibrate the device. 167.40 + * Pass in an array of integers that 167.41 + * are the durations for which to 167.42 + * turn on or off the vibrator in 167.43 + * milliseconds. The FIRST value 167.44 + * indicates the 167.45 + * number of milliseconds for which 167.46 + * to keep the vibrator ON before 167.47 + * turning it off. The NEXT value indicates the 167.48 + * number of milliseconds for which 167.49 + * to keep the vibrator OFF before 167.50 + * turning it on. Subsequent values 167.51 + * alternate between durations in 167.52 + * milliseconds to turn the vibrator 167.53 + * off or to turn the vibrator on. 167.54 + * (if empty, cancels vibration) 167.55 + */ 167.56 + vibrate: function(param) { 167.57 + 167.58 + /* Aligning with w3c spec */ 167.59 + 167.60 + //vibrate 167.61 + if ((typeof param == 'number') && param != 0) 167.62 + exec(null, null, "Vibration", "vibrate", [param]); 167.63 + 167.64 + //vibrate with array ( i.e. vibrate([3000]) ) 167.65 + else if ((typeof param == 'object') && param.length == 1) 167.66 + { 167.67 + //cancel if vibrate([0]) 167.68 + if (param[0] == 0) 167.69 + exec(null, null, "Vibration", "cancelVibration", []); 167.70 + 167.71 + //else vibrate 167.72 + else 167.73 + exec(null, null, "Vibration", "vibrate", [param[0]]); 167.74 + } 167.75 + 167.76 + //vibrate with a pattern 167.77 + else if ((typeof param == 'object') && param.length > 1) 167.78 + { 167.79 + var repeat = -1; //no repeat 167.80 + exec(null, null, "Vibration", "vibrateWithPattern", [param, repeat]); 167.81 + } 167.82 + 167.83 + //cancel vibration (param = 0 or []) 167.84 + else 167.85 + exec(null, null, "Vibration", "cancelVibration", []); 167.86 + }, 167.87 + 167.88 + /** 167.89 + * Vibrates the device with a given pattern. 167.90 + * 167.91 + * @param {Array of Integer} pattern Pattern with which to vibrate the device. 167.92 + * Pass in an array of integers that 167.93 + * are the durations for which to 167.94 + * turn on or off the vibrator in 167.95 + * milliseconds. The first value 167.96 + * indicates the number of milliseconds 167.97 + * to wait before turning the vibrator 167.98 + * on. The next value indicates the 167.99 + * number of milliseconds for which 167.100 + * to keep the vibrator on before 167.101 + * turning it off. Subsequent values 167.102 + * alternate between durations in 167.103 + * milliseconds to turn the vibrator 167.104 + * off or to turn the vibrator on. 167.105 + * 167.106 + * @param {Integer} repeat Optional index into the pattern array at which 167.107 + * to start repeating (will repeat until canceled), 167.108 + * or -1 for no repetition (default). 167.109 + */ 167.110 + vibrateWithPattern: function(pattern, repeat) { 167.111 + repeat = (typeof repeat !== "undefined") ? repeat : -1; 167.112 + pattern.unshift(0); //add a 0 at beginning for backwards compatibility from w3c spec 167.113 + exec(null, null, "Vibration", "vibrateWithPattern", [pattern, repeat]); 167.114 + }, 167.115 + 167.116 + /** 167.117 + * Immediately cancels any currently running vibration. 167.118 + */ 167.119 + cancelVibration: function() { 167.120 + exec(null, null, "Vibration", "cancelVibration", []); 167.121 + } 167.122 +};
168.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 168.2 +++ b/Touchgui/plugins/wp8.json Thu Jun 04 14:50:33 2015 +0200 168.3 @@ -0,0 +1,16 @@ 168.4 +{ 168.5 + "prepare_queue": { 168.6 + "installed": [], 168.7 + "uninstalled": [] 168.8 + }, 168.9 + "config_munge": { 168.10 + "files": {} 168.11 + }, 168.12 + "installed_plugins": { 168.13 + "org.apache.cordova.device": {}, 168.14 + "org.apache.cordova.splashscreen": {}, 168.15 + "org.apache.cordova.vibration": {}, 168.16 + "org.apache.cordova.dialogs": {} 168.17 + }, 168.18 + "dependent_plugins": {} 168.19 +} 168.20 \ No newline at end of file
169.1 Binary file Touchgui/screenshot.png has changed
170.1 Binary file Touchgui/screenshot0a.png has changed
171.1 Binary file Touchgui/screenshot1a.png has changed
172.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 172.2 +++ b/Touchgui/www/css/main.css Thu Jun 04 14:50:33 2015 +0200 172.3 @@ -0,0 +1,42 @@ 172.4 +.center{ 172.5 + text-align: center; 172.6 +} 172.7 + 172.8 +h1{ 172.9 + font-style: italic; 172.10 +} 172.11 + 172.12 +#notifier_circle{ 172.13 + display: inline-block; 172.14 + margin-top: 18px; 172.15 + -webkit-animation-name: spin; 172.16 + -webkit-animation-duration: 3s; 172.17 + -webkit-animation-iteration-count: infinite; 172.18 + -webkit-animation-timing-function: linear; 172.19 + -moz-animation-name: spin; 172.20 + -moz-animation-duration: 3s; 172.21 + -moz-animation-iteration-count: infinite; 172.22 + -moz-animation-timing-function: linear; 172.23 + -ms-animation-name: spin; 172.24 + -ms-animation-duration: 3s; 172.25 + -ms-animation-iteration-count: infinite; 172.26 + -ms-animation-timing-function: linear; 172.27 + 172.28 + border-radius: 50%; 172.29 + } 172.30 + 172.31 +.green{ 172.32 + background-image: -moz-radial-gradient(45px 45px 45deg, circle cover, #80EE9F 0%, #1BCA37 100%, #AFEAAA 95%); 172.33 + background-image: -webkit-radial-gradient(45px 45px, circle cover, #80EE9F, #1BCA37); 172.34 + background-image: radial-gradient(45px 45px 45deg, circle cover, #80EE9F 0%, #1BCA37 100%, #AFEAAA 95%); 172.35 +} 172.36 + 172.37 +.gray{ 172.38 + background-image: -moz-radial-gradient(45px 45px 45deg, circle cover, rgba(182, 180, 180, 0.59) 0%, rgba(178, 190, 180, 0) 100%, black 95%); 172.39 + background-image: -webkit-radial-gradient(45px 45px, circle cover, rgba(182, 180, 180, 0.59), rgba(178, 190, 180, 0)); 172.40 + background-image: radial-gradient(45px 45px 45deg, circle cover, rgba(182, 180, 180, 0.59) 0%, rgba(178, 190, 180, 0) 100%, black 95%); 172.41 +} 172.42 + 172.43 +.redtext{ 172.44 + color:red; 172.45 +} 172.46 \ No newline at end of file
173.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 173.2 +++ b/Touchgui/www/index.html Thu Jun 04 14:50:33 2015 +0200 173.3 @@ -0,0 +1,65 @@ 173.4 +<!DOCTYPE html><!--HTML5 doctype--> 173.5 +<html> 173.6 +<head> 173.7 + <title>Touch Buzzer Companion App</title> 173.8 + <meta http-equiv="Content-type" content="text/html; charset=utf-8"> 173.9 + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" /> 173.10 + <style type="text/css"> 173.11 + /* Prevent copy paste for all elements except text fields */ 173.12 + * { -webkit-user-select:none; -webkit-tap-highlight-color:rgba(255, 255, 255, 0); } 173.13 + input, textarea { -webkit-user-select:text; } 173.14 + body { background-color:white; color:black } 173.15 + </style> 173.16 + <!-- jQuery --> 173.17 + <script src="lib/jquery/jquery-2.1.1.js"></script> 173.18 + <!-- App Framework --> 173.19 + <link rel="stylesheet" type="text/css" href="lib/appframework/af.ui.css"></link> 173.20 + <script type="text/javascript" src="lib/appframework/jq.appframework.min.js"></script> 173.21 +<!-- <script type="text/javascript" src="lib/appframework/appframework.js"></script>--> 173.22 + <script type="text/javascript" charset="utf-8" src="lib/appframework/appframework.ui.min.js"></script> 173.23 + 173.24 + <link rel="stylesheet" type="text/css" href="css/main.css"></link> 173.25 + <script src="intelxdk.js"></script> 173.26 + <script src="cordova.js"></script> 173.27 + 173.28 + <script src='xhr.js'></script> 173.29 + <script type="text/javascript"> 173.30 + var onDeviceReady=function(){ // called when Cordova is ready 173.31 + if( window.Cordova && navigator.splashscreen ) { // Cordova API detected 173.32 + navigator.splashscreen.hide() ; // hide splash screen 173.33 + } 173.34 + } ; 173.35 + document.addEventListener("deviceready", onDeviceReady, false) ; 173.36 + </script> 173.37 +</head> 173.38 +<body> 173.39 + <div id="afui"> 173.40 + 173.41 + <div id="content"> 173.42 + 173.43 + <div id="main" title="TouchNotifier" class="panel" data-footer="none"> 173.44 + <div class="center"> 173.45 + <h1>Are you Expecting Anyone?</h1> 173.46 + <div id="notifier_circle" class="gray"> 173.47 + 173.48 + </div> 173.49 + </div> 173.50 + <div> 173.51 + <b>Log:</b><br> 173.52 + <div id="feedback_log" class="redtext"></div> 173.53 + </div> 173.54 + </div> 173.55 + 173.56 + <div class="panel" data-title="TouchNotifier Companion" modal="true" selected="true"> 173.57 + <p>Please provide an IP address & port to your TouchNotifier IoT project (Touch Sensor & Buzzer) on your development platform.</p> 173.58 + <b>Note:</b> This is needed for establishing a connection betweeen your Companion App and Node.js/IoT application. 173.59 + <p> 173.60 + <input id="ip_address" type="text" placeholder="Enter your IoT dev platform's IP Address"> 173.61 + <input id="port" type="text" placeholder="Enter your corresponding port number"> 173.62 + <a class="block button" onclick="validateIP()">Submit</a> 173.63 + </div> 173.64 + </div> 173.65 + </div> 173.66 +</body> 173.67 +<script type="text/javascript" src="js/main.js"></script> 173.68 +</html>
174.1 Binary file Touchgui/www/js/.DS_Store has changed
175.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 175.2 +++ b/Touchgui/www/js/main.js Thu Jun 04 14:50:33 2015 +0200 175.3 @@ -0,0 +1,77 @@ 175.4 +/*jslint unparam: true */ 175.5 + 175.6 +/* jshint strict: true, -W097, unused:false */ 175.7 +/*global window, document, d3, $, io, navigator, setTimeout */ 175.8 + 175.9 +//Set the size of the Notifier Circle 175.10 +$("#notifier_circle").width(0.8 * window.innerWidth); 175.11 +$("#notifier_circle").height(0.8 * window.innerWidth); 175.12 + 175.13 + 175.14 +/* 175.15 +Function: validateIP() 175.16 +Parameter: none 175.17 +Description: Attempt to connect to server/Intel IoT platform 175.18 +*/ 175.19 +function validateIP() { 175.20 + 'use strict'; 175.21 + var socket, 175.22 + //Get values from text fields 175.23 + ip_addr = $("#ip_address").val(), 175.24 + port = $("#port").val(), 175.25 + script = document.createElement("script"); 175.26 + 175.27 + //create script tag for socket.io.js file located on your IoT platform (development board) 175.28 + script.setAttribute("src", "http://" + ip_addr + ":" + port + "/socket.io/socket.io.js"); 175.29 + document.head.appendChild(script); 175.30 + 175.31 + //Wait 1 second before connecting 175.32 + setTimeout(function () { 175.33 + try { 175.34 + //Connect to Server 175.35 + socket = io.connect("http://" + ip_addr + ":" + port); 175.36 + 175.37 + //Attach a 'connected' event handler to the socket 175.38 + socket.on("connected", function (message) { 175.39 + navigator.notification.alert( 175.40 + 'Welcome', // message 175.41 + "", // callback 175.42 + 'Hi There!', // title 175.43 + 'Ok' // buttonName 175.44 + ); 175.45 + }); 175.46 + 175.47 + //Set all Back button to not show 175.48 + $.ui.showBackButton = false; 175.49 + //Load page with transition 175.50 + $.ui.loadContent("#main", false, false, "fade"); 175.51 + 175.52 + socket.on("message", function (message) { 175.53 + //alert("Is anyone there? "+message); 175.54 + if (message === "present") { 175.55 + $("#notifier_circle").attr("class", "green"); 175.56 + //Update log 175.57 + $("#feedback_log").append(Date().substr(0, 21) + " Someone is Present!<br>"); 175.58 + //Prompt user with Cordova notification alert 175.59 + navigator.notification.alert( 175.60 + 'Someone is Present!', // message 175.61 + "", // callback 175.62 + 'Check Your Door', // title 175.63 + 'Ok' // buttonName 175.64 + ); 175.65 + //Wait 2 seconds then turn back to gray 175.66 + setTimeout(function () { 175.67 + $("#notifier_circle").attr("class", "gray"); 175.68 + }, 3000); 175.69 + } 175.70 + }); 175.71 + } catch (e) { 175.72 + navigator.notification.alert( 175.73 + "Server Not Available!", // message 175.74 + "", // callback 175.75 + 'Connection Error!', // title 175.76 + 'Ok' // buttonName 175.77 + ); 175.78 + } 175.79 + }, 1000); 175.80 +}
176.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 176.2 +++ b/Touchgui/www/lib/appframework/af.ui.css Thu Jun 04 14:50:33 2015 +0200 176.3 @@ -0,0 +1,3507 @@ 176.4 +/*! intel-appframework - v2.1.0 - 2014-09-22 */ 176.5 + 176.6 +/********************************************************** 176.7 + GENERAL UI ELEMENTS 176.8 +**********************************************************/ 176.9 + 176.10 +* { 176.11 + -webkit-user-select:none; /* Prevent copy paste for all elements except text fields */ 176.12 + -webkit-tap-highlight-color:rgba(0, 0, 0, 0); /* set highlight color for user interaction */ 176.13 + -moz-tap-highlight-color:rgba(0, 0, 0, 0); /* set highlight color for user interaction */ 176.14 + -ms-touch-action:none; 176.15 + -moz-user-select:-moz-none; 176.16 + -webkit-touch-callout: none; /* prevent the popup menu on any links*/ 176.17 + margin:0; 176.18 + padding:0; 176.19 + -webkit-box-sizing:border-box; 176.20 + -moz-box-sizing:border-box; 176.21 + box-sizing:border-box; 176.22 +} 176.23 + 176.24 +body { 176.25 + overflow-x:hidden; 176.26 + -webkit-text-size-adjust:none; 176.27 + font-family:'Helvetica Neue', Helvetica, Arial, sans-serif; 176.28 + color:#000; 176.29 + font-size:14px; 176.30 + display:-webkit-box; 176.31 + background: #CBD2D8; 176.32 + /* We want to layout our first container vertically */ 176.33 + -webkit-box-orient: vertical; 176.34 + /* we want our child elements to stretch to fit the container */ 176.35 + -webkit-box-align:stretch; 176.36 +} /* General styles that apply to elements not contained within other classes and styles */ 176.37 + 176.38 + 176.39 +#afui input,textarea { -webkit-user-select:text; -moz-user-select:-moz-text;-moz-user-select:text;} /* allow users to select text that appears in input fields */ 176.40 + 176.41 +#afui img { border:none; } /* Remove default borders for images */ 176.42 + 176.43 + 176.44 +#afui p { 176.45 + display:block; 176.46 + margin:6px 0; 176.47 + 176.48 + font-size:14px; 176.49 + line-height:20px; 176.50 + color:inherit 176.51 +} 176.52 + 176.53 + 176.54 +#afui #afui_modal { 176.55 + background: inherit; 176.56 + color:inherit; 176.57 + -webkit-backface-visibility: hidden; 176.58 + z-index:9999 !important; 176.59 + width:100%; 176.60 + height:100%; 176.61 + display:none; 176.62 + position:absolute; top:0; 176.63 + overflow:hidden; 176.64 + display: -webkit-box; 176.65 + display: -moz-box; 176.66 + display: box; 176.67 + display: -ms-flexbox; 176.68 + -webkit-box-orient: vertical; 176.69 + -moz-box-orient: vertical; 176.70 + -ms-box-orient: vertical; 176.71 + box-orient: vertical; 176.72 + display: -webkit-flex; 176.73 + display: -moz-flex; 176.74 + display: -ms-flex; 176.75 + display: flex; 176.76 + -webkit-flex-direction: column; 176.77 + -moz-flex-direction: column; 176.78 + -ms-flex-direction: column; 176.79 + flex-direction: column; 176.80 +} 176.81 + 176.82 + 176.83 +#afui #modalContainer > * { 176.84 + -webkit-backface-visibility: hidden; 176.85 + -webkit-perspective: 1000; 176.86 + background:inherit; 176.87 + color:inherit; 176.88 +} 176.89 + 176.90 + 176.91 + 176.92 +#afui .afScrollPanel { width:100%; min-height:100%; } 176.93 + 176.94 +#afui { 176.95 + position:absolute; 176.96 + width:100%; 176.97 + top:0; 176.98 + bottom:0; 176.99 + overflow:hidden; 176.100 +} 176.101 + 176.102 +#afui,.flexContainer { 176.103 + display: -webkit-box; 176.104 + display: -moz-box; 176.105 + display: box; 176.106 + display: -ms-flexbox; 176.107 + 176.108 + -webkit-box-orient: vertical; 176.109 + -moz-box-orient: vertical; 176.110 + -ms-box-orient: vertical; 176.111 + box-orient: vertical; 176.112 + 176.113 + /* current syntax */ 176.114 + display: -webkit-flex; 176.115 + display: -moz-flex; 176.116 + display: -ms-flex; 176.117 + display: flex; 176.118 + 176.119 + -webkit-flex-direction: column; 176.120 + -moz-flex-direction: column; 176.121 + -ms-flex-direction: column; 176.122 + flex-direction: column; 176.123 +} 176.124 + 176.125 +#afui > #splashscreen { 176.126 + position:absolute; 176.127 + top:0;bottom:0; 176.128 + width:100%; 176.129 + left:0; 176.130 + min-height:100%; 176.131 + background:rgba(29,29,28,1) !important; 176.132 + color:white !important; 176.133 + font-size:30px; 176.134 + text-align:center; 176.135 + z-index:9999; 176.136 + display:block; 176.137 + margin-left: auto !important; margin-right: auto !important; 176.138 + padding-top:80px !important; 176.139 +} 176.140 + 176.141 + 176.142 +/********************************************************** 176.143 + header 176.144 +**********************************************************/ 176.145 +#afui .header { 176.146 + position:relative; 176.147 + overflow: hidden; 176.148 + display:block; 176.149 + z-index:250; 176.150 + -webkit-box-sizing:border-box; box-sizing:border-box; 176.151 + height:44px; 176.152 + left:0; right:0; 176.153 + 176.154 +} /* This is masthead bar that appears at the top of the UI */ 176.155 + 176.156 + 176.157 + 176.158 + 176.159 +#afui .header h1 { 176.160 + 176.161 + position: absolute; 176.162 + width: 45%; 176.163 + z-index: 1; 176.164 + height: 44px; 176.165 + font-size: 18px; 176.166 + font-weight: bold; 176.167 + left: 27.5%; 176.168 + color: inherit; 176.169 + padding: 10px 0; 176.170 + text-shadow: rgba(0,0,0,0.8) 0 -1px 0; 176.171 + text-align: center; 176.172 + white-space: nowrap; 176.173 + text-overflow: ellipsis; 176.174 + overflow: hidden; 176.175 +} /* This is text that appears in the header at the top of the screen */ 176.176 + 176.177 + 176.178 +/********************************************************** 176.179 + CONTENT AREA 176.180 +**********************************************************/ 176.181 + 176.182 +#afui #content, #afui_modal #modalContainer { 176.183 + z-index:180; 176.184 + 176.185 + position:relative; 176.186 + /* previous syntax */ 176.187 + -webkit-box-flex: 1; 176.188 + -moz-box-flex: 1; 176.189 + -ms-box-flex: 1; 176.190 + box-flex: 1; 176.191 + 176.192 + /* current syntax */ 176.193 + -webkit-flex: 1; 176.194 + -moz-flex: 1; 176.195 + -ms-flex: 1; 176.196 + flex: 1; 176.197 + overflow:hidden; 176.198 + 176.199 + background:inherit; 176.200 + color:inherit; 176.201 +} /* Accounts for positioning of the content area, which is everything below the header and above the navbar. */ 176.202 + 176.203 + 176.204 +#afui .panel { 176.205 + z-index:180; 176.206 + width:100%; 176.207 + height:100%; 176.208 + display:none; 176.209 + position:absolute; top:0; left:0; 176.210 + overflow-y:auto; 176.211 + overflow-x:hidden; 176.212 + -webkit-overflow-scrolling:touch; 176.213 + -webkit-backface-visibility: hidden; 176.214 + padding:10px; 176.215 + padding-top:0px; 176.216 +} /* This class is applied to the divs that contain the various "views" or pages of the app. */ 176.217 + 176.218 + 176.219 +/********************************************************** 176.220 + scroller CSS 176.221 +**********************************************************/ 176.222 +#afui .y-scroll, #afui .panel.y-scroll { 176.223 + overflow-x:hidden; 176.224 + overflow-y:auto; 176.225 +} 176.226 +#afui .x-scroll, #afui .panel.x-scroll { 176.227 + overflow-x:auto; 176.228 + overflow-y:hidden; 176.229 +} 176.230 +#afui .no-scroll, #afui .panel.no-scroll { 176.231 + overflow:hidden; 176.232 +} 176.233 + 176.234 + 176.235 +/********************************************************** 176.236 + Navbar 176.237 +**********************************************************/ 176.238 +/* Nav bar appears locked to the bottom of the screen. It is the primary navigation. can contain text or graphical navigation */ 176.239 + 176.240 +#afui .footer { 176.241 + z-index:180; 176.242 + height:49px; 176.243 + display:block; 176.244 + left:0; 176.245 + right:0; 176.246 + position:relative; 176.247 + padding:0 3px; 176.248 +} 176.249 + 176.250 + 176.251 +#afui footer>a:not(.button) { 176.252 + -webkit-box-sizing:border-box; 176.253 + box-sizing: border-box; 176.254 + top: 3px; 176.255 + height: 43px; 176.256 + overflow: hidden; 176.257 + font-size:12px; 176.258 + font-weight:normal; 176.259 + text-decoration: none; 176.260 + color: #fff; 176.261 + text-align: center; 176.262 + display: inline-block; 176.263 + width: 25%; 176.264 + -webkit-backface-visibility: hidden; 176.265 + -webkit-perspective: 1000; 176.266 + line-height: 67px; 176.267 + position: relative; 176.268 + margin: 0; 176.269 +} 176.270 + 176.271 + 176.272 +#afui footer>a:not(.button) .af-badge { 176.273 + right:auto; 176.274 + margin-left:-16px; 176.275 +} 176.276 + 176.277 + 176.278 +#afui footer>a.icon:not(.button):before { 176.279 + position:absolute; 176.280 + top:2px; 176.281 + left:0; 176.282 + font-size: 25px; 176.283 + margin:auto; 176.284 + width: 100%; 176.285 +} 176.286 + 176.287 + 176.288 +#afui footer>a.pressed:not(.button) { 176.289 + 176.290 +} 176.291 + 176.292 + 176.293 +#afui footer>a.icon.pressed:not(.button):before { 176.294 + 176.295 +} 176.296 + 176.297 +/* Custom footers - always hidden */ 176.298 +#afui footer, #afui header, #afui nav, #afui aside { display:none; } 176.299 + 176.300 +/* Show the active header/footer/navs */ 176.301 +#afui .footer footer, #afui #menu nav, #afui .header header, #afui #aside_menu aside {display:block; height:100%;} 176.302 + 176.303 +#afui > #menu.tabletMenu { 176.304 + z-index:1; 176.305 + width:200px; 176.306 + bottom:0; 176.307 + display:none; 176.308 + position:absolute; top:0; left:0; 176.309 + border-right: 1px solid rgba(128,128,128,0.5); 176.310 + 176.311 +} 176.312 + 176.313 +#afui > #aside_menu { 176.314 + z-index:1; 176.315 + width:200px; 176.316 + bottom:0; 176.317 + height:100%; 176.318 + display:none; 176.319 + position:absolute; top:0; right:0; 176.320 + border-left: 1px solid rgba(128,128,128,0.5); 176.321 +} 176.322 + 176.323 + 176.324 +#afui #menu_scroller, #afui #aside_menu_scroller { 176.325 + padding-bottom:10px; 176.326 + overflow-y:auto; 176.327 + overflow-x:hidden; 176.328 + -webkit-backface-visibility: hidden; 176.329 + -webkit-overflow-scrolling:touch; 176.330 +} 176.331 + 176.332 + 176.333 +#afui #menu_scroller > *, #afui #aside_menu_scroller > * { 176.334 + -webkit-backface-visibility: hidden; 176.335 + -webkit-perspective: 1000; 176.336 +} 176.337 + 176.338 + 176.339 +#afui #menu .list li, 176.340 +#afui #menu .list .divider, 176.341 +#afui #menu .list li:first-child, 176.342 +#afui #menu .list li:last-child, 176.343 + 176.344 +#afui #aside_menu .list li, 176.345 +#afui #aside_menu .list .divider, 176.346 +#afui #aside_menu .list li:first-child, 176.347 +#afui #aside_menu .list li:last-child 176.348 + { 176.349 + 176.350 + font-weight:bold; 176.351 + font-size:1em; 176.352 + line-height:1em; 176.353 + border-color:#101012; 176.354 + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08); 176.355 + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08); 176.356 + 176.357 +} 176.358 + 176.359 +#afui #menu .list > li > a, 176.360 +#afui #aside_menu .list > li > a 176.361 +{ 176.362 + color:#ccc; 176.363 + margin-left:6px; 176.364 + font-weight: normal; 176.365 +} 176.366 + 176.367 + 176.368 +#afui #menu .list, 176.369 +#afui #menu .list .divider, 176.370 +#afui #aside_menu .list, 176.371 +#afui #aside_menu .list .divider 176.372 +{ background:inherit; } 176.373 + 176.374 + 176.375 +#afui #menu .list .divider, #afui #aside_menu .list .divider { 176.376 + background:#333; 176.377 + color:#fff; 176.378 + font-weight:bold; 176.379 + font-size:1em; 176.380 + line-height:1em; 176.381 + padding:6px; 176.382 + top:0px; 176.383 + border:none; 176.384 + -webkit-box-shadow:none; box-shadow: none; 176.385 +} 176.386 + 176.387 + 176.388 +#afui #menu .list > li > a:after, #afui #aside_menu .list > li > a:after { margin-top: -8px; } 176.389 + 176.390 +/* End side menu css */ 176.391 + 176.392 + 176.393 + 176.394 +#afui .splashscreen { 176.395 + background:rgba(29,29,28,1) !important; 176.396 + padding-left:40px; 176.397 + padding-top:30px !important; 176.398 + min-height:100%; 176.399 +} 176.400 + 176.401 + 176.402 +#afui h2 { 176.403 + display:block; 176.404 + height:34px; 176.405 + font-weight: bold; 176.406 + font-size:18px; 176.407 + color:#000; 176.408 + padding:6px 0; 176.409 + margin-bottom:8px; 176.410 +} /* Header class used for non-navigable header bars (h1 is reserved for the header) */ 176.411 + 176.412 + 176.413 +#afui .collapsed:after { 176.414 + float:right; 176.415 + content:''; 176.416 + border-left:5px solid transparent; 176.417 + border-right:5px solid transparent; 176.418 + border-top:6px solid #000; 176.419 + display:block; 176.420 + position:absolute; 176.421 + top:14px;right:14px; 176.422 +} 176.423 + 176.424 +#afui .collapsed:before { 176.425 + float:right; 176.426 + content:''; 176.427 + color:transparent; 176.428 + background:transparent; 176.429 + width:14px; height:14px; 176.430 + display:block; 176.431 + border:2px solid #000; 176.432 + border-radius:3px; 176.433 + position:absolute; 176.434 + top:8px;right:10px; 176.435 +} 176.436 + 176.437 +#afui .expanded:after { 176.438 + float:right;content:''; 176.439 + border-left: 5px solid transparent; 176.440 + border-right: 5px solid transparent; 176.441 + border-bottom: 6px solid #000; 176.442 + display:block; 176.443 + position:absolute; 176.444 + top:13px;right:14px; 176.445 +} 176.446 + 176.447 +#afui .expanded:before { 176.448 + float:right; 176.449 + content:''; 176.450 + color:transparent; 176.451 + background:transparent; 176.452 + width:14px; height:14px; 176.453 + display:block; 176.454 + border:2px solid #000; 176.455 + border-radius:3px; 176.456 + position:absolute; 176.457 + top:8px;right:10px; 176.458 +} 176.459 + 176.460 + 176.461 +/********************************************************** 176.462 + UI 176.463 +**********************************************************/ 176.464 + 176.465 +.ui-icon { 176.466 + background: #666; 176.467 + background: rgba(0,0,0,.4); 176.468 + background-repeat: no-repeat; 176.469 + border-radius: 9px; 176.470 +} 176.471 + 176.472 + 176.473 +.ui-loader { display: none; position: absolute; opacity: .85; z-index: 100; left: 50%; width: 200px; margin-left: -100px; margin-top: -35px; padding: 10px 30px; background: #666;background:rgba(0,0,0,.4);border-radius:9px;color:white;} 176.474 +.ui-loader.heavy {opacity:1;} 176.475 +.ui-loader h1 { font-size: 15px; text-align: center; } 176.476 +.ui-loader .ui-icon { position: static; display: block; opacity: .9; margin: 0 auto; width: 35px; height: 35px; background-color: transparent; } 176.477 + 176.478 + 176.479 +.spin { 176.480 + -webkit-transform: rotate(360deg); 176.481 + -webkit-animation-name: spin; 176.482 + -webkit-animation-duration: 1s; 176.483 + -webkit-animation-iteration-count: infinite; 176.484 +} 176.485 +@-webkit-keyframes spin { 176.486 + from {-webkit-transform: rotate(0deg);} 176.487 + to {-webkit-transform: rotate(360deg);} 176.488 +} 176.489 + 176.490 + 176.491 +.ui-icon-loading { 176.492 + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjBAMAAADs965qAAAAA3NCSVQICAjb4U/gAAAAMFBMVEX////x8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHvvEhiAAAAEHRSTlMAESIzRFVmd4iZqrvM3e7/dpUBFQAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAEaSURBVCiRY2AgATCapaUqoIiIzN5z5syZJiQRltW7gUJ3705C6OraDRG6GwATkli1evdusNBTuKJVq3c4MjBX3733DqqMfdWqFWDbau+9ewIRspy5KgHMYL737g1EX+fMaVAjbN+9KwDLzZxZAHPMu3cXwEbNnAl397p3YDslOmD6GBjs/v8AURodzXAh3v+/QZRHRyNciPP/f4hQA1yIHVMICtzLC9CFzMuL0IXEy0vQhdjK0+BsRqgv0tIMYEKCggJgmbS0QJgiQUEIwy0tVQCmCCokmhYaCFMElWMKDQ01BIkoKcKEGFRDQ1yMlISUgEIwe5iAQi7GxkpKSjBFwMh2cXEGCSkiOVcFLIQswsAgZGxshCpCBgAA0FNYp5zwDegAAAAASUVORK5CYII=); 176.493 + width: 40px; 176.494 + height: 40px; 176.495 + border-radius: 20px; 176.496 + background-size: 35px 35px; 176.497 +} 176.498 + 176.499 + 176.500 +#afui .ui-corner-all { border-radius:.6em; } 176.501 + 176.502 + 176.503 +#afui_mask { position:absolute;top:45%;z-index:999999; } 176.504 + 176.505 +.afui_panel_mask { position:absolute;top:0;bottom:0;left:0;right:0;z-index:2000;background-color:rgba(0,0,0,0.1);display:none} 176.506 + 176.507 +#afui .hasMenu{ 176.508 + left:0; 176.509 +} 176.510 + 176.511 + 176.512 +#afui .menuButton { 176.513 + position: relative; 176.514 + top: 5px; 176.515 + right: -8px; 176.516 + height: 36px; 176.517 + width: 36px; 176.518 + z-index:2; 176.519 + float:right; 176.520 +} 176.521 + 176.522 + 176.523 +#afui .menuButton:after { 176.524 + border-bottom: 9px double white; 176.525 + border-top: 3px solid white; 176.526 + top: 9px; 176.527 + left: 3px; 176.528 + content: ""; 176.529 + height: 3px; 176.530 + position: absolute; 176.531 + width: 15px; 176.532 +} 176.533 + 176.534 +#afui .hasMenu.on { 176.535 + -webkit-transform:translate3d(200px,0,0); 176.536 + transform:translate(200px,0); 176.537 +} 176.538 + 176.539 + 176.540 + 176.541 + 176.542 + 176.543 +#afui .modalbutton { 176.544 + position:absolute; 176.545 + top:0; 176.546 + right:5px; 176.547 + height:32px; 176.548 + width:58px; 176.549 + line-height:32px; 176.550 + z-index:9999; 176.551 +} 176.552 + 176.553 + 176.554 +#afui .closebutton { 176.555 + position:absolute; 176.556 + top:6px; right:6px; 176.557 + display:block; 176.558 + height:24px ; 176.559 + width:24px ; 176.560 + border-radius:12px; 176.561 + border:1px solid #666; 176.562 + background:#fff; 176.563 + color:#333; 176.564 + font-weight: bold; 176.565 + font-size:21px; 176.566 + line-height:18px; 176.567 + text-align:center; 176.568 + text-decoration:none; 176.569 +} 176.570 + 176.571 +#afui .closebutton:before { content:'x'; } 176.572 + 176.573 +#afui .closebutton.selected,.closebutton.modalButton.selected { 176.574 + color:#fff; 176.575 + background:#333; 176.576 +} 176.577 + 176.578 +#afui .panel > .list, 176.579 +#afui .panel > .afScrollPanel > .list { 176.580 + margin:0px -10px; 176.581 +} 176.582 + 176.583 +#afui .panel > .list.inset, 176.584 +#afui .panel > .afScrollPanel > .list.inset { 176.585 + margin:0px; 176.586 +} 176.587 + 176.588 + 176.589 +/* Chevrons */ 176.590 +@font-face { 176.591 + font-family: 'chevron'; 176.592 + src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAQAAA0AAAAABZgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABoAAAAcZ/T02kdERUYAAAFMAAAAHwAAACAAMgAGT1MvMgAAAWwAAABHAAAAVj7i2r5jbWFwAAABtAAAAEMAAAFS8BX0J2dhc3AAAAH4AAAACAAAAAj//wADZ2x5ZgAAAgAAAABsAAAAbMHrMoZoZWFkAAACbAAAADAAAAA2/JaSB2hoZWEAAAKcAAAAHgAAACQDav/GaG10eAAAArwAAAATAAAAFAN1AB1sb2NhAAAC0AAAAAwAAAAMAA4ANm1heHAAAALcAAAAHQAAACAASAAbbmFtZQAAAvwAAADdAAABhigr581wb3N0AAAD3AAAACIAAAA8nFVDO3icY2BgYGQAgjO2i86D6LO3V7LCaABOtwcoAAB4nGNgZGBg4ANiCQYQYGJgZGBmYAGSLGAeAwAEkAA5AHicY2BkVGCcwMDKwMGozGjJwMBgB6WvM4gxFDMwMDGwMjPAgQCCyRCQ5prC4PCB4UMIY8P/AwwajA0MDg0MDIwgOQBg6QqyAHicY2BgYGaAYBkGRgYQ8AHyGMF8FgYDIM0BhEwgiQ8MH0L+/0dmCTDzb4DqAgNGNgY4lxGkh4kBFTAyDHsAAFhbChsAAAAAAf//AAIAAQAA/8ABwAGAAAIAABEBIQHA/kABgP5AAAAAAAEAHf/tARMBcwAXAAAlFA8BBiIvASY1ND8BJyY1ND8BNjIfARYBEwmkCRoJFAkJenoJCRQIHAikCbANCqMJCRMKDQ0JenkKDQ0JEwoKowl4nGNgZGBgAOLcX7xy8fw2Xxm4GQ8ARRjO3l7JiqD/H2A8wNgA5HIwMIFEAUPwC7d4nGNgZGBgbPh/gEGD8QADwz8HIAkUQQGsAIQZBTAAAHicYzzAAAFTIRSjAoMsABVQAZUAAAAAAAAAAAAADgA2eJxjYGRgYGBlkGAA0QwMTEDMCGY7gPkMAAUvAGQAAAB4nHWOTWoCQRBG3+hoCIbgKmTZkE02M3RPwIUHmAO4cC/SjII40P7gSbLKEbL0GB4gR8gx/JzUJgsbin68rqqvgSc+ybidjAfGxj3xu3GfN07Gufy38YARF+Oh/K86s/xR5rmbunFP/Grcp8Yb5/JfxgNeOBsP5X9YsiJyJNGyheUqHlMrmMk2HNiw0Buz2Bw2C0Hd9e27O6kj4qgoleaYqv7v+3NBrwUTVSUKfGhNu93XbWqiq0rvps5yRcEXk6LyQU33/jaXTexYW0bo8pnHtFtrRyj93dkrAWI51wAAAHicY2BiwA9YgZiRgYmRiZGZvTQv083AwABCm5oAACfXBG0AAA==) format('woff'), 176.593 + url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTWf09NoAAAV8AAAAHEdERUYAMgAGAAAFXAAAACBPUy8yPuLavgAAAVgAAABWY21hcPAV9CcAAAHEAAABUmdhc3D//wADAAAFVAAAAAhnbHlmwesyhgAAAyQAAABsaGVhZPyWkgcAAADcAAAANmhoZWEDav/GAAABFAAAACRobXR4A3UAHQAAAbAAAAAUbG9jYQAOADYAAAMYAAAADG1heHAASAAbAAABOAAAACBuYW1lKCvnzQAAA5AAAAGGcG9zdJxVQzsAAAUYAAAAPAABAAAAAQAAbfoNHl8PPPUACwHAAAAAAM3bqQUAAAAAzdupBQAA/8ABwAGAAAAACAACAAAAAAAAAAEAAAGA/8AAKAHAAAD+QAHAAAEAAAAAAAAAAAAAAAAAAAAFAAEAAAAFABgAAQAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAQEgAZAABQAIASMBOQAAAD4BIwE5AAAA1wAWAHMAAAIABQMAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUGZFZABA8ADwVAGA/8AAKAGAAECAAAABAAAAAAAAAcAAAAAAAAAAlQAAAAAAAAEgAB0AAAADAAAAAwAAABwAAQAAAAAATAADAAEAAAAcAAQAMAAAAAgACAACAAAAAPAA8FT//wAAAADwAPBU//8AABADD7AAAQAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgA2AAEAAP/AAcABgAACAAARASEBwP5AAYD+QAAAAAABAB3/7QETAXMAFwAAJRQPAQYiLwEmNTQ/AScmNTQ/ATYyHwEWARMJpAkaCRQJCXp6CQkUCBwIpAmwDQqjCQkTCg0NCXp5Cg0NCRMKCqMJAAAADACWAAEAAAAAAAEABwAQAAEAAAAAAAIABwAoAAEAAAAAAAMAIwB4AAEAAAAAAAQABwCsAAEAAAAAAAUACwDMAAEAAAAAAAYABwDoAAMAAQQJAAEADgAAAAMAAQQJAAIADgAYAAMAAQQJAAMARgAwAAMAAQQJAAQADgCcAAMAAQQJAAUAFgC0AAMAAQQJAAYADgDYAGMAaABlAHYAcgBvAG4AAGNoZXZyb24AAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAAYwBoAGUAdgByAG8AbgAgADoAIAAxADAALQA2AC0AMgAwADEAMwAARm9udEZvcmdlIDIuMCA6IGNoZXZyb24gOiAxMC02LTIwMTMAAGMAaABlAHYAcgBvAG4AAGNoZXZyb24AAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAVmVyc2lvbiAxLjAAAGMAaABlAHYAcgBvAG4AAGNoZXZyb24AAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQACAQIBAwd1bmlGMDAwB3VuaUYwNTQAAAAB//8AAgABAAAADgAAABgAAAAAAAIAAQADAAQAAQAEAAAAAgAAAAAAAQAAAADMPaLPAAAAAM3bqQUAAAAAzdupBQ==) format('truetype'); 176.594 + font-weight: normal; 176.595 + font-style: normal; 176.596 +} 176.597 + 176.598 +#afui .chevron { 176.599 + font-family: 'chevron'; 176.600 + speak: none; 176.601 + font-style: normal; 176.602 + font-weight: normal; 176.603 + font-variant: normal; 176.604 + text-transform: none; 176.605 + line-height: 1; 176.606 + -webkit-font-smoothing: antialiased; 176.607 +} 176.608 +#afui .chevron:before { 176.609 + content: "\f054"; 176.610 +} 176.611 + 176.612 +#afui .chevron.left { 176.613 + -webkit-transform:rotate(180deg); 176.614 + transform:rotate(180deg); 176.615 +} 176.616 + 176.617 + 176.618 +@media handheld, only screen and (min-width: 768px) { 176.619 + #afui .footer.hasMenu.splitview, #afui .header.hasMenu.splitview, #afui #content.hasMenu.splitview { 176.620 + position:relative; 176.621 + right:0px; 176.622 + margin-left:256px; 176.623 + -webkit-transition: transform 0ms; 176.624 + -webkit-transform:none; 176.625 + transition:transform 0ms; 176.626 + transform:none ; 176.627 + width: -webkit-calc(100% - 256px); 176.628 + width: calc(100% - 256px); 176.629 + } 176.630 + 176.631 + #afui > #aside_menu.splitview { 176.632 + width:256px; 176.633 + } 176.634 + 176.635 + 176.636 + #afui > #menu.tabletMenu.splitview { 176.637 + z-index:1; 176.638 + width:256px; 176.639 + bottom:0; 176.640 + height:100% ; 176.641 + display:block; 176.642 + position:absolute ; top:0; 176.643 + left:0px; 176.644 + -webkit-transform:none; 176.645 + -webkit-transition:none; 176.646 + transform:none; 176.647 + transition:none; 176.648 + } 176.649 + 176.650 + #afui .splitview .menuButton { display:none; } 176.651 +} 176.652 + 176.653 +@media print { 176.654 + body { 176.655 + overflow:visible; 176.656 + } 176.657 + #afui #content{ 176.658 + overflow: visible; 176.659 + left:0; 176.660 + } 176.661 + #afui { 176.662 + overflow:visible; 176.663 + } 176.664 + #afui .panel { 176.665 + overflow-x:visible !important; 176.666 + overflow-y:visible !important; 176.667 + overflow:visible !important; 176.668 + } 176.669 +} 176.670 + 176.671 +/* blue #0190d6 176.672 + 176.673 + */ 176.674 + 176.675 +@-ms-viewport { 176.676 + width: device-width; 176.677 +} 176.678 + 176.679 +#afui { 176.680 + background:white; 176.681 + color:#53575E; 176.682 +} 176.683 + 176.684 +#afui .header{ 176.685 + background:#0088D1; 176.686 + border:none; 176.687 + border-bottom:1px solid #0088D1; 176.688 + color:white; 176.689 +} 176.690 + 176.691 +#afui .header h1 { 176.692 + text-shadow:none; 176.693 + width:45%; 176.694 +} 176.695 + 176.696 +#afui .backButton { 176.697 + background:rgba(249,249,249,1); 176.698 + color:#fff; 176.699 + display: block; 176.700 + position: absolute; 176.701 + line-height:44px; 176.702 + left: 25px; 176.703 + text-overflow: ellipsis; 176.704 + font-size: 14px; 176.705 + padding:0; 176.706 + text-shadow: none; 176.707 + background-color: transparent; 176.708 + border:none; 176.709 + border-color:transparent; 176.710 + height: 44px; 176.711 + top:0; 176.712 + border-radius:0; 176.713 + box-shadow:none; 176.714 + margin: 0; 176.715 + padding-left: 0; 176.716 + text-align: center; 176.717 + width:50px; 176.718 + padding:0 !important; 176.719 + margin:0 !important; 176.720 +} 176.721 + 176.722 +#afui .backButton::before { 176.723 + z-index: -1; 176.724 + font-size:22px; 176.725 + position: absolute; 176.726 + top: 10px; 176.727 + left: -20px; 176.728 + text-align: center; 176.729 + border-radius:0; 176.730 + border: none; 176.731 + border-color:transparent; 176.732 + box-shadow: none; 176.733 + -webkit-transform: none; 176.734 + transform: none; 176.735 + font-family: 'chevron'; 176.736 + speak: none; 176.737 + font-style: normal; 176.738 + font-weight: normal; 176.739 + font-variant: normal; 176.740 + text-transform: none; 176.741 + line-height: 1; 176.742 + -webkit-font-smoothing: antialiased; 176.743 + content: "\f054"; 176.744 + -webkit-transform:rotate(180deg); 176.745 + transform:rotate(180deg); 176.746 + background-color: transparent; 176.747 +} 176.748 + 176.749 +#afui header .backButton { 176.750 + position:absolute; 176.751 +} 176.752 + 176.753 +#afui .footer { 176.754 + background:#0088D1; 176.755 + border:none; 176.756 + border-top:1px solid #0088D1; 176.757 + box-shadow:none; 176.758 +} 176.759 + 176.760 +#afui footer>a:not(.button) { 176.761 + 176.762 +} 176.763 + 176.764 +#afui footer>a.pressed:not(.button) { 176.765 + border-radius:0; 176.766 + background:#00AEEF; 176.767 +} 176.768 + 176.769 +#afui footer>a.icon.pressed:not(.button):before { 176.770 + color:inherit; 176.771 +} 176.772 + 176.773 +#afui .af-badge { 176.774 + border:none; 176.775 +} 176.776 + 176.777 +#afui .list { 176.778 + background:inherit; 176.779 + color:inherit; 176.780 + border-color:#303030; 176.781 + font-weight:normal; 176.782 +} 176.783 + 176.784 +#afui .af-badge { 176.785 + box-shadow:none; 176.786 +} 176.787 + 176.788 +#afui .list .divider { color:black; } 176.789 + 176.790 +#afui .panel, #afui #modalContainer, #afui #modal { 176.791 + color:inherit; 176.792 + background:inherit; 176.793 +} 176.794 + 176.795 +#afui .panel h2 { color:#0088D1;} 176.796 + 176.797 +#afui .collapsed:after {border-top: 6px solid;} 176.798 +#afui .collapsed:before {border:2px solid;} 176.799 +#afui .expanded:after {border-bottom: 6px solid;} 176.800 +#afui .expanded:before {border:2px solid;} 176.801 + 176.802 +#afui .collapsed:before,#afui .expanded:before { 176.803 + border-color: inherit; 176.804 +} 176.805 + 176.806 +#afui .collapsed:after, #afui .expanded:after{ 176.807 + border-top-color:inherit; 176.808 + border-top-color:inherit; 176.809 +} 176.810 + 176.811 +#afui select, #afui textarea, #afui input[type="text"], 176.812 +#afui input[type=search], #afui input[type="password"], 176.813 +#afui input[type="datetime"], #afui input[type="datetime-local"], 176.814 +#afui input[type="date"], #afui input[type="month"], 176.815 +#afui input[type="time"], #afui input[type="week"], 176.816 +#afui input[type="number"], #afui input[type="email"], 176.817 +#afui input[type="url"], #afui input[type="tel"], 176.818 +#afui input[type="color"], #afui .input-group { 176.819 + background:inherit; 176.820 + color:inherit; 176.821 +} 176.822 + 176.823 +#afui input.toggle+label:after { color:inherit; } 176.824 + 176.825 +#afui input.toggle+label { border-radius:0; } 176.826 + 176.827 +#afui input.toggle+label > span { 176.828 + border-radius:0; 176.829 + top:0; 176.830 + width:27px; 176.831 + height:23px; 176.832 +} 176.833 + 176.834 +#afui label { color:inherit; } 176.835 + 176.836 +#afui input[type="radio"]:checked+label:before,#afui input[type="checkbox"]:checked+label:before { 176.837 + background: #33B5E5; 176.838 +} 176.839 + 176.840 +#afui > #aside_menu, 176.841 +#afui > #menu.tabletMenu { 176.842 + color:white; 176.843 + background:#00AEEF; 176.844 + border-right:1px solid #006BA4; 176.845 +} 176.846 + 176.847 +#afui #aside_menu .list li,#afui #aside_menu .list .divider,#afui #aside_menu .list li:last-child, 176.848 +#afui #menu .list li,#afui #menu .list .divider,#afui #menu .list li:last-child { 176.849 + border-color: #4CC6F4; 176.850 +} 176.851 + 176.852 +#afui #aside_menu .list .divider, 176.853 +#afui #menu .list .divider { 176.854 + background:#0088D1; 176.855 + color:inherit; 176.856 + font-size: 1em; 176.857 +} 176.858 + 176.859 +#afui #aside_menu .list > li > a, 176.860 +#afui #menu .list > li > a { 176.861 + background:inherit; 176.862 + color:inherit; 176.863 + font-size: 1em; 176.864 +} 176.865 + 176.866 +#afui #aside_menu .list, 176.867 +#afui #menu .list { 176.868 + font-weight: normal; 176.869 +} 176.870 + 176.871 +#afui .button { 176.872 + border-radius:0; 176.873 + text-shadow:none; 176.874 +} 176.875 + 176.876 +#afui .list > li > a:after{ 176.877 + color:#0088D1; 176.878 +} 176.879 + 176.880 +#afui .button.pressed { 176.881 + 176.882 +} 176.883 + 176.884 +#afui .button.previous { 176.885 + border:none; 176.886 +} 176.887 + 176.888 +#afui .button.next { 176.889 + border:none; 176.890 +} 176.891 + 176.892 +#afui .button.previous::after { 176.893 + color:black; 176.894 + z-index: -1; 176.895 + font-size:22px; 176.896 + position: absolute; 176.897 + top: 2px; 176.898 + left: -25px; 176.899 + text-align: center; 176.900 + border-radius:0; 176.901 + border: none; 176.902 + border-color:transparent; 176.903 + box-shadow: none; 176.904 + -webkit-transform: none; 176.905 + transform: none; 176.906 + font-family: 'chevron'; 176.907 + speak: none; 176.908 + font-style: normal; 176.909 + font-weight: normal; 176.910 + font-variant: normal; 176.911 + text-transform: none; 176.912 + line-height: 1; 176.913 + -webkit-font-smoothing: antialiased; 176.914 + content: "\f054"; 176.915 + -webkit-transform:rotate(180deg); 176.916 + transform:rotate(180deg); 176.917 + background-color: transparent; 176.918 +} 176.919 + 176.920 +#afui .button.next::after { 176.921 + color:black; 176.922 + z-index: -1; 176.923 + font-size:22px; 176.924 + position: absolute; 176.925 + top: 6px; 176.926 + right: -25px; 176.927 + text-align: center; 176.928 + border-radius:0; 176.929 + border: none; 176.930 + border-color:transparent; 176.931 + box-shadow: none; 176.932 + -webkit-transform: none; 176.933 + transform: none; 176.934 + font-family: 'chevron'; 176.935 + speak: none; 176.936 + font-style: normal; 176.937 + font-weight: normal; 176.938 + font-variant: normal; 176.939 + text-transform: none; 176.940 + line-height: 1; 176.941 + -webkit-font-smoothing: antialiased; 176.942 + content: "\f054"; 176.943 + background-color: transparent; 176.944 +} 176.945 + 176.946 +#afui .afPopup { 176.947 + border: solid 1px #33B5E5; 176.948 + -webkit-border-radius: 5px; 176.949 + border-radius: 5px; 176.950 + background:inherit; 176.951 + color:inherit; 176.952 +} 176.953 + 176.954 +#afui .afPopup>FOOTER>A{ 176.955 + width: 120px; 176.956 +} 176.957 + 176.958 +#afui #af_actionsheet { 176.959 + background:#0190d6; 176.960 + color:inherit; 176.961 +} 176.962 + 176.963 +#afui #af_actionsheet a{ 176.964 + border-radius:0; 176.965 + -webkit-border-radius:0; 176.966 + color:black; 176.967 + background:white; 176.968 + border:none; 176.969 + text-shadow:none; 176.970 +} 176.971 + 176.972 +#afui .list { 176.973 + margin: 0px; 176.974 + padding: 0px; 176.975 + margin-bottom: 10px; 176.976 + list-style: none; 176.977 + background-color: #fff; 176.978 + box-sizing: border-box; 176.979 + -webkit-box-sizing: border-box; 176.980 + 176.981 +} 176.982 +#afui .list li { 176.983 + display: block; 176.984 + list-style: none; 176.985 + position: relative; 176.986 + padding: 20px 20px 20px 10px; 176.987 + border-bottom: 1px solid #ccc; 176.988 +} 176.989 +#afui .list li:first-child { 176.990 + border-top: 1px solid #ccc; 176.991 +} 176.992 +#afui .list > li > a { 176.993 + display: block; 176.994 + position: relative; 176.995 + display: block; 176.996 + color: inherit; 176.997 + margin: -20px -20px -20px -10px; 176.998 + text-decoration: none; 176.999 + padding: 20px 20px 20px 10px; 176.1000 +} 176.1001 +#afui .list a .af-badge { 176.1002 + position: absolute; 176.1003 + right: 30px; 176.1004 + top: 48%; 176.1005 + margin-top: -10px; 176.1006 +} 176.1007 +#afui .list > li > a:after { 176.1008 + position: absolute; 176.1009 + right: 8px; 176.1010 + font-family: 'chevron'; 176.1011 + speak: none; 176.1012 + font-style: normal; 176.1013 + font-weight: normal; 176.1014 + font-variant: normal; 176.1015 + text-transform: none; 176.1016 + line-height: 1; 176.1017 + -webkit-font-smoothing: antialiased; 176.1018 + content: "\f054"; 176.1019 + top: 50%; 176.1020 + margin-top: -0.5em; 176.1021 + color:inherit; 176.1022 +} 176.1023 +#afui .list .divider { 176.1024 + position: relative; 176.1025 + top: -1px; 176.1026 + padding-top: 6px; 176.1027 + padding-bottom: 6px; 176.1028 + font-size: 12px; 176.1029 + font-weight: bold; 176.1030 + line-height: 18px; 176.1031 + background-color: #dfe0e2; 176.1032 + border-top: 1px solid #ccc; 176.1033 + border-bottom: 1px solid #ccc; 176.1034 + box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.4); 176.1035 + padding-right: 60px; 176.1036 +} 176.1037 +#afui .list.inset { 176.1038 + border: 1px solid #ccc; 176.1039 + border-radius: 6px; 176.1040 + margin: 10px; 176.1041 +} 176.1042 +#afui .list.inset li:first-child { 176.1043 + border-top: none; 176.1044 +} 176.1045 +#afui .list.inset li:last-child { 176.1046 + border-bottom: none; 176.1047 +} 176.1048 +#afui select, 176.1049 +#afui textarea, 176.1050 +#afui input[type="text"], 176.1051 +#afui input[type=search], 176.1052 +#afui input[type="password"], 176.1053 +#afui input[type="datetime"], 176.1054 +#afui input[type="datetime-local"], 176.1055 +#afui input[type="date"], 176.1056 +#afui input[type="month"], 176.1057 +#afui input[type="time"], 176.1058 +#afui input[type="week"], 176.1059 +#afui input[type="number"], 176.1060 +#afui input[type="email"], 176.1061 +#afui input[type="url"], 176.1062 +#afui input[type="tel"], 176.1063 +#afui input[type="color"], 176.1064 +#afui .input-group { 176.1065 + width: 100%; 176.1066 + height: 40px; 176.1067 + padding: 10px; 176.1068 + margin-bottom: 10px; 176.1069 + background: #fff; 176.1070 + border: 1px solid #ccc; 176.1071 + border-radius: 5px; 176.1072 + font-size: 14px; 176.1073 + font-weight: normal; 176.1074 + -webkit-appearance: none; 176.1075 + box-sizing: border-box; 176.1076 +} 176.1077 +#afui form { 176.1078 + position: relative; 176.1079 +} 176.1080 +#afui input[type="radio"], 176.1081 +#afui input[type="checkbox"] { 176.1082 + display: none; 176.1083 +} 176.1084 +#afui input[type="radio"] + label, 176.1085 +#afui input[type="checkbox"] + label { 176.1086 + display: inline-block; 176.1087 + width: 60%; 176.1088 + float: right; 176.1089 + position: relative; 176.1090 + text-align: left; 176.1091 + padding: 10px 0 0 0; 176.1092 +} 176.1093 +#afui input[type="radio"]:not(.toggle) + label:before { 176.1094 + background-color: #fafafa; 176.1095 + border: 1px solid #cacece; 176.1096 + border-radius: 50px; 176.1097 + display: block; 176.1098 + position: absolute; 176.1099 + width: 1.3em; 176.1100 + height: 1.3em; 176.1101 + content: ''; 176.1102 + margin-right: 5px; 176.1103 + top: 8px; 176.1104 + margin-left: -25px; 176.1105 +} 176.1106 +#afui input[type="radio"]:checked + label:before { 176.1107 + background-color: #000000; 176.1108 +} 176.1109 +#afui input[type="checkbox"] + label:before { 176.1110 + background-color: #fafafa; 176.1111 + border: 1px solid #cacece; 176.1112 + border-radius: 3px; 176.1113 + display: block; 176.1114 + position: absolute; 176.1115 + top: 8px; 176.1116 + left: -25px; 176.1117 + width: 1.3em; 176.1118 + height: 1.3em; 176.1119 + content: " "; 176.1120 +} 176.1121 +#afui input[type="checkbox"]:checked + label:before { 176.1122 + content: '\00a0\2714'; 176.1123 + padding: 0px; 176.1124 + display: inline-block; 176.1125 +} 176.1126 +#afui input[type="radio"]:after, 176.1127 +#afui input[type="checkbox"]:after { 176.1128 + visibility: hidden; 176.1129 + display: block; 176.1130 + font-size: 0; 176.1131 + content: " "; 176.1132 + clear: both; 176.1133 + height: 0; 176.1134 +} 176.1135 +#afui input[type="search"] { 176.1136 + border-radius: 20px; 176.1137 +} 176.1138 +#afui label { 176.1139 + float: left; 176.1140 + width: 33%; 176.1141 + font-weight: normal; 176.1142 + font-size: 14px; 176.1143 + color: inherit; 176.1144 + text-align: right; 176.1145 + padding: 11px 6px; 176.1146 +} 176.1147 +#afui label + select, 176.1148 +#afui label + input[type="radio"], 176.1149 +#afui label + input[type="checkbox"] label + textarea, 176.1150 +#afui label + input[type="text"], 176.1151 +#afui label + input[type=search], 176.1152 +#afui label + input[type="password"], 176.1153 +#afui label + input[type="datetime"], 176.1154 +#afui label + input[type="datetime-local"], 176.1155 +#afui label + input[type="date"], 176.1156 +#afui label + input[type="month"], 176.1157 +#afui label + input[type="time"], 176.1158 +#afui label + input[type="week"], 176.1159 +#afui label + input[type="number"], 176.1160 +#afui label + input[type="email"], 176.1161 +#afui label + input[type="url"], 176.1162 +#afui label + input[type="tel"], 176.1163 +#afui label + input[type="color"], 176.1164 +#afui label + textarea { 176.1165 + width: 66%; 176.1166 +} 176.1167 +#afui textarea { 176.1168 + height: auto; 176.1169 +} 176.1170 +#afui .input-group { 176.1171 + width: auto; 176.1172 + height: auto; 176.1173 + padding: 12px; 176.1174 + overflow: hidden; 176.1175 +} 176.1176 +#afui .input-group input:not([type='button']):not([type='submit']), 176.1177 +#afui .input-group textarea, 176.1178 +#afui .input-group select { 176.1179 + margin-bottom: 0; 176.1180 + background-color: transparent; 176.1181 + border: 0; 176.1182 + border-bottom: 1px solid #ccc; 176.1183 + border-radius: 0; 176.1184 + box-shadow: none; 176.1185 +} 176.1186 +#afui .input-group input:not([type="submit"]):not([type="button"]):last-child, 176.1187 +#afui .input-group textarea:last-child, 176.1188 +#afui .input-group select:last-child { 176.1189 + border-bottom: none; 176.1190 +} 176.1191 +#afui .input-group input[type=button], 176.1192 +#afui .input-group input[type=submit] { 176.1193 + margin: 5px; 176.1194 +} 176.1195 +#afui input.toggle + label:before, 176.1196 +#afui input.toggle:checked + label:before { 176.1197 + content: attr(data-on); 176.1198 + position: absolute; 176.1199 + color: #fff; 176.1200 + left: 5px; 176.1201 + width: 42px; 176.1202 + text-align: left; 176.1203 + z-index: 3; 176.1204 + top: 3px; 176.1205 + overflow: hidden; 176.1206 + background-color: transparent; 176.1207 + border: none; 176.1208 + border-radius: 0px; 176.1209 + text-transform: uppercase; 176.1210 + display: none; 176.1211 +} 176.1212 +#afui input.toggle:checked + label:before { 176.1213 + display: block; 176.1214 +} 176.1215 +#afui input.toggle + label:after { 176.1216 + content: attr(data-off); 176.1217 + position: absolute; 176.1218 + color: #505050; 176.1219 + width: 42px; 176.1220 + text-align: left; 176.1221 + z-index: 1; 176.1222 + top: 2px; 176.1223 + left: 30px; 176.1224 + overflow: hidden; 176.1225 + background-color: transparent; 176.1226 + border: none; 176.1227 + border-radius: 0px; 176.1228 + text-transform: uppercase; 176.1229 +} 176.1230 +#afui input.toggle:checked + label:after { 176.1231 + display: none; 176.1232 +} 176.1233 +#afui input[type="radio"].toggle:checked + label:before { 176.1234 + line-height: 1.2em; 176.1235 +} 176.1236 +#afui input.toggle + label { 176.1237 + position: relative; 176.1238 + margin: 5px; 176.1239 + border-radius: 50px; 176.1240 + display: block; 176.1241 + height: 24px; 176.1242 + width: 65px; 176.1243 + border: 1px solid #ccc; 176.1244 + left: 33%; 176.1245 + float: none; 176.1246 +} 176.1247 +#afui input.toggle:checked + label { 176.1248 + background: #1eb0e9; 176.1249 + line-height: -1em; 176.1250 +} 176.1251 +#afui input.toggle + label > span { 176.1252 + display: block; 176.1253 + width: 28px; 176.1254 + height: 28px; 176.1255 + background: #ccc; 176.1256 + border-radius: 50px; 176.1257 + z-index: 5; 176.1258 + top: -2px; 176.1259 + left: 0px; 176.1260 + position: absolute; 176.1261 + transition: transform 100ms linear; 176.1262 + transform: translate3d(0, 0, 0); 176.1263 + -webkit-transform: translate3d(0, 0, 0); 176.1264 + -webkit-transition: -webkit-transform 100ms linear; 176.1265 +} 176.1266 +#afui input.toggle:checked + label > span { 176.1267 + transform: translate3d(37px, 0, 0); 176.1268 + -webkit-transform: translate3d(37px, 0, 0); 176.1269 +} 176.1270 +#afui .formGroupHead { 176.1271 + font-size: 18px; 176.1272 + font-weight: bold; 176.1273 + color: inherit; 176.1274 + margin: 16px 0 8px; 176.1275 +} 176.1276 + 176.1277 + 176.1278 +#afui input[type=button], 176.1279 +#afui input[type=submit], #afui button { 176.1280 + font-size:inherit; 176.1281 +} 176.1282 +#afui .button { 176.1283 + position:relative; 176.1284 + display:inline-block; 176.1285 + padding:8px 12px; 176.1286 + margin:8px 0; 176.1287 + font-weight:bold; 176.1288 + color:#000; 176.1289 + text-align:center; 176.1290 + vertical-align:top; 176.1291 + cursor:pointer; 176.1292 + background-color:#eee; 176.1293 + border:1px solid #666; 176.1294 + border-radius:6px; 176.1295 + /*box-shadow: 0 1px 0 #fff;*/ 176.1296 + 176.1297 + text-decoration: none; 176.1298 + z-index:2; 176.1299 +} 176.1300 + 176.1301 +/* Active */ 176.1302 +#afui .button.pressed { background:#fff; } 176.1303 + 176.1304 +#afui .button.previous { 176.1305 + 176.1306 + margin-left:16px; 176.1307 + padding-left:6px; 176.1308 + border-color:#666 #666 transparent transparent !important; 176.1309 +} 176.1310 +#afui .button.next { 176.1311 + border-color:#666 transparent #666 #666 !important; 176.1312 + margin-right:16px; 176.1313 + padding-right:6px; 176.1314 +} 176.1315 + 176.1316 + 176.1317 +#afui .button.previous::after { 176.1318 + 176.1319 + z-index:-1; 176.1320 + content:''; 176.1321 + position:absolute; 176.1322 + width:25px; height:25px; 176.1323 + background-color:inherit; 176.1324 + top:3px; left:-11px; 176.1325 + border-radius:5px; 176.1326 + border:1px solid; 176.1327 + border-color:transparent transparent inherit transparent; 176.1328 + -webkit-transform:rotate(45deg); transform:rotate(45deg); 176.1329 +} 176.1330 +#afui .button.next::after { 176.1331 + z-index:-1; 176.1332 + content:''; 176.1333 + position:absolute; 176.1334 + width:25px; height:25px; 176.1335 + background-color:inherit; 176.1336 + top:3px; right:-11px; 176.1337 + border-radius:5px; 176.1338 + border:1px solid; 176.1339 + border-color:transparent transparent transparent transparent; 176.1340 + -webkit-transform:rotate(45deg); transform:rotate(45deg); 176.1341 +} 176.1342 + 176.1343 +#afui .button.block { display:block; } 176.1344 + 176.1345 +#afui .button.flat { 176.1346 + border-radius: 0; 176.1347 + box-shadow:none; 176.1348 +} 176.1349 + 176.1350 +#afui .header .button-grouped>.button { 176.1351 + margin:0; 176.1352 + border-color:#fff; 176.1353 +} 176.1354 + 176.1355 +#afui .button-grouped { 176.1356 + display:inline-block; 176.1357 + margin: 5px; 176.1358 +} 176.1359 +#afui .button-grouped * { 176.1360 + border-radius:0px; 176.1361 + float:left; 176.1362 + border-left:0px solid transparent; 176.1363 + border-right: 1px solid #666; 176.1364 + border-bottom: 1px solid #666; 176.1365 + border-top: 1px solid #666; 176.1366 + margin:0; 176.1367 +} 176.1368 +#afui .button-grouped > .button:first-child { 176.1369 + border-left: 1px solid #666; 176.1370 + border-top-left-radius: 6px; 176.1371 + border-bottom-left-radius: 6px; 176.1372 +} 176.1373 +#afui .button-grouped > .button:last-child { 176.1374 + border-top-right-radius: 6px; 176.1375 + border-bottom-right-radius: 6px; 176.1376 +} 176.1377 + 176.1378 +#afui .button-grouped.flex { 176.1379 + display: -webkit-box; 176.1380 + display: -moz-box; 176.1381 + display: -ms-flexbox; 176.1382 + display: -webkit-flex; 176.1383 + display: flex; 176.1384 +} 176.1385 + 176.1386 +#afui .button-grouped.flex > .button { 176.1387 + -webkit-box-flex: 1; 176.1388 + -moz-box-flex: 1 auto; 176.1389 + -webkit-flex: 1 auto; 176.1390 + -ms-flex: 1 auto; 176.1391 + flex: 1 auto; 176.1392 + 176.1393 + white-space: nowrap; 176.1394 + overflow: hidden; 176.1395 + text-overflow: ellipsis; 176.1396 +} 176.1397 + 176.1398 +#afui .button-grouped.flex.vertical { 176.1399 + display: inline-block; 176.1400 +} 176.1401 + 176.1402 +#afui .button-grouped.vertical * { 176.1403 + border-radius:0px; 176.1404 + display:block; 176.1405 + float:none; 176.1406 + width:100%; 176.1407 + border-left: 1px solid #666; 176.1408 + border-right: 1px solid #666; 176.1409 + border-top: 1px solid #666; 176.1410 + border-bottom: 0px solid #666; 176.1411 +} 176.1412 + 176.1413 +#afui .button-grouped.vertical > .button:first-child { 176.1414 + border-top-left-radius: 6px; 176.1415 + border-top-right-radius: 6px; 176.1416 + border-bottom-left-radius:0px; 176.1417 + border-bottom-right-radius:0px; 176.1418 +} 176.1419 +#afui .button-grouped.vertical > .button:last-child { 176.1420 + border-top-right-radius:0px; 176.1421 + border-top-left-radius:0px; 176.1422 + border-bottom-right-radius: 6px; 176.1423 + border-bottom-left-radius: 6px; 176.1424 + border-bottom:1px solid #666; 176.1425 +} 176.1426 + 176.1427 + 176.1428 +#afui .button.gray { 176.1429 + background:#999; 176.1430 + border-color:#666; 176.1431 +} 176.1432 + 176.1433 +#afui .button.yellow { 176.1434 + background-color:#F1C222; 176.1435 + border-color:#999; 176.1436 +} 176.1437 + 176.1438 +#afui .button.red { 176.1439 + color:#fff; 176.1440 + text-shadow:0 -1px 0 #666; 176.1441 + background:#B20000; 176.1442 + border-color:#666; 176.1443 +} 176.1444 + 176.1445 +#afui .button.green { 176.1446 + color:#fff; 176.1447 + text-shadow:0 -1px 0 #666; 176.1448 + background:#009C0C; 176.1449 + border-color:#666; 176.1450 +} 176.1451 + 176.1452 +#afui .button.orange { 176.1453 + color:#fff; 176.1454 + text-shadow:0 -1px 0 #666; 176.1455 + background-color:#FF8000; 176.1456 + border-color:#666; 176.1457 +} 176.1458 + 176.1459 +#afui .button.black { 176.1460 + color:#fff; 176.1461 + text-shadow:none; 176.1462 + background:#000; 176.1463 + border-color:#666; 176.1464 +} 176.1465 + 176.1466 +#afui .button.slate { 176.1467 + color:#fff; 176.1468 + text-shadow:0 -1px 0 #000; 176.1469 + background:#171F28; 176.1470 + border-color:#666; 176.1471 +} 176.1472 + 176.1473 +#afui .header .button { 176.1474 + color: #fff; 176.1475 + background:none; 176.1476 + border-color: transparent; 176.1477 + font-size:12px; 176.1478 + padding:7px; 176.1479 + height:32px; 176.1480 + margin:5px; 176.1481 + text-overflow: ellipsis; 176.1482 + white-space: nowrap; 176.1483 +} 176.1484 + 176.1485 +.header .button.icon:before{ 176.1486 + padding-left:6px; 176.1487 +} 176.1488 + 176.1489 +#afui .backButton { 176.1490 + text-overflow: ellipsis; 176.1491 + white-space: nowrap; 176.1492 +} 176.1493 + 176.1494 +#afui .af-badge { 176.1495 + position:absolute; 176.1496 + top:2px; right:2px; 176.1497 + display:inline-block; 176.1498 + min-width:20px; max-width:90%; height:20px; 176.1499 + padding:0 3px; 176.1500 + background-color:red; 176.1501 + border-radius:20px; 176.1502 + 176.1503 + font-size:12px; 176.1504 + line-height:19px; 176.1505 + font-weight:bold; 176.1506 + 176.1507 + color:#fff; 176.1508 + text-overflow:ellipsis; 176.1509 + text-align:center; 176.1510 + text-shadow:0 -1px 0 rgba(64,0,0,.6); 176.1511 +} 176.1512 + 176.1513 +#afui .af-badge.br { bottom:2px; right:2px; top:auto; left:auto; } 176.1514 +#afui .af-badge.bl { bottom:2px; left:2px; top:auto; right:auto; } 176.1515 +#afui .af-badge.tl { top:2px; left:2px; right:auto; bottom:auto; } 176.1516 + 176.1517 + 176.1518 +#afui .grid { 176.1519 + width: 100%; 176.1520 + overflow:hidden; /* hack to take up height*/ 176.1521 +} 176.1522 +#afui .col2, 176.1523 +#afui .col3, 176.1524 +#afui .col1-3, 176.1525 +#afui .col2-3 { 176.1526 + float: none; 176.1527 + width: 100%; 176.1528 +} 176.1529 +#afui .grid:after { 176.1530 + content: ''; 176.1531 + clear: both; 176.1532 +} 176.1533 +@media handheld, only screen and (min-width: 768px) { 176.1534 + #afui .col2 { 176.1535 + width: 50%; 176.1536 + float: left; 176.1537 + } 176.1538 + #afui .col3 { 176.1539 + width: 33.3%; 176.1540 + float: left; 176.1541 + } 176.1542 + #afui .col1-3 { 176.1543 + width: 33.3%; 176.1544 + float: left; 176.1545 + } 176.1546 + #afui .col2-3 { 176.1547 + width: 66.6%; 176.1548 + float: left; 176.1549 + } 176.1550 +} 176.1551 +/* Bg #33B5E5 176.1552 + 176.1553 +/* Font header #C6C6C6 176.1554 + * reg white-space: 176.1555 + 176.1556 + border 303030 176.1557 + hover : #111 176.1558 + 176.1559 + */ 176.1560 + 176.1561 +#afui.android { 176.1562 + font:14px 'Roboto',sans-serif; 176.1563 + background:#000; 176.1564 + color:#fff; 176.1565 + border-color:#fff; 176.1566 +} 176.1567 + 176.1568 +#afui.android.light { 176.1569 + background:#FDFDFD; 176.1570 + color:#000; 176.1571 +} 176.1572 + 176.1573 +#afui.android .header { 176.1574 + background:inherit; 176.1575 + color:inherit; 176.1576 + border-color:#33B5E5; 176.1577 +} 176.1578 + 176.1579 +#afui.android .header .button { 176.1580 + color: inherit; 176.1581 + background:none; 176.1582 + font-size:14px; 176.1583 + box-shadow:none; 176.1584 +} 176.1585 + 176.1586 +#afui.android .backButton{ 176.1587 + background: inherit; 176.1588 + color:inherit; 176.1589 +} 176.1590 + 176.1591 +#afui.android .menuButton:after { 176.1592 + border-color:white; 176.1593 +} 176.1594 + 176.1595 +#afui.android.light .menuButton:after { 176.1596 + border-color:black; 176.1597 +} 176.1598 + 176.1599 +#afui.android .footer { 176.1600 + box-shadow: none; 176.1601 + background:inherit; 176.1602 + border-top:2px solid #33B5E5; 176.1603 + border-bottom:none; 176.1604 + padding:0; 176.1605 +} 176.1606 + 176.1607 +#afui.android .footer>footer>a:not(.button) { 176.1608 + color:inherit; 176.1609 + top:0px; 176.1610 +} 176.1611 + 176.1612 +#afui.android .footer>footer>a.pressed:not(.button) { 176.1613 + border:0px; 176.1614 + border-top:4px solid #33B5E5; 176.1615 + border-radius:0px; 176.1616 + background:none; 176.1617 +} 176.1618 + 176.1619 +#afui.android .footer>footer>a.icon.pressed:not(.button):before { 176.1620 + color:inherit; 176.1621 +} 176.1622 + 176.1623 +#afui.android .af-badge { 176.1624 + border:none; 176.1625 +} 176.1626 + 176.1627 +#afui.android .panel, #afui.android #modalContainer { 176.1628 + background:inherit; 176.1629 + color:inherit; 176.1630 +} 176.1631 + 176.1632 +#afui.android .list { 176.1633 + background:inherit; 176.1634 + color:inherit; 176.1635 + border-color:#303030; 176.1636 +} 176.1637 + 176.1638 +#afui.android .list .divider { color:black; } 176.1639 + 176.1640 +#afui.android .panel h2 { color:inherit; } 176.1641 + 176.1642 + 176.1643 +#afui.android .collapsed:after {border-top: 6px solid;} 176.1644 +#afui.android .collapsed:before {border:2px solid;} 176.1645 +#afui.android .expanded:after {border-bottom: 6px solid;} 176.1646 +#afui.android .expanded:before {border:2px solid;} 176.1647 + 176.1648 +#afui.android .collapsed:before,#afui.android .expanded:before { 176.1649 + border-color: inherit; 176.1650 +} 176.1651 + 176.1652 +#afui.android .collapsed:after, 176.1653 +#afui.android .expanded:after{ 176.1654 + border-top-color:inherit; 176.1655 + border-top-color:inherit; 176.1656 +} 176.1657 + 176.1658 +#afui.android .afScrollbar {background:white !important;} 176.1659 +#afui.android.light .afScrollbar {background:black !important;} 176.1660 + 176.1661 +#afui.android select, #afui.android textarea, #afui.android input[type="text"], 176.1662 +#afui.android input[type=search], #afui.android input[type="password"], 176.1663 +#afui.android input[type="datetime"], #afui.android input[type="datetime-local"], 176.1664 +#afui.android input[type="date"], #afui.android input[type="month"], 176.1665 +#afui.android input[type="time"], #afui.android input[type="week"], 176.1666 +#afui.android input[type="number"], #afui.android input[type="email"], 176.1667 +#afui.android input[type="url"], #afui.android input[type="tel"], 176.1668 +#afui.android input[type="color"], #afui.android .input-group { 176.1669 + background:inherit; 176.1670 + color:inherit; 176.1671 +} 176.1672 + 176.1673 +#afui.android input[type="range"] { 176.1674 + -webkit-appearance: none; 176.1675 +background-color: #ccc; 176.1676 +height: 4px; 176.1677 +position: relative; 176.1678 +top: -10px; 176.1679 +margin-top: 15px; 176.1680 +} 176.1681 + 176.1682 +#afui.android input[type="range"]::-webkit-slider-thumb { 176.1683 + -webkit-appearance: none; 176.1684 + position: relative; 176.1685 + 176.1686 + z-index: 1; 176.1687 + width: 11px; 176.1688 + height: 21px; 176.1689 + 176.1690 + -webkit-border-radius: 0; 176.1691 + -moz-border-radius: 0; 176.1692 + border-radius: 0; 176.1693 + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc)); 176.1694 + background-image: gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc)); 176.1695 +} 176.1696 + 176.1697 +#afui.android input.toggle+label:after { color:inherit; } 176.1698 + 176.1699 +#afui.android input.toggle+label { border-radius:0; } 176.1700 + 176.1701 +#afui.android input.toggle+label > span { 176.1702 + border-radius:0; 176.1703 + top:0; 176.1704 + width:27px; 176.1705 + height:23px; 176.1706 +} 176.1707 + 176.1708 +#afui.android label { color:inherit; } 176.1709 + 176.1710 +#afui.android input[type="radio"]:checked+label:before,#afui.android input[type="checkbox"]:checked+label:before { 176.1711 + background: #33B5E5; 176.1712 +} 176.1713 + 176.1714 +#afui.android > #aside_menu, 176.1715 +#afui.android > #menu { 176.1716 + border-right:1px solid rgba(128,128,128,0.5); 176.1717 + color:inherit; 176.1718 + background:inherit; 176.1719 +} 176.1720 + 176.1721 +#afui.android #aside_menu .list li, 176.1722 +#afui.android #menu .list li { 176.1723 + box-shadow:none; 176.1724 + border-color:#ccc; 176.1725 +} 176.1726 + 176.1727 +#afui.android #aside_menu .list .divider, 176.1728 +#afui.android #menu .list .divider { 176.1729 + background:inherit; 176.1730 + color:inherit; 176.1731 + font-size: 1em; 176.1732 +} 176.1733 + 176.1734 +#afui.android #aside_menu .list > li > a, 176.1735 +#afui.android #menu .list > li > a { 176.1736 + background:inherit; 176.1737 + color:inherit; 176.1738 + font-size: 1em; 176.1739 +} 176.1740 + 176.1741 +#afui.android #aside_menu .list, 176.1742 +#afui.android #menu .list { 176.1743 + font-weight: normal; 176.1744 +} 176.1745 + 176.1746 +#afui.android .button { 176.1747 + border-radius:0; 176.1748 + border:none; 176.1749 + background:#424343; 176.1750 + border-color:transparent; 176.1751 + color:inherit; 176.1752 + text-shadow:none; 176.1753 + box-shadow: inset 0 1px 0 rgba(255,255,255,.4); 176.1754 +} 176.1755 + 176.1756 +#afui.android.light .button { 176.1757 + background:#eee; 176.1758 + border-color:#D1D1D1; 176.1759 +} 176.1760 + 176.1761 +#afui.android .button.pressed, 176.1762 +#afui.android .header .button-grouped > .button.pressed { 176.1763 + background:#33B5E5; 176.1764 + border-color:#33B5E5; 176.1765 +} 176.1766 + 176.1767 +#afui.android .button.previous::after { 176.1768 + width:20px; height:20px; 176.1769 + background-color:inherit; 176.1770 + top:5px; left:-12px; 176.1771 + border-radius:0; 176.1772 + box-shadow:none; 176.1773 + border-color:transparent; 176.1774 +} 176.1775 + 176.1776 +#afui.android .button.next::after { 176.1777 + width:20px; height:20px; 176.1778 + background-color:inherit; 176.1779 + top:5px; right:-12px; 176.1780 + border-radius:0; 176.1781 + box-shadow:none; 176.1782 + border-color:transparent; 176.1783 +} 176.1784 + 176.1785 +#afui.android .header .button-grouped > .button { 176.1786 + border-color:#777; 176.1787 +} 176.1788 + 176.1789 +#afui.android .button-grouped * { 176.1790 + border:1px solid rgba(255,255,255,.25); 176.1791 + border-left-width:0; 176.1792 + box-shadow:none; 176.1793 +} 176.1794 + 176.1795 +#afui.android .button-grouped.vertical * { 176.1796 + border-left:1px solid rgba(255,255,255,.25); 176.1797 + border-bottom-width:0; 176.1798 +} 176.1799 + 176.1800 +#afui.android .button-grouped.vertical .button:last-child { 176.1801 + border-bottom:1px solid rgba(255,255,255,.25); 176.1802 +} 176.1803 + 176.1804 +#afui.android .afPopup { 176.1805 + border: solid 1px #aaa; 176.1806 + padding: 0; 176.1807 + -webkit-border-radius: 0; 176.1808 + border-radius: 0; 176.1809 + -webkit-transform:none; 176.1810 + transform:none; 176.1811 + -webkit-transition: none; 176.1812 + transition:none; 176.1813 + background:inherit; 176.1814 + background-color:rgba(0,0,0,0.9); 176.1815 + color:inherit; 176.1816 +} 176.1817 + 176.1818 +#afui.android.light .afPopup { 176.1819 + background-color:rgba(255,255,255,0.9); 176.1820 +} 176.1821 + 176.1822 +#afui.android .afPopup>HEADER{ 176.1823 + font-weight:normal; 176.1824 + font-size:20px; 176.1825 + text-align:left; 176.1826 + padding:10px; 176.1827 +} 176.1828 + 176.1829 +#afui.android .afPopup>DIV{ 176.1830 + font-size:14px; 176.1831 + text-align:left; 176.1832 + padding:10px; 176.1833 + margin:0; 176.1834 + border-top: solid 1px #aaa; 176.1835 + border-bottom: solid 1px #aaa; 176.1836 +} 176.1837 + 176.1838 +#afui.android .afPopup>FOOTER { 176.1839 + background:#bbb; 176.1840 +} 176.1841 + 176.1842 +#afui.android .afPopup>FOOTER>A, #afui.android.light .afPopup>FOOTER>A { 176.1843 + background:#fff; 176.1844 + color:#111; 176.1845 +} 176.1846 + 176.1847 +#afui.android .afPopup>FOOTER>A#cancel{ 176.1848 + margin-left:10px; 176.1849 + width:120px; 176.1850 +} 176.1851 + 176.1852 +#afui.android .afPopup>FOOTER>A#action{ 176.1853 + margin-right:10px; 176.1854 + width:120px; 176.1855 +} 176.1856 + 176.1857 +#afui.android .afPopup>FOOTER>A.center{ 176.1858 + margin:8px; 176.1859 +} 176.1860 + 176.1861 +#afui.android #af_actionsheet { 176.1862 + border: #666 1px solid; 176.1863 + border-top: #33B5E5 3px solid; 176.1864 + background:#555; 176.1865 + color:inherit; 176.1866 + margin:-20px 20px 0 20px; 176.1867 + padding:0px; 176.1868 +} 176.1869 + 176.1870 +#afui.android.light #af_actionsheet { 176.1871 + border: #bbb 1px solid; 176.1872 + border-top: #33B5E5 3px solid; 176.1873 + background:#bbb; 176.1874 +} 176.1875 + 176.1876 +#afui.android #af_actionsheet a{ 176.1877 + border-radius:0; 176.1878 + -webkit-border-radius:0; 176.1879 + border:0px solid #777; 176.1880 + background:#424343; 176.1881 + color:inherit; 176.1882 + line-height: 50px; 176.1883 + margin-bottom: 1px; 176.1884 +} 176.1885 + 176.1886 +#afui.android.light #af_actionsheet a{ 176.1887 + background:#fff; 176.1888 +} 176.1889 + 176.1890 +#afui.android #af_actionsheet a.cancel{ 176.1891 + margin-bottom: 0px; 176.1892 +} 176.1893 + 176.1894 +/* Bg #00ABA9 176.1895 + 176.1896 +/* Font header #C6C6C6 176.1897 + * reg white-space: 176.1898 + 176.1899 + border 303030 176.1900 + hover : #111 176.1901 + 176.1902 + */ 176.1903 +@-ms-viewport{ 176.1904 + width: device-width; 176.1905 +} 176.1906 +@font-face { 176.1907 + font-family: 'win8back'; 176.1908 + src: url(data:application/x-font-woff;charset=utf-8;base64,d09GRk9UVE8AAARUAAsAAAAABmgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAAS4AAAGZpdvO1kZGVE0AAAI4AAAAGgAAABxnmGDwR0RFRgAAAlQAAAAdAAAAIAAwAARPUy8yAAACdAAAAEsAAABgL9zcQGNtYXAAAALAAAAAOgAAAVLgE/LMaGVhZAAAAvwAAAAuAAAANvx5/t1oaGVhAAADLAAAAB4AAAAkBBD/5GhtdHgAAANMAAAADAAAAAwEAAACbWF4cAAAA1gAAAAGAAAABgADUABuYW1lAAADYAAAAOgAAAGPgxEkPHBvc3QAAARIAAAADAAAACAAAwAAeJxtTj1PAkEUnD0WQbwAEomYnEdlDxbGQu0Ua+2sULFAEhIEY0WiNJisITE5G2lo6Iw1/gULKxMTSypLCz+2UMe7A6+ymTczb2bfCkgJIcTkSbm6vLe7X4EwILCm5w1th3RGKjOkTGnHMLedolIBMSOqoh3dCFtoJSwgaaE9bSFqicsUpPdGFAnMIntcLa/ncjl3bLjj70xwDhBtcY6Q1zDwIRD/dPRRmrgo3BK1wRbZcRnrHqsH8h/PD49qQTfwsvyxTyGJZt8mDp6HY/Bls18krxf8RY9s7Qw96HlecQy+9BajiB92a1nyceWGYuL7zf3yw5RB3oWeyPz72QRxeL9KXi1Jstt9UWRtkCQ6m3kXCq8eWyRKpYwKx5VuyC9HO5G4dmZUWpmxXzJhtKEAAHicY2BgYGQAgjO2i86D6LNr4wVgNABJKQZOAAB4nGNgZGBg4ANiCQYQYGJgBEIQyQLmMQAABGAANQAAAHicY2BmYmCcwMDKwMHow5jGwMDgDqW/MkgytDAwMDGwMjPAgQCCyRCQ5prC4PCA4QMD44P/Dxj0GB8wKDQwMDDCFSgAISMAEEIMHwB4nGNgYGBmgGAZBkYGEPAB8hjBfBYGAyDNAYRMIIkHDB8Y/v9HZikwCjBBdYEBIxsDMndEAgDJXAiuAAB4nGNgZGBgAGK+Bx4V8fw2Xxm4mRhA4OzaeAEE/f8BEwPjAyCXgwEsDQAU3gn7AAB4nGNgZGBgfPD/AYMeEwMDwz8GIAkUQQHMAG3nA/YAAAIAAAACAAACAAAAAAAAUAAAAwAAeJx9jjFOw0AQRZ8TJ4BACFHQ0KxEiWzZRomiHMAHSJHeiVaWRWRLm0QpuActZ6DlGByAM3AEvsPQUGSl0b79+2fmA1e8EtGfiHNujQec8Wg85IEX41ied+MRl3waj6V/yxnFF1Jujl09D7jm3nhIyZNxLM+b8Yg7PozH0r840NAyY0XFmmc4NO1sVa1FCzw1ezb6Cnr6er+pBCWdWnbHO8jhcRSkZLrnqv8jf9UpCRNVIV+ucJRduyu7UHtXpJmbu7/FwmkySYosl+lEvKUWB7Yy9HGchvYRWPqwbbrW5Wl2qv0H0Z06yHicY2BmwAsAAH0ABA==) format('woff'), 176.1909 + url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTWeYYPAAAAWMAAAAHEdERUYAMgAGAAAFbAAAACBPUy8yL7rcHwAAAVgAAABWY21hcOAV89MAAAHEAAABUmdhc3D//wADAAAFZAAAAAhnbHlmEDC/5gAAAyQAAAB0aGVhZPx5/t0AAADcAAAANmhoZWEEEP/mAAABFAAAACRobXR4BKoAAgAAAbAAAAAUbG9jYQAsADoAAAMYAAAADG1heHAASgAcAAABOAAAACBuYW1lgxEkPAAAA5gAAAGPcG9zdJtVPjcAAAUoAAAAPAABAAAAAQAAWPDPKV8PPPUACwIAAAAAAM2tXxAAAAAAza1fEAAA/+ACAAHgAAAACAACAAAAAAAAAAEAAAHg/+AALgIAAAD+AAIAAAEAAAAAAAAAAAAAAAAAAAAFAAEAAAAFABkAAwAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAQIAAZAABQAIAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAIABQMAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUGZFZABA4ADwAAHg/+AALgHgACCAAAABAAAAAAAAAgAAAAAAAAAAqgAAAgAAAgAAAAAAAAADAAAAAwAAABwAAQAAAAAATAADAAEAAAAcAAQAMAAAAAgACAACAAAAAOAA8AD//wAAAADgAPAA//8AACADEAQAAQAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAA6AAMAAv/iAf4B3gAHAA8AGAAAACIGFBYyNjQCIiY0NjIWFCU3IwcXMyczNQFp0pWV0pWgvIaGvIb+8Gtkj49ka84B3pXSlZXS/rOGvIaGvIFrjo5rRgAAAAABAAD/4AIAAeAAAgAAEQEhAgD+AAHg/gAAAAAAAAAMAJYAAQAAAAAAAQAIABIAAQAAAAAAAgAHACsAAQAAAAAAAwAjAHsAAQAAAAAABAAIALEAAQAAAAAABQALANIAAQAAAAAABgAIAPAAAwABBAkAAQAQAAAAAwABBAkAAgAOABsAAwABBAkAAwBGADMAAwABBAkABAAQAJ8AAwABBAkABQAWALoAAwABBAkABgAQAN4AdwBpAG4AOABiAGEAYwBrAAB3aW44YmFjawAAUgBlAGcAdQBsAGEAcgAAUmVndWxhcgAARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIAB3AGkAbgA4AGIAYQBjAGsAIAA6ACAANgAtADUALQAyADAAMQAzAABGb250Rm9yZ2UgMi4wIDogd2luOGJhY2sgOiA2LTUtMjAxMwAAdwBpAG4AOABiAGEAYwBrAAB3aW44YmFjawAAVgBlAHIAcwBpAG8AbgAgADEALgAwAABWZXJzaW9uIDEuMAAAdwBpAG4AOABiAGEAYwBrAAB3aW44YmFjawAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAEAAgECAQMHdW5pRTAwMAd1bmlGMDAwAAAAAf//AAIAAQAAAA4AAAAYAAAAAAACAAEAAwAEAAEABAAAAAIAAAAAAAEAAAAAzD2izwAAAADNrV8QAAAAAM2tXxA=) format('truetype'); 176.1910 + font-weight: normal; 176.1911 + font-style: normal; 176.1912 +} 176.1913 + 176.1914 + 176.1915 +#afui.win8 { 176.1916 + font:14px "Segoe UI Semilight", "HelveticaNeue-light", Helvetica, Arial, sans-serif; 176.1917 + font-size:14px; 176.1918 + background-color:#000; 176.1919 + color:#fff; 176.1920 +} 176.1921 + 176.1922 +#afui.win8.light { 176.1923 + background:#fff; 176.1924 + color:#000; 176.1925 +} 176.1926 + 176.1927 +#afui.win8 .header .button { 176.1928 + color: inherit; 176.1929 + border-color:transparent; 176.1930 + font-size:14px; 176.1931 +} 176.1932 + 176.1933 + 176.1934 + 176.1935 +#afui.win8 .backButton.pressed { 176.1936 + background:inherit; 176.1937 +} 176.1938 + 176.1939 +#afui.win8 .backButton { 176.1940 + color:inherit; 176.1941 + background:inherit; 176.1942 + margin:0; 176.1943 + font-family: 'win8back'; 176.1944 + width:0px; 176.1945 + height:0px; 176.1946 + font-style: normal; 176.1947 + font-weight: normal; 176.1948 + font-variant: normal; 176.1949 + text-transform: none; 176.1950 + line-height: 1; 176.1951 + padding:0px; 176.1952 + margin:0px; 176.1953 + border:none; 176.1954 + position:absolute; 176.1955 + left:-185px; 176.1956 + -webkit-font-smoothing: antialiased; 176.1957 +} 176.1958 + 176.1959 +#afui.win8 .backButton::before { 176.1960 + content: "\e000"; 176.1961 + font-size:30px; 176.1962 + position:absolute; 176.1963 + top:10px; 176.1964 + right:-225px; 176.1965 + left:auto; 176.1966 + color:inherit; 176.1967 + font-family:inherit; 176.1968 + -webkit-transform:none; 176.1969 + transform:none; 176.1970 +} 176.1971 + 176.1972 +#afui.win8 .header h1 { 176.1973 + text-align: left; 176.1974 + color:inherit; 176.1975 +} 176.1976 + 176.1977 +#afui.win8 .header{ 176.1978 + border:0px; 176.1979 + background: inherit; 176.1980 + border-bottom:inherit; 176.1981 + color:inherit; 176.1982 +} 176.1983 + 176.1984 +#afui.win8 .footer { 176.1985 + padding:0px; 176.1986 + background:inherit; 176.1987 + text-align: center; 176.1988 + height:65px; 176.1989 + background:rgba(33,32,33,.9); 176.1990 + border-top:none; 176.1991 +} 176.1992 + 176.1993 +#afui.win8.light .footer{ 176.1994 + background:#F2F2F2; 176.1995 + color:black; 176.1996 +} 176.1997 + 176.1998 +#afui.win8 .footer>footer>a:not(.button) { 176.1999 + position: relative; 176.2000 + width: 56px !important; 176.2001 + height: 56px; 176.2002 + display: inline-block; 176.2003 + font: normal 9px/85px Segoe WP, Segoe UI, Verdana, Helvetica, Sans-Serif; 176.2004 + text-decoration: none; 176.2005 + color: inherit; 176.2006 + text-align: center; 176.2007 + text-shadow: 0 0 rgba(0, 0, 0, 0); 176.2008 + overflow: hidden; 176.2009 + background:inherit; 176.2010 + -webkit-backface-visibility: hidden; 176.2011 + -webkit-perspective: 1000; 176.2012 +} 176.2013 + 176.2014 +#afui.win8.light .footer>footer>a:not(.button) { 176.2015 + text-shadow: 0 0 rgba(0, 0, 0, 0); 176.2016 +} 176.2017 + 176.2018 +#afui.win8 .footer>footer>a.icon.pressed:not(.button):before { 176.2019 + background-color: #00ABA9; 176.2020 +} 176.2021 + 176.2022 +#afui.win8 .footer>footer>a.icon:not(.button):before { 176.2023 + top: 0px; 176.2024 + left: 10px; 176.2025 + font-size:19px; 176.2026 + width:auto; 176.2027 + padding: 5px; 176.2028 + border: 3px solid #fff; 176.2029 + border-radius: 20px; 176.2030 +} 176.2031 + 176.2032 +#afui.win8.light .footer>footer>a.icon:not(.button):before { 176.2033 + border: 3px solid #000; 176.2034 +} 176.2035 + 176.2036 +#afui.win8 .footer>footer>a:not(:last-of-type):not(.button){ 176.2037 + border:none; 176.2038 +} 176.2039 + 176.2040 +#afui.win8 .af-badge { 176.2041 + border:none; 176.2042 +} 176.2043 + 176.2044 +#afui.win8 #content,#afui.win8 #content > .panel { 176.2045 + background:inherit; 176.2046 + color:inherit; 176.2047 +} 176.2048 + 176.2049 +#afui.win8 .list { 176.2050 + background:inherit; 176.2051 + color:inherit; 176.2052 + border-color:#303030; 176.2053 +} 176.2054 + 176.2055 +#afui.win8 .list .divider, #afui.win8 #menu.tabletMenu .list .divider { 176.2056 + background:#00ABA9; 176.2057 + padding:5px; 176.2058 + display:inline; 176.2059 + font-size:16px; 176.2060 + font-weight:normal; 176.2061 + border-top:none; 176.2062 + border-bottom:none; 176.2063 + color:inherit; 176.2064 +} 176.2065 + 176.2066 +#afui.win8 .list li { 176.2067 + border-top:none; 176.2068 + border-bottom:none; 176.2069 + font-size:20px; 176.2070 +} 176.2071 + 176.2072 +#afui.win8 .panel h2 { 176.2073 + color:inherit; 176.2074 + font-weight:normal; 176.2075 + font-size:34px; 176.2076 + line-height:34px; 176.2077 + height:auto; 176.2078 +} 176.2079 + 176.2080 +#afui.win8 .collapsed:after {border-top: 6px solid;} 176.2081 +#afui.win8 .collapsed:before {border:2px solid;} 176.2082 +#afui.win8 .expanded:after {border-bottom: 6px solid;} 176.2083 +#afui.win8 .expanded:before {border:2px solid;} 176.2084 + 176.2085 +#afui.win8 .collapsed:before,#afui.win8 .expanded:before { 176.2086 + border-color: inherit; 176.2087 +} 176.2088 + 176.2089 +#afui.win8 .collapsed:after, 176.2090 +#afui.win8 .expanded:after{ 176.2091 + border-top-color:inherit; 176.2092 + border-top-color:inherit; 176.2093 +} 176.2094 + 176.2095 +#afui.win8 .afScrollbar {background:white !important;} 176.2096 +#afui.win8.light .afScrollbar {background:black !important;} 176.2097 + 176.2098 +#afui.win8 select, #afui.win8 textarea, #afui.win8 input[type="text"], #afui.win8 input[type="search"], #afui.win8 input[type="password"], #afui.win8 input[type="datetime"], #afui.win8 input[type="datetime-local"], #afui.win8 input[type="date"], #afui.win8 input[type="month"], #afui.win8 input[type="time"], #afui.win8 input[type="week"], #afui.win8 input[type="number"], #afui.win8 input[type="email"], #afui.win8 input[type="url"], #afui.win8 input[type="tel"], #afui.win8 input[type="color"], #afui.win8 .input-group { 176.2099 + background:black; 176.2100 + color:inherit; 176.2101 +} 176.2102 + 176.2103 +#afui.win8.light select, #afui.win8.light textarea, #afui.win8.light input[type="text"], #afui.win8.light input[type="search"], #afui.win8.light input[type="password"], #afui.win8.light input[type="datetime"], #afui.win8.light input[type="datetime-local"], #afui.win8.light input[type="date"], #afui.win8.light input[type="month"], #afui.win8.light input[type="time"], #afui.win8.light input[type="week"], #afui.win8.light input[type="number"], #afui.win8.light input[type="email"], #afui.win8.light input[type="url"], #afui.win8.light input[type="tel"], #afui.win8.light input[type="color"], #afui.win8.light .input-group { 176.2104 + background:white; 176.2105 +} 176.2106 + 176.2107 +#afui.win8 input.toggle+label:after { 176.2108 + color:inherit; 176.2109 +} 176.2110 + 176.2111 +#afui.win8 input.toggle+label { 176.2112 + border-radius:0; 176.2113 +} 176.2114 + 176.2115 +#afui.win8 input.toggle:checked+label { 176.2116 + background:#00ABA9; 176.2117 +} 176.2118 + 176.2119 +#afui.win8 input.toggle+label > span { 176.2120 + border-radius:0; 176.2121 + top:0; 176.2122 + width:27px; 176.2123 + height:23px; 176.2124 +} 176.2125 + 176.2126 +#afui.win8 input[type="radio"]:checked+label:before,#afui.win8 input[type="checkbox"]:checked+label:before { 176.2127 + background: #00ABA9; 176.2128 +} 176.2129 + 176.2130 +#afui.win8 > #menu { 176.2131 + border-right:1px solid rgba(128,128,128,0.5); 176.2132 + color:inherit; 176.2133 + background:inherit; 176.2134 +} 176.2135 + 176.2136 +#afui.win8 > #aside_menu { 176.2137 + border-left:1px solid rgba(128,128,128,0.5); 176.2138 + color:inherit; 176.2139 + background:inherit; 176.2140 + border-right:0; 176.2141 +} 176.2142 + 176.2143 +#afui.win8 #menu .list .divider { 176.2144 + padding:4px; 176.2145 + line-height:30px; 176.2146 + margin-left:10px; 176.2147 +} 176.2148 + 176.2149 +#afui.win8 #menu .list { 176.2150 + font-weight: normal; 176.2151 +} 176.2152 + 176.2153 +#afui.win8 #menu .list li,#afui.win8 #menu .list .divider { 176.2154 + box-shadow:none; 176.2155 +} 176.2156 + 176.2157 +#afui.win8 .button { 176.2158 + border-radius:0; 176.2159 + border:none; 176.2160 + background:inherit; 176.2161 + border:3px solid #fff; 176.2162 + color:inherit; 176.2163 + text-shadow:none; 176.2164 + box-shadow:none; 176.2165 +} 176.2166 + 176.2167 +#afui.win8.light .button { 176.2168 + border:3px solid #000; 176.2169 +} 176.2170 + 176.2171 +#afui.win8 .button.pressed { 176.2172 + background:#00ABA9; 176.2173 +} 176.2174 + 176.2175 +#afui.win8 .button.next, #afui.win8 .button.previous { 176.2176 + border-color: #fff !important; 176.2177 +} 176.2178 +#afui.win8 .button.next::after, #afui.win8 .button.previous::after{ 176.2179 + border:none; 176.2180 +} 176.2181 + 176.2182 +#afui.win8 .button-grouped > .button{ 176.2183 + border:3px solid #fff; 176.2184 + border-right:0; 176.2185 +} 176.2186 + 176.2187 +#afui.win8 .button-grouped > .button:last-child { 176.2188 + border-right:3px solid #fff; 176.2189 +} 176.2190 + 176.2191 +#afui.win8 .button-grouped > .button:first-child, 176.2192 +#afui.win8 .button-grouped > .button:last-child { 176.2193 + border-radius:0; 176.2194 +} 176.2195 + 176.2196 +#afui.win8 .button-grouped.vertical >.button{ 176.2197 + border:3px solid #fff; 176.2198 + border-bottom:0; 176.2199 +} 176.2200 + 176.2201 +#afui.win8 .button-grouped.vertical > .button:last-child { 176.2202 + border-bottom:3px solid #fff; 176.2203 +} 176.2204 + 176.2205 +#afui.win8 .header .button-grouped > .button{ 176.2206 + border-color: #fff; 176.2207 +} 176.2208 + 176.2209 +#afui.win8 .header .button-grouped > .button.pressed{ 176.2210 + background:#00ABA9; 176.2211 +} 176.2212 + 176.2213 +#afui.win8.light .button-grouped > .button, 176.2214 +#afui.win8.light .button-grouped.vertical > .button, 176.2215 +#afui.win8.light .header .button-grouped > .button{ 176.2216 + border-color: #111; 176.2217 +} 176.2218 + 176.2219 +/** 176.2220 + * code specific to WP8 176.2221 + */ 176.2222 +@media handheld, only screen and (max-width: 768px){ 176.2223 + #afui.win8 #menu { 176.2224 + display: none; 176.2225 + position: absolute; 176.2226 + left: 0; 176.2227 + bottom: 0; 176.2228 + z-index: 1000; 176.2229 + width:100%; 176.2230 + height: 150px; 176.2231 + font-size:20px; 176.2232 + top:auto; 176.2233 + background:inherit; 176.2234 + color:inherit; 176.2235 + -webkit-transition-timing-function: linear; 176.2236 + transition-timing-function: linear; 176.2237 + -webkit-transform:translate3d(0,150px,0); 176.2238 + transform:translate3d(0,150px,0); 176.2239 + } 176.2240 + #afui.win8 .hasMenu,#afui.win8 .hasMenu.on{ 176.2241 + 176.2242 + -webkit-transform:translate3d(0,0,0); 176.2243 + transform:translate3d(0,0,0); 176.2244 + } 176.2245 + #afui.win8 .header #menubadge { 176.2246 + display:none; 176.2247 + } 176.2248 +} 176.2249 + 176.2250 +#afui.win8 .afPopup { 176.2251 + width: 100%; 176.2252 + border: solid 0px #72767b; 176.2253 + left:0px !important; 176.2254 + -webkit-border-radius: 0; 176.2255 + border-radius: 0; 176.2256 + -webkit-transform:none; 176.2257 + transform:none; 176.2258 + -webkit-transition: none; 176.2259 + transition:none; 176.2260 + top: 0 !important; 176.2261 + background:#222; 176.2262 + color:inherit; 176.2263 + padding:15px; 176.2264 +} 176.2265 + 176.2266 +#afui.win8.light .afPopup { 176.2267 + background:#eee; 176.2268 +} 176.2269 + 176.2270 +#afui.win8 .afPopup>HEADER{ 176.2271 + font-size:20px; 176.2272 +} 176.2273 + 176.2274 +#afui.win8 .afPopup>DIV{ 176.2275 + font-size:16px; 176.2276 + padding:10px 0; 176.2277 + margin:0; 176.2278 +} 176.2279 + 176.2280 +#afui.win8 .afPopup>FOOTER{ 176.2281 + width:100%; 176.2282 + text-align:left; 176.2283 + display:block !important; 176.2284 +} 176.2285 + 176.2286 +#afui.win8 .afPopup>FOOTER>A#cancel{ 176.2287 + float:left; 176.2288 + min-width:100px; 176.2289 +} 176.2290 + 176.2291 +#afui.win8 .afPopup>FOOTER>A#action{ 176.2292 + float:left; 176.2293 + min-width:100px; 176.2294 + margin-left:10px; 176.2295 +} 176.2296 + 176.2297 +#afui.win8 .afPopup>FOOTER>A.center{ 176.2298 + width:auto; 176.2299 +} 176.2300 + 176.2301 +#afui.win8 #af_actionsheet { 176.2302 + background:#aaa; 176.2303 + color:black; 176.2304 +} 176.2305 + 176.2306 +#afui.win8 #af_actionsheet a{ 176.2307 + border-radius:0; 176.2308 + -webkit-border-radius:0; 176.2309 + border:0px solid black; 176.2310 + background-color:transparent; 176.2311 + font-weight:normal; 176.2312 + color:black; 176.2313 + box-shadow: 0px 1px 1px rgba(255,255,255,0); 176.2314 +} 176.2315 + 176.2316 +#afui.win8 #menu .list > li > a { 176.2317 + color:inherit; 176.2318 +} 176.2319 + 176.2320 +@media handheld, only screen and (min-width: 768px){ 176.2321 + 176.2322 + #afui.win8 .footer footer #metroMenu { 176.2323 + display:none; 176.2324 + } 176.2325 + #afui.win8 .footer { 176.2326 + -webkit-transform:translate3d(0,0,0); 176.2327 + transform:translate(0,0); 176.2328 + } 176.2329 + #afui.win8 #menu { 176.2330 + background:inherit; 176.2331 + color:inherit; 176.2332 + font-size:18px; 176.2333 + left:0; 176.2334 + top:0; 176.2335 + width:200px; 176.2336 + } 176.2337 + #afui.win8 #menu .list > li > a:after{ 176.2338 + margin-top:-11px; 176.2339 + } 176.2340 +} 176.2341 + 176.2342 + 176.2343 +#afui.win8 input[type="range"] { 176.2344 + -webkit-appearance: none; 176.2345 + -webkit-appearance: none; 176.2346 +background-color: #ccc; 176.2347 +height: 4px; 176.2348 +position: relative; 176.2349 +top: -10px; 176.2350 +margin-top: 15px; 176.2351 + 176.2352 +} 176.2353 + 176.2354 +#afui.win8 input[type="range"]::-webkit-slider-thumb { 176.2355 + -webkit-appearance: none; 176.2356 + position: relative; 176.2357 + z-index: 1; 176.2358 + width: 15px; 176.2359 + height: 15px; 176.2360 + 176.2361 + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc)); 176.2362 + background-image: gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc)); 176.2363 +} 176.2364 + 176.2365 +#afui.bb { 176.2366 + font-family: "Slate Pro",Slate,"Myriad Pro","BBAlpha Sans",Helvetica; 176.2367 + font-size: 12pt; 176.2368 +} 176.2369 + 176.2370 +#afui.bb .header { 176.2371 + background:#00609E; 176.2372 + background:-ms-linear-gradient(65deg, #00609E 0%,#00AFEE 100%); 176.2373 + background:-webkit-gradient(linear, left bottom, right top, color-stop(0%,#00609E), color-stop(100%,#00AFEE)); 176.2374 + background:-webkit-linear-gradient(65deg, #00609E 0%,#00AFEE 100%); 176.2375 + background:linear-gradient(65deg, #00609E 0%,#00AFEE 100%); 176.2376 + border-style:solid; 176.2377 + border-width:1px; 176.2378 + border-color:#009CE1 transparent #004E92 transparent; 176.2379 +} 176.2380 + 176.2381 +#afui.bb .header h1 { 176.2382 + text-shadow:rgba(0,0,0,0.8) 0 1px 0; 176.2383 + font-weight:normal; 176.2384 +} 176.2385 + 176.2386 +#afui.bb .list { 176.2387 + font-weight: normal; 176.2388 +} 176.2389 + 176.2390 +#afui.bb .backButton { 176.2391 + display: block; 176.2392 + position: absolute; 176.2393 + line-height:60px; 176.2394 + left: 5px; 176.2395 + text-overflow: ellipsis; 176.2396 + font-size: 10px; 176.2397 + padding: 0; 176.2398 + color: #fff; 176.2399 + text-shadow: none; 176.2400 + background-color: transparent; 176.2401 + border:none; 176.2402 + border-color: transparent; 176.2403 + height: 44px; 176.2404 + top:0; 176.2405 + border-radius: 0; 176.2406 + box-shadow:none; 176.2407 + margin: 0; 176.2408 + padding-left: 0; 176.2409 + text-align: center; 176.2410 + width:50px; 176.2411 + padding:0 !important; 176.2412 + margin:0 !important; 176.2413 +} 176.2414 + 176.2415 +#afui.bb .backButton::before { 176.2416 + z-index: -1; 176.2417 + font-size:22px; 176.2418 + position: absolute; 176.2419 + top: -15px; 176.2420 + left: 15px; 176.2421 + text-align: center; 176.2422 + border-radius: 0; 176.2423 + border: none; 176.2424 + border-color: transparent; 176.2425 + box-shadow: none; 176.2426 + -webkit-transform: none; 176.2427 + transform: none; 176.2428 + font-family: 'chevron'; 176.2429 + speak: none; 176.2430 + font-style: normal; 176.2431 + font-weight: normal; 176.2432 + font-variant: normal; 176.2433 + text-transform: none; 176.2434 + line-height: 1; 176.2435 + -webkit-font-smoothing: antialiased; 176.2436 + content: "\f054"; 176.2437 + top:1px; 176.2438 + -webkit-transform:rotate(180deg); 176.2439 + transform:rotate(180deg); 176.2440 + background-color: transparent; 176.2441 +} 176.2442 + 176.2443 +#afui.bb .backButton::after { 176.2444 + z-index: -1; 176.2445 + font-size:24px; 176.2446 + content: ' '; 176.2447 + position: absolute; 176.2448 + font-weight:bold; 176.2449 + background-color: transparent; 176.2450 + left:55px; 176.2451 + height:48px; 176.2452 + top:-5px; 176.2453 + width:2px; 176.2454 + background: #0aa9dc; 176.2455 + margin:auto; 176.2456 + text-align: center; 176.2457 + border-radius: 0; 176.2458 + border: none; 176.2459 + border-color: transparent; 176.2460 + box-shadow: none; 176.2461 + -webkit-transform: rotate(10deg); 176.2462 + transform: rotate(10deg); 176.2463 +} 176.2464 + 176.2465 +#afui.bb .header .button { 176.2466 + color:#fff; 176.2467 + background:none; 176.2468 + text-shadow:0 -1px 0 #333; 176.2469 + border-color:transparent; 176.2470 +} 176.2471 + 176.2472 +#afui.bb .footer { 176.2473 + border:none; 176.2474 + border-radius:0px; 176.2475 + background:none; 176.2476 + padding:0; 176.2477 + -webkit-box-shadow:none; 176.2478 + box-shadow: none; 176.2479 +} 176.2480 + 176.2481 +#afui.bb .footer>footer>a:not(.button) { 176.2482 + height:49px; 176.2483 + top:0px; 176.2484 + border-top:4px solid #000; 176.2485 + background:#1e1e1e; 176.2486 +} 176.2487 + 176.2488 +#afui.bb .footer>footer>a.pressed:not(.button) { 176.2489 + border:0px; 176.2490 + border-top:4px solid #0aa9dc; 176.2491 + border-radius:0px; 176.2492 + background:#3a3a3a; 176.2493 + color:white; 176.2494 +} 176.2495 + 176.2496 +#afui.bb .footer>footer>a:not(:last-of-type):not(.pressed):not(.button){ 176.2497 + border-right:1px solid black; 176.2498 +} 176.2499 + 176.2500 +#afui.bb .footer>footer>a.icon.pressed:not(.button):before { 176.2501 + color: white; 176.2502 +} 176.2503 + 176.2504 +#afui.bb #aside_menu, 176.2505 +#afui.bb #menu { 176.2506 + border-right:1px solid #bbb; 176.2507 + background: #fff; 176.2508 + color: #000; 176.2509 +} 176.2510 + 176.2511 +#afui.bb #aside_menu .list > li > a, 176.2512 +#afui.bb #menu .list > li > a { 176.2513 + color:inherit; 176.2514 +} 176.2515 + 176.2516 +#afui.bb #aside_menu .list .divider, 176.2517 +#afui.bb #menu .list .divider { 176.2518 + background:#fafafa; 176.2519 + color:black; 176.2520 +} 176.2521 + 176.2522 +#afui.bb .list .divider { 176.2523 + background:#fafafa; 176.2524 + border-top:none; 176.2525 + color:black; 176.2526 + border-bottom: 1px solid #0aa9dc !important; 176.2527 +} 176.2528 + 176.2529 +#afui.bb #aside_menu .list li, #afui.bb #aside_menu .list .divider, #afui.bb #aside_menu .list li:first-child, #afui.bb #aside_menu .list li:last-child, 176.2530 +#afui.bb #menu .list li, #afui.bb #menu .list .divider, #afui.bb #menu .list li:first-child, #afui.bb #menu .list li:last-child { 176.2531 + border-bottom-color :#ccc; 176.2532 +} 176.2533 + 176.2534 +#afui.bb .button , 176.2535 +#afui.bb .button-grouped *, 176.2536 +#afui.bb .button-grouped > .button:first-child, 176.2537 +#afui.bb .button-grouped.vertical *, 176.2538 +#afui.bb .button-grouped.vertical > .button:last-child, 176.2539 +#afui.bb > .header .button-grouped > .button { 176.2540 + border-color:#ccc; 176.2541 +} 176.2542 + 176.2543 +#afui.bb > .header .button-grouped > .button.pressed { 176.2544 + background:#07a; 176.2545 +} 176.2546 + 176.2547 +#afui.bb .panel { 176.2548 + background:#fff; 176.2549 +} 176.2550 + 176.2551 +#afui.bb .afPopup { 176.2552 + border: solid 1px #ccc; 176.2553 + -webkit-border-radius: 3px; 176.2554 + border-radius: 3px; 176.2555 + background:inherit; 176.2556 + color:inherit; 176.2557 + padding:0; 176.2558 +} 176.2559 + 176.2560 +#afui.bb .afPopup>HEADER{ 176.2561 + font-weight:normal; 176.2562 + font-size:20px; 176.2563 + text-align:center; 176.2564 + margin:0; 176.2565 + padding:8px; 176.2566 + color:white; 176.2567 + border-radius: 2px; 176.2568 + background:#00609E; 176.2569 + background:-ms-linear-gradient(65deg, #00609E 0%,#00AFEE 100%); 176.2570 + background:-webkit-gradient(linear, left bottom, right top, color-stop(0%,#00609E), color-stop(100%,#00AFEE)); 176.2571 + background:-webkit-linear-gradient(65deg, #00609E 0%,#00AFEE 100%); 176.2572 + background:linear-gradient(65deg, #00609E 0%,#00AFEE 100%); 176.2573 +} 176.2574 + 176.2575 +#afui.bb .afPopup>DIV{ 176.2576 + text-align:center; 176.2577 + padding:10px; 176.2578 +} 176.2579 + 176.2580 +#afui.bb .afPopup>FOOTER{ 176.2581 + padding:5px; 176.2582 +} 176.2583 + 176.2584 +#afui.bb .afPopup>FOOTER>A#cancel{ 176.2585 + width:120px; 176.2586 +} 176.2587 + 176.2588 +#afui.bb .afPopup>FOOTER>A#action{ 176.2589 + width:120px; 176.2590 +} 176.2591 + 176.2592 +#afui.bb #af_actionsheet { 176.2593 + background:white; 176.2594 + color:inherit; 176.2595 +} 176.2596 + 176.2597 +#afui.bb #af_actionsheet a{ 176.2598 + border-radius:5px; 176.2599 + -webkit-border-radius:5px; 176.2600 + border:1px solid #ccc; 176.2601 + background:#eee; 176.2602 + color:#111; 176.2603 +} 176.2604 + 176.2605 +/** iOS 7 theme */ 176.2606 + 176.2607 +/** Blue color color:rgba(82,155,234,255); */ 176.2608 + 176.2609 +/* border rgba(158,158,158,255) */ 176.2610 + 176.2611 +#afui.ios7 { 176.2612 + font-family:'HelveticaNeue', 'Helvetica Neue',Helvetica, Arial, sans-serif; 176.2613 +} 176.2614 + 176.2615 +#afui.ios7 .header { 176.2616 + background:rgb(249,249,249); 176.2617 + color:inherit; 176.2618 + border:none; 176.2619 + border-bottom:1px solid rgba(158,158,158,255); 176.2620 +} 176.2621 + 176.2622 + 176.2623 +#afui.ios7.overlayStatusbar{ 176.2624 + margin-top: 20px; 176.2625 +background: #f9f9f9; 176.2626 +margin-bottom: -20px; 176.2627 +padding-bottom: 20px; 176.2628 +} 176.2629 + 176.2630 +#afui.ios7 .header .button { 176.2631 + color:rgba(82,155,234,255); 176.2632 + border-color:transparent; 176.2633 + font-size:14px; 176.2634 + font-weight:normal; 176.2635 +} 176.2636 + 176.2637 +#afui.ios7 .header h1 { 176.2638 + color:inherit; 176.2639 + text-shadow:none; 176.2640 +} 176.2641 + 176.2642 +#afui.ios7 .panel, #afui.ios7 #modalContainer { 176.2643 + background:rgba(238,238,238,255); 176.2644 +} 176.2645 + 176.2646 +#afui.ios7 .panel h2 { 176.2647 + color:inherit; 176.2648 +} 176.2649 + 176.2650 +#afui.ios7 .footer { 176.2651 + background:rgb(249,249,249); 176.2652 + color:black; 176.2653 + border-top:1px solid rgba(158,158,158,255); 176.2654 + box-shadow:none; 176.2655 +} 176.2656 + 176.2657 +#afui.ios7 .footer>footer>a:not(.button) { 176.2658 + color:rgba(96,96,96,255); 176.2659 +} 176.2660 + 176.2661 +#afui.ios7 .footer>footer>a.pressed:not(.button) { 176.2662 + border-radius:0; 176.2663 + background:transparent; 176.2664 +} 176.2665 + 176.2666 +#afui.ios7 #menubadge:after { 176.2667 + border-color:rgba(82,155,234,255); 176.2668 +} 176.2669 + 176.2670 +#afui.ios7 .list { 176.2671 + font-weight:normal; 176.2672 +} 176.2673 + 176.2674 +#afui.ios7 > #aside_menu, 176.2675 +#afui.ios7 > #menu { 176.2676 + border-right:1px solid #bbb; 176.2677 + background:rgba(238,238,238,255); 176.2678 + color:inherit; 176.2679 +} 176.2680 + 176.2681 +#afui.ios7 #aside_menu .list li,#afui.ios7 #aside_menu .list .divider,#afui.ios7 #aside_menu .list li:first-child,#afui.ios7 #aside_menu .list li:last-child, 176.2682 +#afui.ios7 #menu .list li,#afui.ios7 #menu .list .divider,#afui.ios7 #menu .list li:first-child,#afui.ios7 #menu .list li:last-child { 176.2683 + border-color:rgb(215,215,215); 176.2684 + font-weight:normal; 176.2685 + box-shadow:none; 176.2686 +} 176.2687 + 176.2688 +#afui.ios7 #aside_menu .list .divider, 176.2689 +#afui.ios7 #menu .list .divider { 176.2690 + background:rgba(238,238,238,255); 176.2691 + color:inherit; 176.2692 + font-size: 1em; 176.2693 + border-bottom:1px solid rgb(215,215,215); 176.2694 +} 176.2695 + 176.2696 +#afui.ios7 #aside_menu .list a, 176.2697 +#afui.ios7 #menu .list a { 176.2698 + color:inherit; 176.2699 +} 176.2700 + 176.2701 +#afui.ios7 #aside_menu .list, 176.2702 +#afui.ios7 #menu .list { 176.2703 + background:white; 176.2704 + font-weight: normal; 176.2705 + color:inherit; 176.2706 +} 176.2707 + 176.2708 +#afui.ios7 .list > li > a:after{ 176.2709 + color:rgba(217,217,217,255); 176.2710 +} 176.2711 + 176.2712 +#afui.ios7 .button { 176.2713 + background-color:transparent; 176.2714 +} 176.2715 + 176.2716 +#afui.ios7 .backButton { 176.2717 + background:rgba(249,249,249,1); 176.2718 + color:rgba(82,155,234,255); 176.2719 + display: block; 176.2720 + position: absolute; 176.2721 + line-height:44px; 176.2722 + left: 25px; 176.2723 + text-overflow: ellipsis; 176.2724 + font-size: 14px; 176.2725 + padding: 0; 176.2726 + text-shadow: none; 176.2727 + background-color: transparent; 176.2728 + border:none; 176.2729 + border-color: transparent; 176.2730 + height: 44px; 176.2731 + top:auto; 176.2732 + border-radius: 0; 176.2733 + box-shadow:none; 176.2734 + margin: 0; 176.2735 + padding-left: 0; 176.2736 + text-align: center; 176.2737 + width:50px; 176.2738 + padding:0 !important; 176.2739 + margin:0 !important; 176.2740 +} 176.2741 + 176.2742 +#afui.ios7 .backButton::before { 176.2743 + z-index: -1; 176.2744 + font-size:22px; 176.2745 + position: absolute; 176.2746 + top: 10px; 176.2747 + left: -20px; 176.2748 + text-align: center; 176.2749 + border-radius: 0; 176.2750 + border: none; 176.2751 + border-color: transparent; 176.2752 + box-shadow: none; 176.2753 + -webkit-transform: none; 176.2754 + transform: none; 176.2755 + font-family: 'chevron'; 176.2756 + speak: none; 176.2757 + font-style: normal; 176.2758 + font-weight: normal; 176.2759 + font-variant: normal; 176.2760 + text-transform: none; 176.2761 + line-height: 1; 176.2762 + -webkit-font-smoothing: antialiased; 176.2763 + content: "\f054"; 176.2764 + -webkit-transform:rotate(180deg); 176.2765 + transform:rotate(180deg); 176.2766 + background-color: transparent; 176.2767 +} 176.2768 + 176.2769 +#afui.ios7 .backButton::after { 176.2770 + content: ''; 176.2771 + width:0; 176.2772 + height:0; 176.2773 + border:none; 176.2774 +} 176.2775 + 176.2776 + 176.2777 +#afui.ios7 .button { 176.2778 + box-shadow:none; 176.2779 + border-radius: 0; 176.2780 + border-color:#ccc; 176.2781 + color:rgba(82,155,234,255); 176.2782 + text-shadow:none; 176.2783 +} 176.2784 + 176.2785 +#afui.ios7 .button-grouped * , 176.2786 +#afui.ios7 .button-grouped > .button:first-child, 176.2787 +#afui.ios7 .button-grouped.vertical * , 176.2788 +#afui.ios7 .button-grouped.vertical > .button:last-child, 176.2789 +#afui.ios7 .header .button-grouped > .button { 176.2790 + border-color:rgba(82,155,234,255); 176.2791 +} 176.2792 + 176.2793 +#afui.ios7 .button-grouped > .button.pressed , 176.2794 +#afui.ios7 .header .button-grouped > .button.pressed{ 176.2795 + color:white; 176.2796 + background:rgba(82,155,234,255); 176.2797 +} 176.2798 + 176.2799 +#afui.ios7 .afPopup { 176.2800 + border:1px solid rgba(158,158,158,255); 176.2801 + border-radius:10px; 176.2802 + padding:0; 176.2803 + text-align: center; 176.2804 + color:inherit; 176.2805 + background:rgba(249,249,249,1); 176.2806 +} 176.2807 + 176.2808 +#afui.ios7 .afPopup>HEADER{ 176.2809 + padding:10px 0; 176.2810 +} 176.2811 + 176.2812 +#afui.ios7 .afPopup>DIV{ 176.2813 + padding-bottom:10px; 176.2814 +} 176.2815 + 176.2816 +#afui.ios7 .afPopup>FOOTER{ 176.2817 + border-top:1px solid #aaa; 176.2818 +} 176.2819 + 176.2820 +#afui.ios7 .afPopup>FOOTER>A.center{ 176.2821 + width:100%!important; 176.2822 +} 176.2823 + 176.2824 +#afui.ios7 .afPopup .button { 176.2825 + border: none; 176.2826 + width: 50%; 176.2827 + margin: 0; 176.2828 + background: transparent; 176.2829 + color:rgba(82,155,234,255); 176.2830 + padding:12px 0; 176.2831 +} 176.2832 + 176.2833 +#afui.ios7 .afPopup .button.pressed { 176.2834 + background: transparent; 176.2835 +} 176.2836 + 176.2837 +#afui.ios7 .button.pressed { 176.2838 + font-weight:bold; 176.2839 + background: white; 176.2840 +} 176.2841 + 176.2842 +#afui.ios7 .afPopup a:not(:first-of-type) { 176.2843 + border-left:1px solid rgba(158,158,158,255); 176.2844 +} 176.2845 + 176.2846 +#afui.ios7 #af_actionsheet { 176.2847 + background-color:transparent; 176.2848 + color:black; 176.2849 + padding-left:10px; 176.2850 + padding-right:10px; 176.2851 + border-top: transparent 1px solid; 176.2852 + box-shadow: 0px -1px 2px rgba(0,0,0,0); 176.2853 +} 176.2854 + 176.2855 +#afui.ios7 #af_actionsheet a{ 176.2856 + background-image:none; 176.2857 + text-shadow:none; 176.2858 + box-shadow:none; 176.2859 + font-weight:normal; 176.2860 + border-radius: 0; 176.2861 + border:none; 176.2862 + -webkit-box-shadow:none; 176.2863 + color:rgba(82,155,234,255); 176.2864 + background-color:white; 176.2865 + cursor:pointer; 176.2866 + border-radius:0px; 176.2867 + line-height: 40px; 176.2868 + font-size: 20px; 176.2869 + margin-bottom: 1px; 176.2870 +} 176.2871 + 176.2872 +#afui.ios7 #af_actionsheet a:first-child{ 176.2873 + border-top-left-radius:5px; 176.2874 + border-top-right-radius:5px; 176.2875 +} 176.2876 + 176.2877 +#afui.ios7 #af_actionsheet a:nth-last-child(2){ 176.2878 + border-bottom-left-radius:5px; 176.2879 + border-bottom-right-radius:5px; 176.2880 +} 176.2881 + 176.2882 +#afui.ios7 #af_actionsheet a.cancel{ 176.2883 + font-weight:bold; 176.2884 + margin: 9px 0; 176.2885 + border-radius:5px; 176.2886 +} 176.2887 + 176.2888 +#afui.ios7 #af_actionsheet a.red{ 176.2889 + color:#f44; 176.2890 +} 176.2891 + 176.2892 +#afui.ios7 .footer>footer>a.pressed:not(.button),.footer>footer>a.icon.pressed:not(.button):before { 176.2893 + color:rgba(82,155,234,255); 176.2894 +} 176.2895 + 176.2896 +#afui.ios7 .button.previous { 176.2897 + border:none; 176.2898 +} 176.2899 + 176.2900 +#afui.ios7 .button.next { 176.2901 + border:none; 176.2902 +} 176.2903 + 176.2904 +#afui.ios7 .button.previous::after { 176.2905 + color:rgba(82,155,234,255); 176.2906 + z-index: -1; 176.2907 + font-size:22px; 176.2908 + position: absolute; 176.2909 + top: 2px; 176.2910 + left: -25px; 176.2911 + text-align: center; 176.2912 + border-radius: 0; 176.2913 + border: none; 176.2914 + border-color: transparent; 176.2915 + box-shadow: none; 176.2916 + -webkit-transform: none; 176.2917 + transform: none; 176.2918 + font-family: 'chevron'; 176.2919 + speak: none; 176.2920 + font-style: normal; 176.2921 + font-weight: normal; 176.2922 + font-variant: normal; 176.2923 + text-transform: none; 176.2924 + line-height: 1; 176.2925 + -webkit-font-smoothing: antialiased; 176.2926 + content: "\f054"; 176.2927 + -webkit-transform:rotate(180deg); 176.2928 + transform:rotate(180deg); 176.2929 + background-color: transparent; 176.2930 +} 176.2931 + 176.2932 +#afui.ios7 .button.next::after { 176.2933 + color:rgba(82,155,234,255); 176.2934 + z-index: -1; 176.2935 + font-size:22px; 176.2936 + position: absolute; 176.2937 + top: 6px; 176.2938 + right: -25px; 176.2939 + text-align: center; 176.2940 + border-radius: 0; 176.2941 + border: none; 176.2942 + border-color: transparent; 176.2943 + box-shadow: none; 176.2944 + -webkit-transform: none; 176.2945 + transform: none; 176.2946 + font-family: 'chevron'; 176.2947 + speak: none; 176.2948 + font-style: normal; 176.2949 + font-weight: normal; 176.2950 + font-variant: normal; 176.2951 + text-transform: none; 176.2952 + line-height: 1; 176.2953 + -webkit-font-smoothing: antialiased; 176.2954 + content: "\f054"; 176.2955 + background-color: transparent; 176.2956 +} 176.2957 + 176.2958 +#afui.ios7 .button.gray { 176.2959 + color:#999; 176.2960 + background-color:transparent; 176.2961 +} 176.2962 + 176.2963 +#afui.ios7 .button.yellow { 176.2964 + color:#F1C222; 176.2965 + background-color:transparent; 176.2966 +} 176.2967 + 176.2968 +#afui.ios7 .button.red { 176.2969 + color:#b20000; 176.2970 + background-color:transparent; 176.2971 +} 176.2972 + 176.2973 +#afui.ios7 .button.green { 176.2974 + color:#009C0C; 176.2975 + background-color:transparent; 176.2976 +} 176.2977 + 176.2978 +#afui.ios7 .button.orange { 176.2979 + color:#FF8000; 176.2980 + background-color:transparent; 176.2981 +} 176.2982 + 176.2983 +#afui.ios7 .button.black { 176.2984 + color:black; 176.2985 + background-color:transparent; 176.2986 +} 176.2987 + 176.2988 +#afui.ios7 .button.slate { 176.2989 + color:#171F28; 176.2990 + background-color:transparent; 176.2991 +} 176.2992 + 176.2993 +#afui.ios7 .af-badge { 176.2994 + border:none; 176.2995 + box-shadow:none; 176.2996 + font-size:12px; 176.2997 +} 176.2998 + 176.2999 +#afui.ios7 input[type="range"] { 176.3000 + -webkit-appearance: none; 176.3001 +background-color: #333; 176.3002 +height: 4px; 176.3003 +position: relative; 176.3004 +top: -10px; 176.3005 +margin-top: 15px; 176.3006 +border-radius:2px; 176.3007 +} 176.3008 + 176.3009 +#afui.ios7 input[type="range"]::-webkit-slider-thumb { 176.3010 + -webkit-appearance: none; 176.3011 + position: relative; 176.3012 + z-index: 1; 176.3013 + width: 15px; 176.3014 + height: 15px; 176.3015 + -webkit-border-radius: 40px; 176.3016 + border-radius: 40px; 176.3017 + border:1px solid #333; 176.3018 + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc)); 176.3019 + background-image: gradient(linear, left top, left bottom, color-stop(0%,#ccc), color-stop(100%,#ccc)); 176.3020 +} 176.3021 + 176.3022 +/* iOS theme */ 176.3023 +#afui.ios { 176.3024 + color:black; 176.3025 +} 176.3026 + 176.3027 +#afui.ios .header { 176.3028 + background-color:#889BB3; 176.3029 + background-image:-ms-linear-gradient(top, #B3BECD 0%, #889BB3 50%, #6E84A2 51%); 176.3030 + background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #B3BECD), color-stop(.5, #889BB3), color-stop(.51, #6E84A2)); 176.3031 + background-image:-webkit-linear-gradient(top, #B3BECD 0%, #889BB3 50%, #6E84A2 51%); 176.3032 + background-image:linear-gradient(to bottom, #B3BECD 0%, #889BB3 50%, #6E84A2 51%); 176.3033 + border: 1px solid; 176.3034 + border-color:#CCD2DA transparent #2D3033 transparent; 176.3035 + color:white; 176.3036 +} 176.3037 + 176.3038 +#afui.ios .header h1 { 176.3039 + text-shadow: rgba(0,0,0,0.8) 0 -1px 0; 176.3040 +} 176.3041 + 176.3042 +#afui.ios .af-badge { 176.3043 + border:2px solid #fff; 176.3044 + box-shadow:0 1px 2px #555; 176.3045 + line-height:18px; 176.3046 +} 176.3047 +#afui.ios .panel, #afui.ios #modalContainer { 176.3048 + background:#e7e7e7; 176.3049 +} 176.3050 + 176.3051 +#afui.ios .panel h2 { color:inherit;} 176.3052 + 176.3053 +#afui.ios .footer { 176.3054 + background-color:#000; 176.3055 + background-image:-ms-linear-gradient(top, #222 0%, #111 50%, #000 51%); 176.3056 + background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #222), color-stop(0.5, #111), color-stop(.51, #000)); 176.3057 + background-image:-webkit-linear-gradient(top, #222 0%, #111 50%, #000 51%); 176.3058 + background-image:linear-gradient(to bottom, #222 0%, #111 50%, #000 51%); 176.3059 + box-shadow:0 1px 0 #555 inset; 176.3060 + 176.3061 + border-top:1px solid #000; 176.3062 +} 176.3063 + 176.3064 +#afui.ios .footer>footer>a.pressed:not(.button) { 176.3065 + background:rgba(255, 255, 255, 0.13); 176.3066 + border-radius:6px; 176.3067 +} 176.3068 + 176.3069 +#afui.ios .footer>footer>a.icon.pressed:not(.button):before { 176.3070 + color:#3a9de2; 176.3071 +} 176.3072 + 176.3073 +#afui.ios > #aside_menu, 176.3074 +#afui.ios > #menu.tabletMenu { 176.3075 + border-right:none; 176.3076 + background:#000; 176.3077 + color:#fff; 176.3078 +} 176.3079 + 176.3080 +#afui.ios .backButton { 176.3081 + line-height:15px; 176.3082 + width:58px; 176.3083 + display:block; 176.3084 + position:absolute; 176.3085 + top:5px; left:5px; 176.3086 + text-overflow:ellipsis; 176.3087 + font-size:12px; 176.3088 + padding:7px !important; 176.3089 + color:#fff; 176.3090 + text-shadow:0 -1px 0 #333; 176.3091 + background-color:#476999; 176.3092 + background-image: none !important; 176.3093 + border:1px solid; 176.3094 + border-color:#375073 #375073 #375073 transparent; 176.3095 + height:32px; 176.3096 + border-radius:5px; 176.3097 + box-shadow:0 1px 0 #9CABC0; 176.3098 + margin:0 0 0 15px !important; 176.3099 + padding-left:4px !important; 176.3100 +} /* Sets up positioning of the back button which appears in the header */ 176.3101 + 176.3102 +#afui.ios .backButton::before { 176.3103 + z-index:-1; 176.3104 + content:''; 176.3105 + position:absolute; 176.3106 + width:24px; height:24px; 176.3107 + background-color:#476999; 176.3108 + top:2px; left:-11px; 176.3109 + border-radius:5px; 176.3110 + border:1px solid; 176.3111 + border-color:transparent transparent #9CABC0 transparent; 176.3112 + box-shadow:1px -1px 0 #375073 inset; 176.3113 + -ms-transform:rotate(45deg); -moz-transform:rotate(45deg); -webkit-transform:rotate(45deg); transform:rotate(45deg); 176.3114 +} 176.3115 + 176.3116 +#afui.ios .header .button { 176.3117 + color:#fff; 176.3118 + text-shadow:0 -1px 0 #333; 176.3119 + background-color:#476999; 176.3120 + border:1px solid #375073; 176.3121 + box-shadow:0 1px 0 #9CABC0; 176.3122 + background-image:linear-gradient(to bottom, #9CABC0 0%, #6E84A2 50%, #476999 51%); 176.3123 +} 176.3124 + 176.3125 +#afui.ios .header .button.pressed { 176.3126 + background-image:linear-gradient(to bottom, #6E84A2 0%, #476999 50%, #274979 51%); 176.3127 +} 176.3128 + 176.3129 +#afui.ios .footer .button { 176.3130 + color:#fff; 176.3131 + text-shadow:0 -1px 0 #333; 176.3132 + background-color:#444; 176.3133 + border:1px solid #222; 176.3134 + box-shadow:0 1px 0 #222; 176.3135 + background-image:linear-gradient(to bottom, #555 0%, #333 50%, #111 51%); 176.3136 +} 176.3137 + 176.3138 +#afui.ios .footer .button.pressed { 176.3139 + background-image:linear-gradient(to bottom, #444 0%, #222 50%, #000 51%); 176.3140 +} 176.3141 + 176.3142 +#afui.ios #aside_menu .list li, 176.3143 +#afui.ios #aside_menu .list .divider, 176.3144 +#afui.ios #aside_menu .list li:first-child, 176.3145 +#afui.ios #aside_menu .list li:last-child, 176.3146 +#afui.ios #menu .list li, 176.3147 +#afui.ios #menu .list .divider, 176.3148 +#afui.ios #menu .list li:first-child, 176.3149 +#afui.ios #menu .list li:last-child { 176.3150 + border-color:#101012; 176.3151 + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08); 176.3152 + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .08); 176.3153 +} 176.3154 + 176.3155 +#afui.ios #aside_menu .list > li > a, 176.3156 +#afui.ios #menu .list > li > a { 176.3157 + color:#ccc; 176.3158 +} 176.3159 + 176.3160 +#afui.ios #aside_menu .list .divider, 176.3161 +#afui.ios #menu .list .divider { 176.3162 + background:#333; 176.3163 + color:#fff; 176.3164 +} 176.3165 + 176.3166 +#afui.ios .afPopup { 176.3167 + border: solid 2px #fff; 176.3168 + -webkit-box-shadow: 0px 4px 6px #555, 0 0 20px rgba(0,0,0,0.5); 176.3169 + -webkit-border-radius: 10px; 176.3170 + border-radius:10px; 176.3171 + padding: 0; 176.3172 + background: #1b294b; 176.3173 + background-image: -webkit-gradient(linear, left top, left bottom, from(#626c82), to(#1b294b)); 176.3174 +} 176.3175 + 176.3176 +#afui.ios .afPopup >* { 176.3177 + color:white; 176.3178 +} 176.3179 + 176.3180 +#afui.ios .afPopup>HEADER{ 176.3181 + font-weight:bold; 176.3182 + text-align:center; 176.3183 + text-shadow:0 -1px #000; 176.3184 + padding:5px; 176.3185 +} 176.3186 + 176.3187 +#afui.ios .afPopup>DIV{ 176.3188 + text-align:center; 176.3189 +} 176.3190 + 176.3191 +#afui.ios .afPopup>FOOTER>A{ 176.3192 + background-image: -webkit-gradient(linear, left top, left bottom, from(#626c82), to(#1b294b)); 176.3193 + color:white; 176.3194 +} 176.3195 + 176.3196 +#afui.ios .afPopup>FOOTER>A#cancel{ 176.3197 + width:120px; 176.3198 + margin-left:10px; 176.3199 +} 176.3200 + 176.3201 +#afui.ios .afPopup>FOOTER>A#action{ 176.3202 + width:120px; 176.3203 + margin-right:10px; 176.3204 +} 176.3205 + 176.3206 +#afui.ios .afPopup>FOOTER>A.center{ 176.3207 + float:none!important; 176.3208 + width:95%!important; 176.3209 + margin:8px!important; 176.3210 +} 176.3211 + 176.3212 +#afui.ios #af_actionsheet { 176.3213 + background:#595c61; 176.3214 + color:inherit; 176.3215 +} 176.3216 + 176.3217 +#afui.ios #af_actionsheet a{ 176.3218 + border-radius:10px; 176.3219 + -webkit-border-radius:10px; 176.3220 + border:3px solid #111; 176.3221 + background:#eee; 176.3222 + background: linear-gradient(to bottom, #fff 0%,#ccc 100%); 176.3223 + color:#111; 176.3224 + text-shadow:0 1px 0 #fff; 176.3225 +} 176.3226 + 176.3227 +#afui.ios #af_actionsheet a.cancel{ 176.3228 + background:#333; 176.3229 + background: linear-gradient(to bottom, #666 0%,#333 100%); 176.3230 + color:white; 176.3231 + text-shadow:0 -1px 0 #000; 176.3232 +} 176.3233 + 176.3234 +#afui.ios #af_actionsheet a.red{ 176.3235 + background:#d11; 176.3236 + background: linear-gradient(to bottom, #d55 0%,#d11 100%); 176.3237 + color:white; 176.3238 + text-shadow:0 -1px 0 #000; 176.3239 +} 176.3240 + 176.3241 +#afui.ios input[type="range"] { 176.3242 + -webkit-appearance: none; 176.3243 +background-color: #ccc; 176.3244 +height: 2px; 176.3245 +position: relative; 176.3246 +top: -10px; 176.3247 +margin-top: 15px; 176.3248 +} 176.3249 + 176.3250 +#afui.ios input[type="range"]::-webkit-slider-thumb { 176.3251 + -webkit-appearance: none; 176.3252 + position: relative; 176.3253 + 176.3254 + z-index: 1; 176.3255 + width: 15px; 176.3256 + height: 15px; 176.3257 + 176.3258 + -webkit-border-radius: 40px; 176.3259 + border-radius: 40px; 176.3260 + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebf1f6), color-stop(50%,#abd3ee), color-stop(51%,#89c3eb), color-stop(100%,#d5ebfb)); 176.3261 + background-image: gradient(linear, left top, left bottom, color-stop(0%,#ebf1f6), color-stop(50%,#abd3ee), color-stop(51%,#89c3eb), color-stop(100%,#d5ebfb)); 176.3262 +} 176.3263 +#af_actionsheet { 176.3264 + position:absolute; 176.3265 + left:0px; 176.3266 + right:0px; 176.3267 + padding-left:10px; 176.3268 + padding-right:10px; 176.3269 + padding-top:10px; 176.3270 + margin:auto; 176.3271 + background:black; 176.3272 + float:left; 176.3273 + z-index:9999; 176.3274 + border-top:#fff 1px solid; 176.3275 + background:rgba(71,71,71,.95); 176.3276 + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.4)), to(rgba(255,255,255,0)), color-stop(.08,rgba(255,255,255,.1)), color-stop(.08,rgba(255,255,255,0))); 176.3277 + background-image:-webkit-linear-gradient(top, rgba(255,255,255,.4) 0%, rgba(255,255,255,.1) 8%, rgba(255,255,255,0) 8%); 176.3278 + box-shadow:0px -1px 2px rgba(0,0,0,.4); 176.3279 +} 176.3280 +#af_actionsheet a { 176.3281 + text-decoration:none; 176.3282 + -webkit-transition:all 0.4s ease; 176.3283 + transition:all 0.4s ease; 176.3284 + text-shadow:0px -1px rgba(0,0,0,.8); 176.3285 + padding:0px .25em; 176.3286 + border:1px solid rgba(0,0,0,.8); 176.3287 + text-overflow:ellipsis; 176.3288 + border-radius:.75em; 176.3289 + background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.4)), to(rgba(255,255,255,0)), color-stop(.5,rgba(255,255,255,.1)), color-stop(.5,rgba(255,255,255,0))); 176.3290 + background-image:-webkit-linear-gradient(top, rgba(255,255,255,.5) 0%, rgba(255,255,255,.2) 50%, rgba(255,255,255,0) 50%); 176.3291 + box-shadow:0px 1px 1px rgba(255,255,255,0.7); 176.3292 + display:block; 176.3293 + color:white; 176.3294 + text-align:center; 176.3295 + line-height:36px; 176.3296 + font-size:20px; 176.3297 + font-weight:bold; 176.3298 + margin-bottom:10px; 176.3299 + background-color:rgba(130,130,130,1); 176.3300 +} 176.3301 + 176.3302 +#af_actionsheet a.selected { 176.3303 + background-color:rgba(150,150,150,1); 176.3304 +} 176.3305 + 176.3306 +#af_actionsheet a.cancel { 176.3307 + background-color:rgba(43,43,43,1); 176.3308 +} 176.3309 + 176.3310 +#af_actionsheet a.cancel.selected { 176.3311 + background-color:rgba(73,73,73,1); 176.3312 +} 176.3313 +#af_actionsheet a.red { 176.3314 + color:white; 176.3315 + background-color:rgba(204,0,0,1); 176.3316 +} 176.3317 + 176.3318 +#af_actionsheet a.red.selected { 176.3319 + background-color:rgba(255,0,0,1); 176.3320 +} 176.3321 + 176.3322 + 176.3323 +#mask{ 176.3324 + display:block; 176.3325 + width:100%; 176.3326 + height:100%; 176.3327 + background:#000; 176.3328 + z-index: 999999; 176.3329 + position:fixed; 176.3330 + top:0; 176.3331 + left:0; 176.3332 +} 176.3333 + 176.3334 + 176.3335 + 176.3336 +.afPopup { 176.3337 + display: block; 176.3338 + width: 280px; 176.3339 + float:left; 176.3340 + border: solid 1px #72767b; 176.3341 + -webkit-border-radius: 10px; 176.3342 + border-radius:10px; 176.3343 + padding: 10px; 176.3344 + opacity: 1; 176.3345 + -webkit-transform: scale(1); 176.3346 + transform:scale(1); 176.3347 + position: absolute; 176.3348 + z-index: 1000000; 176.3349 + top: 50%; 176.3350 + left: 50%; 176.3351 + margin: 0px auto; 176.3352 + background: rgba(70,70,70,1); 176.3353 + color:white; 176.3354 +} 176.3355 +.afPopup >* { 176.3356 + color:inherit; 176.3357 +} 176.3358 + 176.3359 +.afPopup.hidden { 176.3360 + opacity: 0; 176.3361 + -webkit-transform: scale(0.1); 176.3362 + 176.3363 +} 176.3364 + 176.3365 +.afPopup.show { 176.3366 + -webkit-transition: all 0.2s ease-in-out; 176.3367 + transition: all 0.2s ease-in-out; 176.3368 +} 176.3369 + 176.3370 +.afPopup>HEADER{ 176.3371 + font-weight:bold; 176.3372 + font-size:20px; 176.3373 + margin:0; 176.3374 + padding:5px; 176.3375 +} 176.3376 + 176.3377 +.afPopup>DIV{ 176.3378 + font-size:14px; 176.3379 + margin:8px; 176.3380 +} 176.3381 + 176.3382 +.afPopup>FOOTER{ 176.3383 + width:100%; 176.3384 + text-align:center; 176.3385 + display:block !important; 176.3386 +} 176.3387 + 176.3388 +.afPopup>FOOTER>A#cancel{ 176.3389 + float:left; 176.3390 + margin-left:5px; 176.3391 +} 176.3392 + 176.3393 +.afPopup>FOOTER>A#action{ 176.3394 + float:right; 176.3395 + margin-right:5px; 176.3396 +} 176.3397 + 176.3398 +.afPopup>FOOTER>A.center{ 176.3399 + float:none!important; 176.3400 + width:80%; 176.3401 + margin:8px; 176.3402 +} 176.3403 +/** This can be your default scrollbar class. You must use !important to override the default inline styles */ 176.3404 +.scrollBar { 176.3405 + position: absolute !important; 176.3406 + width: 5px !important; 176.3407 + height: 20px !important; 176.3408 + border-radius: 2px !important; 176.3409 + border: 1px solid black !important; 176.3410 + background: black !important; 176.3411 + opacity: 0 !important; 176.3412 +} 176.3413 + #afModalMask { 176.3414 + position:absolute; 176.3415 + top:0px; 176.3416 + left:0px; 176.3417 + width:100%; 176.3418 + height:100%; 176.3419 + background:transparent; 176.3420 + display:none; 176.3421 + z-index:9999; 176.3422 + } 176.3423 + 176.3424 + #afSelectBoxContainer { 176.3425 + position:absolute; 176.3426 + display:block; 176.3427 + width:90%; 176.3428 + max-width:280px; 176.3429 + margin-right:auto; 176.3430 + min-height:100px; 176.3431 + background:#303030; 176.3432 + color:white; 176.3433 + overflow:hidden; 176.3434 + z-index:9999; 176.3435 + max-height:300px; 176.3436 + margin-top: -150px; 176.3437 + top: 50%; 176.3438 + left: 50%; 176.3439 + margin-left: -138px; 176.3440 + } 176.3441 + 176.3442 + 176.3443 + #afSelectBoxfix ul { 176.3444 + list-style-type:none; 176.3445 + padding:0px; 176.3446 + margin:0px; 176.3447 + } 176.3448 + #afSelectBoxfix li { 176.3449 + font-size: 1.1em; 176.3450 + color: #fff; 176.3451 + display: block; 176.3452 + line-height: 2.5em; 176.3453 + padding: 0 1em; 176.3454 + border-bottom: 1px solid #444; 176.3455 + } 176.3456 + #afSelectBoxfix .selected { 176.3457 + background:#33B5E5; 176.3458 + } 176.3459 + 176.3460 + .afFakeSelect { 176.3461 + width: 200px; 176.3462 + height: 30px; 176.3463 + display: inline-block; 176.3464 + border: 1px solid #ccc; 176.3465 + border-radius: 5px; 176.3466 + line-height: 2em; 176.3467 + font-size: 1em; 176.3468 + padding-left: 10px; 176.3469 + position: relative; 176.3470 + padding-right: 35px; 176.3471 + text-overflow: ellipsis; 176.3472 + white-space: nowrap; 176.3473 + overflow: hidden; 176.3474 + } 176.3475 + 176.3476 + .afFakeSelect:after { 176.3477 + position:absolute; 176.3478 + top:5px; 176.3479 + right:5px; 176.3480 + border: 14px solid transparent; 176.3481 + border-top-color: #ccc; 176.3482 + content:''; 176.3483 + } 176.3484 + 176.3485 + #afSelectBoxContainer #afSelectDone,#afSelectBoxContainer #afSelectCancel{ 176.3486 + margin-top:10px; 176.3487 + display: inline-block; 176.3488 + height: 30px; 176.3489 + width: 100px; 176.3490 + background:#33B5E5; 176.3491 + border: 1px solid #33B5E5; 176.3492 + text-align: center; 176.3493 + line-height: 2em; 176.3494 + float: left; 176.3495 + margin-left: 10px; 176.3496 + } 176.3497 + #afSelectBoxContainer #afSelectCancel { 176.3498 + float:right; 176.3499 + margin-right:10px; 176.3500 + } 176.3501 + #afSelectBoxContainer #afSelectClose { 176.3502 + overflow: hidden; 176.3503 + border-bottom: 1px solid #444; 176.3504 + padding-bottom:5px; 176.3505 + } 176.3506 + 176.3507 + select:disabled~.afFakeSelect { 176.3508 + background:#ccc; 176.3509 + color:black; 176.3510 + }
177.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 177.2 +++ b/Touchgui/www/lib/appframework/appframework.ui.min.js Thu Jun 04 14:50:33 2015 +0200 177.3 @@ -0,0 +1,302 @@ 177.4 +/*! intel-appframework - v2.1.0 - 2014-09-25 */ 177.5 + 177.6 +/* 177.7 + Intel 177.8 + @api private 177.9 +*/ 177.10 +if(!window.af||"function"!==typeof af){var af=function(a){function n(a,c,d){var b=r.createDocumentFragment();if(d){for(d=a.length-1;0<=d;d--)b.insertBefore(a[d],b.firstChild);c.insertBefore(b,c.firstChild)}else{for(d=0;d<a.length;d++)b.appendChild(a[d]);c.appendChild(b)}}function l(a){return a in G?G[a]:G[a]=RegExp("(^|\\s)"+a+"(\\s|$)")}function k(a){for(var c=0;c<a.length;c++)a.indexOf(a[c])!==c&&(a.splice(c,1),c--);return a}function f(a,c){var d=[];if(a==q)return d;for(;a;a=a.nextSibling)1===a.nodeType&& 177.11 +a!==c&&d.push(a);return d}function h(a,c){try{return c.querySelectorAll(a)}catch(d){return[]}}function g(a,c){if(a)if(a.nodeType)c[c.length++]=a;else for(var d=0,b=a.length;d<b;d++)c[c.length++]=a[d]}function b(){}function e(c,d){c.os={};c.os.webkit=d.match(/WebKit\/([\d.]+)/)?!0:!1;c.os.android=d.match(/(Android)\s+([\d.]+)/)||d.match(/Silk-Accelerated/)?!0:!1;c.os.androidICS=c.os.android&&d.match(/(Android)\s4/)?!0:!1;c.os.ipad=d.match(/(iPad).*OS\s([\d_]+)/)?!0:!1;c.os.iphone=!c.os.ipad&&d.match(/(iPhone\sOS)\s([\d_]+)/)? 177.12 +!0:!1;c.os.ios7=(c.os.ipad||c.os.iphone)&&d.match(/7_/)||(c.os.ipad||c.os.iphone)&&d.match(/8_/)?!0:!1;c.os.webos=d.match(/(webOS|hpwOS)[\s\/]([\d.]+)/)?!0:!1;c.os.touchpad=c.os.webos&&d.match(/TouchPad/)?!0:!1;c.os.ios=c.os.ipad||c.os.iphone;c.os.playbook=d.match(/PlayBook/)?!0:!1;c.os.blackberry10=d.match(/BB10/)?!0:!1;c.os.blackberry=c.os.playbook||c.os.blackberry10||d.match(/BlackBerry/)?!0:!1;c.os.chrome=d.match(/Chrome/)?!0:!1;c.os.opera=d.match(/Opera/)?!0:!1;c.os.fennec=d.match(/fennec/i)? 177.13 +!0:d.match(/Firefox/)?!0:!1;c.os.ie=d.match(/MSIE 10.0/i)||d.match(/Trident\/7/i)?!0:!1;c.os.ieTouch=c.os.ie&&d.toLowerCase().match(/touch/i)?!0:!1;c.os.tizen=d.match(/Tizen/i)?!0:!1;c.os.supportsTouch=a.DocumentTouch&&r instanceof a.DocumentTouch||"ontouchstart"in a;c.os.kindle=d.match(/Silk-Accelerated/)?!0:!1;c.feat={};var b=r.documentElement.getElementsByTagName("head")[0];c.feat.nativeTouchScroll="undefined"!==typeof b.style["-webkit-overflow-scrolling"]&&(c.os.ios||c.os.blackberry10);c.feat.cssPrefix= 177.14 +c.os.webkit?"Webkit":c.os.fennec?"Moz":c.os.ie?"ms":c.os.opera?"O":"";c.feat.cssTransformStart=!c.os.opera?"3d(":"(";c.feat.cssTransformEnd=!c.os.opera?",0)":")";c.os.android&&!c.os.webkit&&(c.os.android=!1);for(var b=["Webkit","Moz","ms","O"],p=0;p<b.length;p++)""===r.documentElement.style[b[p]+"Transform"]&&(c.feat.cssPrefix=b[p])}function c(a){return a._afmid||(a._afmid=Q++)}function d(a,d,b,e){d=p(d);if(d.ns)var f=t(d.ns);return(x[c(a)]||[]).filter(function(a){return a&&(!d.e||a.e===d.e)&&(!d.ns|| 177.15 +f.test(a.ns))&&(!b||a.fn===b||"function"===typeof a.fn&&"function"===typeof b&&a.fn===b)&&(!e||a.sel===e)})}function p(a){a=(""+a).split(".");return{e:a[0],ns:a.slice(1).sort().join(" ")}}function t(a){return RegExp("(?:^| )"+a.replace(" "," .* ?")+"(?: |$)")}function J(a,c,d){m.isObject(a)?m.each(a,d):a.split(/\s/).forEach(function(a){d(a,c)})}function y(a,d,b,e,f){var h=c(a),g=x[h]||(x[h]=[]);J(d,b,function(c,d){var b=f&&f(d,c),E=b||d,I=function(c){if(!c.ns||t(c.ns).test(h.ns)){var d=E.apply(a, 177.16 +[c].concat(c.data));!1===d&&c.preventDefault();return d}},h=m.extend(p(c),{fn:d,proxy:I,sel:e,del:b,i:g.length});g.push(h);a.addEventListener(h.e,I,!1)})}function u(a,b,p,e){var f=c(a);J(b||"",p,function(c,b){d(a,c,b,e).forEach(function(c){delete x[f][c.i];a.removeEventListener(c.e,c.proxy,!1)})})}function F(a){var c=m.extend({originalEvent:a},a);m.each(R,function(d,b){c[d]=function(){this[b]=S;if("stopImmediatePropagation"===d||"stopPropagation"===d)if(a.cancelBubble=!0,!a[d])return;return a[d].apply(a, 177.17 +arguments)};c[b]=T});return c}function z(a,c,d,b,p){y(a,c,d,b,function(c){return function(d){var e,E=m(d.target).closest(b,a).get(0);if(E)return e=m.extend(F(d),{currentTarget:E,liveFired:a,delegateTarget:a,data:p}),c.apply(E,[e].concat([].slice.call(arguments,1)))}})}function s(a,d){if(d&&a.dispatchEvent){var b=m.Event("destroy",{bubbles:!1});a.dispatchEvent(b)}if((b=c(a))&&x[b]){for(var p in x[b])a.removeEventListener(x[b][p].e,x[b][p].proxy,!1);delete x[b]}}function A(a,c){if(a){var d=a.childNodes; 177.18 +if(d&&0<d.length)for(var b=0;b<d.length;b++)A(d[b],c);s(a,c)}}var q,r=a.document,B=[],K=B.slice,G={},U=1,V=/<(\w+)[^>]*>/,w={},C={},L={columncount:!0,fontweight:!0,lineheight:!0,"column-count":!0,"font-weight":!0,"line-height":!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,"z-index":!0,zoom:!0},D="object"===typeof MSApp,v=function(a,c){this.length=0;if(a){if(a instanceof v&&c==q)return a;if(af.isFunction(a))return af(r).ready(a);if(af.isArray(a)&&a.length!=q){for(var d=0;d<a.length;d++)this[this.length++]= 177.19 +a[d];return this}if(af.isObject(a)&&af.isObject(c)){if(a.length==q)a.parentNode==c&&(this[this.length++]=a);else for(d=0;d<a.length;d++)a[d].parentNode==c&&(this[this.length++]=a[d]);return this}if(af.isObject(a)&&c==q)return this[this.length++]=a,this;if(c!==q){if(c instanceof v)return c.find(a)}else c=r}else return this;return this.selector(a,c)},m=function(a,c){return new v(a,c)};m.is$=function(a){return a instanceof v};m.map=function(a,c){var d,b=[],p;if(m.isArray(a))for(p=0;p<a.length;p++)d= 177.20 +c.apply(a[p],[a[p],p]),d!==q&&b.push(d);else if(m.isObject(a))for(p in a)a.hasOwnProperty(p)&&"length"!==p&&(d=c(a[p],[a[p],p]),d!==q&&b.push(d));return b};m.each=function(a,c){var d;if(m.isArray(a))for(d=0;d<a.length&&!1!==c(d,a[d]);d++);else if(m.isObject(a))for(d in a)if(a.hasOwnProperty(d)&&"length"!==d&&!1===c(d,a[d]))break;return a};m.extend=function(a){a==q&&(a=this);if(1===arguments.length){for(var c in a)this[c]=a[c];return this}K.call(arguments,1).forEach(function(c){for(var d in c)a[d]= 177.21 +c[d]});return a};m.isArray=function(a){return a instanceof Array&&a.push!=q};m.isFunction=function(a){return"function"===typeof a&&!(a instanceof RegExp)};m.isObject=function(a){return"object"===typeof a&&null!==a};m.fn=v.prototype={namespace:"appframework",constructor:v,forEach:B.forEach,reduce:B.reduce,push:B.push,indexOf:B.indexOf,concat:B.concat,selector:function(a,c){a=a.trim();if("#"===a[0]&&-1===a.indexOf(".")&&-1===a.indexOf(",")&&-1===a.indexOf(" ")&&-1===a.indexOf(">"))c===r?g(c.getElementById(a.replace("#", 177.22 +"")),this):g(h(a,c),this);else if("<"===a[0]&&">"===a[a.length-1]||-1!==a.indexOf("<")&&-1!==a.indexOf(">")){var d=r.createElement("div");D?MSApp.execUnsafeLocalFunction(function(){d.innerHTML=a.trim()}):d.innerHTML=a.trim();g(d.childNodes,this)}else g(h(a,c),this);return this},oldElement:void 0,sort:B.sort,slice:B.slice,length:0,setupOld:function(a){if(a==q)return m();a.oldElement=this;return a},map:function(a){var c,d=[],b;for(b=0;b<this.length;b++)c=a.apply(this[b],[b,this[b]]),c!==q&&d.push(c); 177.23 +return m(d)},each:function(a){this.forEach(function(c,d){a.call(c,d,c)});return this},ready:function(a){"complete"===r.readyState||"loaded"===r.readyState||!m.os.ie&&"interactive"===r.readyState?a():r.addEventListener("DOMContentLoaded",a,!1);return this},find:function(a){if(0===this.length)return this;for(var c=[],d,b=0;b<this.length;b++){d=m(a,this[b]);for(var p=0;p<d.length;p++)c.push(d[p])}return m(k(c))},html:function(a,c){var d=function(){p.innerHTML=a};if(0===this.length)return this;if(a=== 177.24 +q)return this[0].innerHTML;for(var b=0;b<this.length;b++)if(!1!==c&&m.cleanUpContent(this[b],!1,!0),D){var p=this[b];MSApp.execUnsafeLocalFunction(d)}else this[b].innerHTML=a;return this},text:function(a){if(0===this.length)return this;if(a===q)return this[0].textContent;for(var c=0;c<this.length;c++)this[c].textContent=a;return this},css:function(c,d,b){b=b!=q?b:this[0];if(0===this.length)return this;if(d==q&&"string"===typeof c)return b.style[c]?b.style[c]:a.getComputedStyle(b)[c];for(b=0;b<this.length;b++)if(m.isObject(c))for(var p in c)this[b].style[p]= 177.25 +"number"===typeof c[p]&&!L[p.toLowerCase()]?c[p]+"px":c[p];else this[b].style[c]="number"===typeof d&&!L[c.toLowerCase()]?d+"px":d;return this},vendorCss:function(a,c,d){return this.css(m.feat.cssPrefix+a,c,d)},cssTranslate:function(a){return this.vendorCss("Transform","translate"+m.feat.cssTransformStart+a+m.feat.cssTransformEnd)},computedStyle:function(c){if(!(0===this.length||c==q))return a.getComputedStyle(this[0],"")[c]},empty:function(){for(var a=0;a<this.length;a++)m.cleanUpContent(this[a], 177.26 +!1,!0),this[a].textContent="";return this},hide:function(){if(0===this.length)return this;for(var a=0;a<this.length;a++)"none"!==this.css("display",null,this[a])&&(this[a].setAttribute("afmOldStyle",this.css("display",null,this[a])),this[a].style.display="none");return this},show:function(){if(0===this.length)return this;for(var a=0;a<this.length;a++)"none"===this.css("display",null,this[a])&&(this[a].style.display=this[a].getAttribute("afmOldStyle")?this[a].getAttribute("afmOldStyle"):"block",this[a].removeAttribute("afmOldStyle")); 177.27 +return this},toggle:function(a){if(0===this.length)return this;for(var c=!0===a,d=0;d<this.length;d++)if("none"!==this.css("display",null,this[d])&&(a==q||!1===c))this[d].setAttribute("afmOldStyle",this.css("display",null,this[d])),this[d].style.display="none";else if("none"===this.css("display",null,this[d])&&(a==q||!0===c))this[d].style.display=this[d].getAttribute("afmOldStyle")?this[d].getAttribute("afmOldStyle"):"block",this[d].removeAttribute("afmOldStyle");return this},val:function(a){if(0=== 177.28 +this.length)return a===q?void 0:this;if(a==q)return this[0].value;for(var c=0;c<this.length;c++)this[c].value=a;return this},attr:function(a,c){if(0===this.length)return c===q?void 0:this;if(c===q&&!m.isObject(a))return this[0].afmCacheId&&w[this[0].afmCacheId]&&w[this[0].afmCacheId][a]?w[this[0].afmCacheId][a]:this[0].getAttribute(a);for(var d=0;d<this.length;d++)if(m.isObject(a))for(var b in a)m(this[d]).attr(b,a[b]);else m.isArray(c)||m.isObject(c)||m.isFunction(c)?(this[d].afmCacheId||(this[d].afmCacheId= 177.29 +m.uuid()),w[this[d].afmCacheId]||(w[this[d].afmCacheId]={}),w[this[d].afmCacheId][a]=c):(null===c?this[d].removeAttribute(a):this[d].setAttribute(a,c),this[d].afmCacheId&&w[this[d].afmCacheId][a]&&delete w[this[d].afmCacheId][a]);return this},removeAttr:function(a){for(var c=function(c){d[b].removeAttribute(c);d[b].afmCacheId&&w[d[b].afmCacheId]&&delete w[d[b].afmCacheId][a]},d=this,b=0;b<this.length;b++)a.split(/\s+/g).forEach(c);return this},prop:function(a,c){if(0===this.length)return c===q?void 0: 177.30 +this;if(c===q&&!m.isObject(a)){var d;return this[0].afmCacheId&&C[this[0].afmCacheId]&&C[this[0].afmCacheId][a]?C[this[0].afmCacheId][a]:!(d=this[0][a])&&a in this[0]?this[0][a]:d}for(d=0;d<this.length;d++)if(m.isObject(a))for(var b in a)m(this[d]).prop(b,a[b]);else m.isArray(c)||m.isObject(c)||m.isFunction(c)?(this[d].afmCacheId||(this[d].afmCacheId=m.uuid()),C[this[d].afmCacheId]||(C[this[d].afmCacheId]={}),C[this[d].afmCacheId][a]=c):null===c&&void 0!==c?m(this[d]).removeProp(a):(m(this[d]).removeProp(a), 177.31 +this[d][a]=c);return this},removeProp:function(a){for(var c=function(c){d[b][c]&&(d[b][c]=void 0);d[b].afmCacheId&&C[d[b].afmCacheId]&&delete C[d[b].afmCacheId][a]},d=this,b=0;b<this.length;b++)a.split(/\s+/g).forEach(c);return this},remove:function(a){a=m(this).filter(a);if(a==q)return this;for(var c=0;c<a.length;c++)m.cleanUpContent(a[c],!0,!0),a[c]&&a[c].parentNode&&a[c].parentNode.removeChild(a[c]);return this},addClass:function(a){var c=function(a){e.hasClass(a,e[d])||p.push(a)};if(a==q)return this; 177.32 +for(var d=0;d<this.length;d++){var b=this[d].className,p=[],e=this;a.split(/\s+/g).forEach(c);this[d].className+=(b?" ":"")+p.join(" ");this[d].className=this[d].className.trim()}return this},removeClass:function(a){if(a==q)return this;for(var c=function(a){b=b.replace(l(a)," ")},d=0;d<this.length;d++){if(a==q){this[d].className="";break}var b=this[d].className;"object"===typeof this[d].className&&(b=" ");a.split(/\s+/g).forEach(c);this[d].className=0<b.length?b.trim():""}return this},toggleClass:function(a, 177.33 +c){if(a==q)return this;for(var d=0;d<this.length;d++)"boolean"!==typeof c&&(c=this.hasClass(a,this[d])),m(this[d])[c?"removeClass":"addClass"](a);return this},replaceClass:function(a,c){if(a==q||c==q)return this;for(var d=function(a){p=p.replace(l(a)," ")},b=0;b<this.length;b++)if(a==q)this[b].className=c;else{var p=this[b].className;a.split(/\s+/g).concat(c.split(/\s+/g)).forEach(d);p=p.trim();this[b].className=0<p.length?(p+" "+c).trim():c}return this},hasClass:function(a,c){if(0===this.length)return!1; 177.34 +c||(c=this[0]);return l(a).test(c.className)},append:function(c,d,b){if(c&&c.length!=q&&0===c.length)return this;if(m.isArray(c)||m.isObject(c))c=m(c);var p;d&&m(this).add(d);for(d=0;d<this.length;d++)if(c.length&&"string"!==typeof c)c=m(c),n(c,this[d],b);else{var e=V.test(c)?m(c):void 0;if(e==q||0===e.length)e=r.createTextNode(c);if(e instanceof v)for(var f=0,t=e.length;f<t;f++)p=e[f],p.nodeName!=q&&"script"===p.nodeName.toLowerCase()&&(!p.type||"text/javascript"===p.type.toLowerCase())?a.eval(p.innerHTML): 177.35 +n(m(p),this[d],b);else b!=q?this[d].insertBefore(e,this[d].firstChild):this[d].appendChild(e)}return this},appendTo:function(a){m(a).append(this);return this},prependTo:function(a){m(a).append(this,null,!0);return this},prepend:function(a){return this.append(a,null,1)},insertBefore:function(a,c){if(0===this.length)return this;a=m(a).get(0);if(!a)return this;for(var d=0;d<this.length;d++)c?a.parentNode.insertBefore(this[d],a.nextSibling):a.parentNode.insertBefore(this[d],a);return this},insertAfter:function(a){this.insertBefore(a, 177.36 +!0)},get:function(a){a=a==q?null:a;0>a&&(a+=this.length);if(null===a){a=[];for(var c=0;c<this.length;c++)a.push(this[c]);return a}return this[a]?this[a]:void 0},offset:function(){var c;if(0===this.length)return this;if(this[0]===a)return{left:0,top:0,right:0,bottom:0,width:a.innerWidth,height:a.innerHeight};c=this[0].getBoundingClientRect();return{left:c.left+a.pageXOffset,top:c.top+a.pageYOffset,right:c.right+a.pageXOffset,bottom:c.bottom+a.pageYOffset,width:c.right-c.left,height:c.bottom-c.top}}, 177.37 +height:function(c){return 0===this.length?this:c!=q?this.css("height",c):this[0]===this[0].window?a.innerHeight:this[0].nodeType===this[0].DOCUMENT_NODE?this[0].documentElement.offsetHeight:(c=this.computedStyle("height").replace("px",""))?+c:this.offset().height},width:function(c){return 0===this.length?this:c!=q?this.css("width",c):this[0]===this[0].window?a.innerWidth:this[0].nodeType===this[0].DOCUMENT_NODE?this[0].documentElement.offsetWidth:(c=this.computedStyle("width").replace("px",""))?+c: 177.38 +this.offset().width},parent:function(a,c){if(0===this.length)return this;for(var d=[],b=0;b<this.length;b++)for(var p=this[b];p.parentNode&&p.parentNode!==r&&!(d.push(p.parentNode),p.parentNode&&(p=p.parentNode),!c););return this.setupOld(m(k(d)).filter(a))},parents:function(a){return this.parent(a,!0)},children:function(a){if(0===this.length)return this;for(var c=[],d=0;d<this.length;d++)c=c.concat(f(this[d].firstChild));return this.setupOld(m(c).filter(a))},siblings:function(a){if(0===this.length)return this; 177.39 +for(var c=[],d=0;d<this.length;d++)this[d].parentNode&&(c=c.concat(f(this[d].parentNode.firstChild,this[d])));return this.setupOld(m(c).filter(a))},contents:function(a){if(0===this.length)return this;for(var c=[],d=0;d<this.length;d++)this[d].parentNode&&g(this[d].childNodes,c);return this.setupOld(m(c).filter(a))},closest:function(a,c){if(0===this.length)return this;var d=this[0],b=m(a,c);if(0===b.length)return m();for(;d&&-1===b.indexOf(d);)d=d!==c&&d!==r&&d.parentNode;return m(d)},filter:function(a){if(0=== 177.40 +this.length||a==q)return this;for(var c=[],d=0;d<this.length;d++){var b=this[d];b.parentNode&&0<=m(a,b.parentNode).indexOf(b)&&c.push(b)}return this.setupOld(m(k(c)))},not:function(a){if(0===this.length)return this;for(var c=[],d=0;d<this.length;d++){var b=this[d];b.parentNode&&-1===m(a,b.parentNode).indexOf(b)&&c.push(b)}return this.setupOld(m(k(c)))},data:function(a,c){return this.attr("data-"+a,c)},end:function(){return this.oldElement!=q?this.oldElement:m()},clone:function(a){a=!1===a?!1:!0;if(0=== 177.41 +this.length)return this;for(var c=[],d=0;d<this.length;d++)c.push(this[d].cloneNode(a));return m(c)},size:function(){return this.length},serialize:function(){if(0===this.length)return"";for(var a=function(a){var d=a.getAttribute("type");if("fieldset"!==a.nodeName.toLowerCase()&&(!a.disabled&&"submit"!==d&&"reset"!==d&&"button"!==d&&("radio"!==d&&"checkbox"!==d||a.checked))&&a.getAttribute("name"))if("select-multiple"===a.type)for(d=0;d<a.options.length;d++)a.options[d].selected&&c.push(a.getAttribute("name")+ 177.42 +"="+encodeURIComponent(a.options[d].value));else c.push(a.getAttribute("name")+"="+encodeURIComponent(a.value))},c=[],d=0;d<this.length;d++)this.slice.call(this[d].elements).forEach(a);return c.join("&")},eq:function(a){return m(this.get(a))},index:function(a){return a?this.indexOf(m(a)[0]):this.parent().children().indexOf(this[0])},is:function(a){return!!a&&0<this.filter(a).length},add:function(a){a=m(a);var c,d=a.length;for(c=0;c<d;c++)this[this.length++]=a[c];return this}};m.ajaxSettings={type:"GET", 177.43 +beforeSend:b,success:b,error:b,complete:b,context:void 0,timeout:0,crossDomain:null,processData:!0};m.jsonP=function(c){if(D)return c.type="get",c.dataType=null,m.get(c);var d="jsonp_callback"+ ++U,b="",p,e=r.createElement("script");a[d]=function(p){clearTimeout(b);m(e).remove();delete a[d];c.success.call(void 0,p)};if(-1!==c.url.indexOf("callback=?"))e.src=c.url.replace(/=\?/,"="+d);else{p=c.jsonp?c.jsonp:"callback";if(-1===c.url.indexOf("?"))c.url+="?"+p+"="+d;else if(-1!==c.url.indexOf("callback=")){p= 177.44 +c.url.indexOf("callback=")+9;var f=c.url.indexOf(p);-1===f&&(f=c.url.length);p=c.url.substr(p,f);c.url=c.url.replace("callback="+p,"callback="+d);p=p.replace("window.","");c.success=a[p]}else c.url+="&"+p+"="+d;e.src=c.url}c.error&&(e.onerror=function(){clearTimeout(b);c.error.call(void 0,"","error")});m("head").append(e);0<c.timeout&&(b=setTimeout(function(){c.error.call(void 0,"","timeout")},c.timeout));return{}};m.ajax=function(c){var d,p=m.Deferred();"string"===typeof c&&(c={url:c});var e=c|| 177.45 +{},f;for(f in m.ajaxSettings)"undefined"===typeof e[f]&&(e[f]=m.ajaxSettings[f]);try{e.url||(e.url=a.location);e.headers||(e.headers={});if(!("async"in e)||!1!==e.async)e.async=!0;e.processData&&m.isObject(e.data)&&(e.data=m.param(e.data));"get"===e.type.toLowerCase()&&e.data&&(-1===e.url.indexOf("?")?e.url+="?"+e.data:e.url+="&"+e.data);e.data&&(!e.contentType&&!1!==e.contentType)&&(e.contentType="application/x-www-form-urlencoded; charset=UTF-8");if(e.dataType)switch(e.dataType){case "script":e.dataType= 177.46 +"text/javascript, application/javascript";break;case "json":e.dataType="application/json";break;case "xml":e.dataType="application/xml, text/xml";break;case "html":e.dataType="text/html";break;case "text":e.dataType="text/plain";break;case "jsonp":return m.jsonP(c);default:e.dataType="text/html"}else e.dataType="text/html";if(/=\?/.test(e.url))return m.jsonP(e);null===e.crossDomain&&(e.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(e.url)&&RegExp.$2!==a.location.host);e.crossDomain||(e.headers=m.extend({"X-Requested-With":"XMLHttpRequest"}, 177.47 +e.headers));var t,h=e.context,g=/^([\w-]+:)\/\//.test(e.url)?RegExp.$1:a.location.protocol;d=new a.XMLHttpRequest;m.extend(d,p.promise);d.onreadystatechange=function(){var c=e.dataType;if(4===d.readyState){clearTimeout(t);var b,f=!1,k=d.getResponseHeader("content-type");k||(k="");if(200<=d.status&&300>d.status||0===d.status&&"file:"===g){if("application/json"===k||"application/json"===c&&!/^\s*$/.test(d.responseText))try{b=JSON.parse(d.responseText)}catch(P){f=P}else if(-1!==k.indexOf("javascript"))try{b= 177.48 +d.responseText,a.eval(b)}catch(l){console.log(l)}else"application/xml, text/xml"===c?b=d.responseXML:"text/html"===c?(b=d.responseText,m.parseJS(b)):b=d.responseText;0===d.status&&0===b.length&&(f=!0);f?(e.error.call(h,d,"parsererror",f),p.reject.call(h,d,"parsererror",f)):(p.resolve.call(h,b,"success",d),e.success.call(h,b,"success",d))}else f=!0,p.reject.call(h,d,"error"),e.error.call(h,d,"error");e.complete.call(h,d,f?"error":"success")}};d.open(e.type,e.url,e.async);e.withCredentials&&(d.withCredentials= 177.49 +!0);e.contentType&&(e.headers["Content-Type"]=e.contentType);for(var k in e.headers)"string"===typeof e.headers[k]&&d.setRequestHeader(k,e.headers[k]);if(!1===e.beforeSend.call(h,d,e))return d.abort(),!1;0<e.timeout&&(t=setTimeout(function(){d.onreadystatechange=b;d.abort();e.error.call(h,d,"timeout")},e.timeout));d.send(e.data)}catch(l){p.resolve(h,d,"error",l),e.error.call(h,d,"error",l)}return d};m.get=function(a,c){return this.ajax({url:a,success:c})};m.post=function(a,c,d,b){m.isFunction(c)&& 177.50 +(d=c,c={});"string"===typeof d&&(b=d,d=function(){});b===q&&(b="html");return this.ajax({url:a,type:"POST",data:c,dataType:b,success:d})};m.getJSON=function(a,c,d,b){"function"===typeof c&&(b=d,d=c,c={});return this.ajax({url:a,data:c,success:d,error:b,dataType:"json"})};m.getScript=function(a,c){if(/^([\w-]+:)?\/\/([^\/]+)/.test(a)){var d=m.Deferred(),b=m.create("script",{async:!0,src:a}).get(0);b.onload=function(){c&&c();d.resolve.call(this,"success");m(this).remove()};b.onerror=function(){m(this).remove(); 177.51 +d.reject.call(this,"success")};r.head.appendChild(b);return d.promise}return this.ajax({url:a,success:c,dataType:"script"})};m.param=function(a,c){var d=[];if(a instanceof v)a.each(function(){d.push((c?c+"["+this.id+"]":this.id)+"="+encodeURIComponent(this.value))});else for(var b in a)if(!m.isFunction(a[b])){var e=c?c+"["+b+"]":b,p=a[b];d.push(m.isObject(p)?m.param(p,e):e+"="+encodeURIComponent(p))}return d.join("&")};m.parseJSON=function(a){return JSON.parse(a)};m.parseXML=function(a){if(D)MSApp.execUnsafeLocalFunction(function(){return(new DOMParser).parseFromString(a, 177.52 +"text/xml")});else return(new DOMParser).parseFromString(a,"text/xml")};e(m,navigator.userAgent);m.__detectUA=e;m.uuid=function(){var a=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()};m.getCssMatrix=function(c){m.is$(c)&&(c=c.get(0));var d=a.WebKitCSSMatrix||a.MSCSSMatrix;if(c===q)return d?new d:{a:0,b:0,c:0,d:0,e:0,f:0};c=a.getComputedStyle(c);c=c.webkitTransform||c.transform||c[m.feat.cssPrefix+"Transform"];return d? 177.53 +new d(c):c?(d=c.replace(/[^0-9\-.,]/g,"").split(","),{a:+d[0],b:+d[1],c:+d[2],d:+d[3],e:+d[4],f:+d[5]}):{a:0,b:0,c:0,d:0,e:0,f:0}};m.create=function(a,c){var d,b=new v;if(c||"<"!==a[0]){c.html&&(c.innerHTML=c.html,delete c.html);d=r.createElement(a);for(var e in c)d[e]=c[e];b[b.length++]=d}else d=r.createElement("div"),D?MSApp.execUnsafeLocalFunction(function(){d.innerHTML=a.trim()}):d.innerHTML=a,g(d.childNodes,b);return b};m.query=function(a,c){if(!a)return new v;c=c||r;return(new v).selector(a, 177.54 +c)};var x=[],Q=1;m.event={add:y,remove:u};m.fn.bind=function(a,c){for(var d=0,b=this.length;d<b;d++)y(this[d],a,c);return this};m.fn.unbind=function(a,c){for(var d=0,b=this.length;d<b;d++)u(this[d],a,c);return this};m.fn.one=function(a,c){return this.each(function(d,b){y(this,a,c,null,function(a,c){return function(){u(b,c,a);return a.apply(b,arguments)}})})};var S=function(){return!0},T=function(){return!1},R={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped", 177.55 +stopPropagation:"isPropagationStopped"};m.fn.delegate=function(a,c,d,b){m.isFunction(d)&&(b=d,d=null);for(var e=0,p=this.length;e<p;e++)z(this[e],c,b,a,d);return this};m.fn.undelegate=function(a,c,d){for(var b=0,e=this.length;b<e;b++)u(this[b],c,d,a);return this};m.fn.on=function(a,c,d,b){m.isFunction(d)&&(b=d,d=null);return c===q||m.isFunction(c)?this.bind(a,c):this.delegate(c,a,d,b)};m.fn.off=function(a,c,d){return c===q||m.isFunction(c)?this.unbind(a,c):this.undelegate(c,a,d)};m.fn.trigger=function(a, 177.56 +c,d){"string"===typeof a&&(d=d||{},a=p(a),d.ns=a.ns,a=m.Event(a.e,d));a.data=c;c=0;for(d=this.length;c<d;c++)this[c].dispatchEvent(a);return this};m.Event=function(a,c){var d=r.createEvent("Events"),b=!0;if(c)for(var e in c)"bubbles"===e?b=!!c[e]:d[e]=c[e];d.initEvent(a,b,!0,null,null,null,null,null,null,null,null,null,null,null,null);return d};m.bind=function(a,c,d){if(a){a.__events||(a.__events={});m.isArray(c)||(c=[c]);for(var b=0;b<c.length;b++)a.__events[c[b]]||(a.__events[c[b]]=[]),a.__events[c[b]].push(d)}}; 177.57 +m.trigger=function(a,c,d){if(a){var b=!0;if(!a.__events)return b;m.isArray(c)||(c=[c]);m.isArray(d)||(d=[]);for(var e=0;e<c.length;e++)if(a.__events[c[e]])for(var p=a.__events[c[e]].slice(0),f=0;f<p.length;f++)m.isFunction(p[f])&&!1===p[f].apply(a,d)&&(b=!1);return b}};m.unbind=function(a,c,d){if(a.__events)if(c==q)delete a.__events;else{m.isArray(c)||(c=[c]);for(var b=0;b<c.length;b++)if(a.__events[c[b]])for(var e=a.__events[c[b]],p=0;p<e.length;p++)if(d==q&&delete e[p],e[p]===d){e.splice(p,1);break}}}; 177.58 +m.proxy=function(a,c,d){return function(){return d?a.apply(c,d):a.apply(c,arguments)}};var W=function(a,c){for(var d=0;d<a.length;d++)A(a[d],c)};m.cleanUpContent=function(a,c,d){if(a){var b=a.childNodes;b&&0<b.length&&m.asap(W,{},[K.apply(b,[0]),d]);c&&s(a,d)}};var H=[],M=[],N=[];m.asap=function(c,d,b){if(!m.isFunction(c))throw"$.asap - argument is not a valid function";H.push(c);M.push(d?d:{});N.push(b?b:[]);a.postMessage("afm-asap","*")};a.addEventListener("message",function(c){c.source===a&&"afm-asap"=== 177.59 +c.data&&(c.stopPropagation(),0<H.length&&H.shift().apply(M.shift(),N.shift()))},!0);var O={};m.parseJS=function(c){if(c){if("string"===typeof c){var d=r.createElement("div");D?MSApp.execUnsafeLocalFunction(function(){d.innerHTML=c}):d.innerHTML=c;c=d}var b=c.getElementsByTagName("script");c=null;for(var e=0;e<b.length;e++)if(0<b[e].src.length&&!O[b[e].src]&&!D){var p=r.createElement("script");p.type=b[e].type;p.src=b[e].src;r.getElementsByTagName("head")[0].appendChild(p);O[b[e].src]=1;p=null}else a.eval(b[e].innerHTML)}}; 177.60 +"click keydown keyup keypress submit load resize change select error".split(" ").forEach(function(a){m.fn[a]=function(c){return c?this.bind(a,c):this.trigger(a)}});["focus","blur"].forEach(function(a){m.fn[a]=function(c){if(0!==this.length){if(c)this.bind(a,c);else for(c=0;c<this.length;c++)try{this[c][a]()}catch(d){}return this}}});m.Deferred=function(){return{reject:function(){},resolve:function(){},promise:{then:function(){},fail:function(){}}}};return m}(window);window.jq=af;"$"in window||(window.$= 177.61 +af);"function"===typeof define&&define.amd?define("appframework",[],function(){return af}):"undefined"!==typeof module&&module.exports&&(module.exports.af=af,module.exports.$=af);window.numOnly||(window.numOnly=function(a){if(void 0===a||""===a)return 0;if(isNaN(parseFloat(a)))if(a.replace)a=a.replace(/[^0-9.-]/g,"");else return 0;return parseFloat(a)})};/* 177.62 + BSD - https://github.com/cburgmer/ayepromise/commit/299eb65b5ce227873b2f1724c8f5b2bfa723680a 177.63 + https://github.com/cburgmer/ayepromise 177.64 +*/ 177.65 +(function(a,n){a.ayepromise=n()})(this,function(){var a={},n=function(){var a=!1;return function(h){return function(){a||(a=!0,h.apply(null,arguments))}}},l=function(a){var h=a&&a.then;if(null!==a&&"object"===typeof a&&"function"===typeof h)return function(){return h.apply(a,arguments)}},k=function(f,h){var g=a.defer(),b=function(a,c){setTimeout(function(){var d;try{d=a(c)}catch(b){g.reject(b);return}d===g.promise?g.reject(new TypeError("Cannot resolve promise with itself")):g.resolve(d)},1)};return{promise:g.promise, 177.66 +callFulfilled:function(a){f&&f.call?b(f,a):g.resolve(a)},callRejected:function(a){h&&h.call?b(h,a):g.reject(a)}}};a.defer=function(){var a=0,h,g=[],b=function(c){a=1;h=c;g.forEach(function(a){a.callFulfilled(h)})},e=function(c){a=2;h=c;g.forEach(function(a){a.callRejected(h)})},c=function(c,d){var b=k(c,d);g.push(b);1===a?b.callFulfilled(h):2===a&&b.callRejected(h);return b.promise},d=function(a){var c;try{c=l(a)}catch(p){e(p);return}if(c){a=c;c=n();try{a(c(d),c(e))}catch(f){c(e)(f)}}else b(a)},p= 177.67 +n();return{resolve:p(d),reject:p(e),promise:{then:c,fail:function(a){return c(null,a)}}}};return a});(function(a){a.Deferred=ayepromise.defer})(af);/* 177.68 + MIT - https://github.com/darius/requestAnimationFrame/commit/4f27a5a21902a883330da4663bea953b2f96cb15#diff-9879d6db96fd29134fc802214163b95a 177.69 + 177.70 + http://paulirish.com/2011/requestanimationframe-for-smart-animating/ 177.71 + http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating 177.72 + requestAnimationFrame polyfill by Erik M?ller. fixes from Paul Irish and Tino Zijdel 177.73 + MIT license 177.74 + 177.75 + Adapted from https://gist.github.com/paulirish/1579671 which derived from 177.76 + http://paulirish.com/2011/requestanimationframe-for-smart-animating/ 177.77 + http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating 177.78 + 177.79 + requestAnimationFrame polyfill by Erik M?ller. 177.80 + Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavi?, Darius Bacon 177.81 + 2011 - Intel 177.82 + Intel 177.83 + 2011 Intel 177.84 + @author Intel 177.85 + @version 2.0 177.86 +*/ 177.87 +(function(a){a.fn.actionsheet=function(a){for(var k,f=0;f<this.length;f++)k=new n(this[f],a);return 1===this.length?k:this};var n=function(){var l=function(k,f){if(this.el="string"===typeof k||k instanceof String?document.getElementById(k):k){if(this instanceof l){if("object"===typeof f)for(var h in f)this[h]=f[h]}else return new l(k,f);var g=this,b;h=function(){};if("string"===typeof f)b=a("<div id='af_actionsheet'><div style='width:100%'>"+f+"<a href='javascript:;' class='cancel'>Cancel</a></div></div>"); 177.88 +else if("object"===typeof f){b=a("<div id='af_actionsheet'><div style='width:100%'></div></div>");var e=a(b.children().get(0));f.push({text:"Cancel",cssClasses:"cancel"});for(var c=0;c<f.length;c++){var d=a("<a href='javascript:;'>"+(f[c].text||"TEXT NOT ENTERED")+"</a>");d[0].onclick=f[c].handler||h;f[c].cssClasses&&0<f[c].cssClasses.length&&d.addClass(f[c].cssClasses);e.append(d)}}a(k).find("#af_actionsheet").remove();a(k).find("#af_action_mask").remove();a(k).append(b);b.vendorCss("Transition", 177.89 +"all 0ms");b.cssTranslate("0,0");b.css("top",window.innerHeight+"px");this.el.style.overflow="hidden";b.on("click","a",function(){g.hideSheet();return!1});this.activeSheet=b;a(k).append("<div id='af_action_mask' style='position:absolute;top:0px;left:0px;right:0px;bottom:0px;z-index:9998;background:rgba(0,0,0,.4)'/>");setTimeout(function(){b.vendorCss("Transition","all 300ms");b.cssTranslate("0,"+-b.height()+"px")},10);a("#af_action_mask").bind("touchstart touchmove touchend click",function(a){a.preventDefault(); 177.90 +a.stopPropagation()})}else window.alert("Could not find element for actionsheet "+k)};l.prototype={activeSheet:null,hideSheet:function(){var k=this;this.activeSheet.off("click","a",function(){k.hideSheet()});a(this.el).find("#af_action_mask").unbind("click").remove();this.activeSheet.vendorCss("Transition","all 0ms");var f=this.activeSheet,h=this.el;setTimeout(function(){f.vendorCss("Transition","all 300ms");f.cssTranslate("0,0px");setTimeout(function(){f.remove();f=null;h.style.overflow="none"}, 177.91 +500)},10)}};return l}()})(af); 177.92 +(function(a){var n=[],l=function(b,e){var c,d;c="string"===typeof b||b instanceof String?document.getElementById(b):a.is$(b)?b[0]:b;c.afCSS3AnimateId||(c.afCSS3AnimateId=a.uuid());d=c.afCSS3AnimateId;n[d]?(n[d].animate(e),c=n[d]):(c=g(c,e),n[d]=c);return c};a.fn.css3Animate=function(a){!a.complete&&a.callback&&(a.complete=a.callback);var e=l(this[0],a);a.complete=null;a.sucess=null;a.failure=null;for(var c=1;c<this.length;c++)e.link(this[c],a);return e};a.css3AnimateQueue=function(){return new g.queue}; 177.93 +var k=a.feat.cssTransformStart,f=a.feat.cssTransformEnd,h=a.feat.cssPrefix.replace(/-/g,"")+"TransitionEnd",h=a.os.fennec||""===a.feat.cssPrefix||a.os.ie?"transitionend":h,h=h.replace(h.charAt(0),h.charAt(0).toLowerCase()),g=function(){var b=function(e,c){if(!(this instanceof b))return new b(e,c);this.callbacksStack=[];this.activeEvent=null;this.countStack=0;this.isActive=!1;this.el=e;this.linkFinishedProxy=a.proxy(this.linkFinished,this);if(this.el){this.animate(c);var d=this;af(this.el).bind("destroy", 177.94 +function(){var a=d.el.afCSS3AnimateId;d.callbacksStack=[];n[a]&&delete n[a]})}};b.prototype={animate:function(b){this.isActive&&this.cancel();this.isActive=!0;if(b){var c=!!b.addClass,d,p,t=numOnly(b.time);if(c)b.removeClass?af(this.el).replaceClass(b.removeClass,b.addClass):af(this.el).addClass(b.addClass);else{0===t&&(b.time=0);b.y||(b.y=0);b.x||(b.x=0);b.previous&&(d=new a.getCssMatrix(this.el),b.y+=numOnly(d.f),b.x+=numOnly(d.e));b.origin||(b.origin="0% 0%");b.scale||(b.scale="1");b.rotateY|| 177.95 +(b.rotateY="0");b.rotateX||(b.rotateX="0");b.skewY||(b.skewY="0");b.skewX||(b.skewX="0");b.timingFunction||(b.timingFunction="linear");if("number"===typeof b.x||-1===b.x.indexOf("%")&&-1===b.x.toLowerCase().indexOf("px")&&-1===b.x.toLowerCase().indexOf("deg"))b.x=parseInt(b.x,10)+"px";if("number"===typeof b.y||-1===b.y.indexOf("%")&&-1===b.y.toLowerCase().indexOf("px")&&-1===b.y.toLowerCase().indexOf("deg"))b.y=parseInt(b.y,10)+"px";d="translate"+k+b.x+","+b.y+f+" scale("+parseFloat(b.scale)+") rotate("+ 177.96 +b.rotateX+")";a.os.opera||(d+=" rotateY("+b.rotateY+")");d+=" skew("+b.skewX+","+b.skewY+")";this.el.style[a.feat.cssPrefix+"Transform"]=d;this.el.style[a.feat.cssPrefix+"BackfaceVisibility"]="hidden";void 0!==b.opacity&&(this.el.style.opacity=b.opacity);b.width&&(this.el.style.width=b.width);b.height&&(this.el.style.height=b.height);this.el.style[a.feat.cssPrefix+"TransitionProperty"]="all";-1===(""+b.time).indexOf("s")?(d="ms",p=b.time+d):-1!==b.time.indexOf("ms")?(d="ms",p=b.time):(d="s",p=b.time+ 177.97 +d);b.delay&&(this.el.style[a.feat.cssPrefix+"TransitionDelay"]=b.delay);this.el.style[a.feat.cssPrefix+"TransitionDuration"]=p;this.el.style[a.feat.cssPrefix+"TransitionTimingFunction"]=b.timingFunction;this.el.style[a.feat.cssPrefix+"TransformOrigin"]=b.origin}this.callbacksStack.push({complete:b.complete,success:b.success,failure:b.failure});this.countStack++;var g=this;p=window.getComputedStyle(this.el);c&&(c=p[a.feat.cssPrefix+"TransitionDuration"],t=numOnly(c),b.time=t,-1!==c.indexOf("ms")?d= 177.98 +"ms":(d="s",b.time*=1E3));0===t||"ms"===d&&5>t||"none"===p.display?a.asap(a.proxy(this.finishAnimation,this,[!1])):(this.activeEvent=function(a){clearTimeout(g.timeout);g.finishAnimation(a);g.el.removeEventListener(h,g.activeEvent,!1)},g.timeout=setTimeout(this.activeEvent,numOnly(b.time)+50),this.el.addEventListener(h,this.activeEvent,!1))}else window.alert("Please provide configuration options for animation of "+this.el.id)},addCallbackHook:function(a){a&&this.callbacksStack.push(a);this.countStack++; 177.99 +return this.linkFinishedProxy},linkFinished:function(a){a?this.cancel():this.finishAnimation()},finishAnimation:function(a){a&&a.preventDefault&&a.preventDefault();this.isActive&&(this.countStack--,0===this.countStack&&this.fireCallbacks(!1))},fireCallbacks:function(a){this.clearEvents();var c=this.callbacksStack;this.cleanup();for(var d=0;d<c.length;d++){var b=c[d].complete,f=c[d].success,h=c[d].failure;"function"===typeof b&&b(a);a&&"function"===typeof h?h():"function"===typeof f&&f()}},cancel:function(){this.isActive&& 177.100 +this.fireCallbacks(!0)},cleanup:function(){this.callbacksStack=[];this.isActive=!1;this.countStack=0},clearEvents:function(){this.activeEvent&&this.el.removeEventListener(h,this.activeEvent,!1);this.activeEvent=null},link:function(a,c){var d={complete:c.complete,success:c.success,failure:c.failure};c.complete=this.addCallbackHook(d);c.success=null;c.failure=null;l(a,c);c.complete=d.complete;c.success=d.success;c.failure=d.failure;return this}};return b}();g.queue=function(){return{elements:[],push:function(a){this.elements.push(a)}, 177.101 +pop:function(){return this.elements.pop()},run:function(){var a=this;if(0!==this.elements.length&&("function"===typeof this.elements[0]&&this.shift()(),0!==this.elements.length)){var e=this.shift();0<this.elements.length&&(e.complete=function(c){c||a.run()});g(document.getElementById(e.id),e)}},shift:function(){return this.elements.shift()}}}})(af);Date.now||(Date.now=function(){return(new Date).getTime()}); 177.102 +(function(){for(var a=["webkit","moz","ms"],n=0;n<a.length&&!window.requestAnimationFrame;++n){var l=a[n];window.requestAnimationFrame=window[l+"RequestAnimationFrame"];window.cancelAnimationFrame=window[l+"CancelAnimationFrame"]||window[l+"CancelRequestAnimationFrame"]}if(/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)||!window.requestAnimationFrame||!window.cancelAnimationFrame){var k=0;window.requestAnimationFrame=function(a){var h=Date.now(),g=Math.max(k+16,h);return setTimeout(function(){a(k= 177.103 +g)},g-h)};window.cancelAnimationFrame=clearTimeout}})(); 177.104 +(function(a){var n=[];a.fn.animateCss=function(f){var h,g="string"===typeof this[0]||this[0]instanceof String?document.getElementById(this[0]):a.is$(this[0])?this[0][0]:this[0];g.afAnimateId||(g.afAnimateId=a.uuid());h=g.afAnimateId;n[h]?(f&&n[h].animate(f),f=n[h]):(f=l(g,f),n[h]=f);return f};var l=function(a,h){if(!(this instanceof l))return new l(a,h);if(this.el=a){h&&this.animate(h);var g=this;af(this.el).bind("destroy",function(){var a=g.el.afAnimateId;n[a]&&delete n[a]})}};l.prototype={animationTimer:null, 177.105 +isAnimating:!1,startX:0,startY:0,runTime:0,endX:0,endY:0,currX:0,currY:0,animationStartTime:0,pauseTime:0,completeCB:null,easingFn:"linear",animateOpts:{},updateCb:null,animate:function(f){this.isAnimating||(this.isAnimating=!0,window.cancelAnimationFrame(this.animationTimer),f||(f={x:0,y:0,duration:0}),this.easingFn=f.easing||"linear",this.completeCB=f.complete||null,this.updateCB=f.update||null,this.runTime=numOnly(f.duration),f.complete&&delete f.complete,this.animateOpts=f,this.startTime=Date.now(), 177.106 +this.startMatrix=a.getCssMatrix(this.el),0===this.runTime&&this.doAnimate())},start:function(){this.doAnimate()},doAnimate:function(){var a=Date.now(),h,g=this;0===this.runTime||a>=this.startTime+this.runTime?(g.setPosition(this.animateOpts.x,this.animateOpts.y),g.isAnimating=!1,this.updateCB&&this.updateCB({x:this.animateOpts.x,y:this.animateOpts.y}),this.completeCB&&this.completeCB()):(a=(a-this.startTime)/this.runTime,h=k[this.easingFn](1<a?1:a),a=(this.animateOpts.x-this.startMatrix.e)*h+this.startMatrix.e, 177.107 +h=(this.animateOpts.y-this.startMatrix.f)*h+this.startMatrix.f,this.setPosition(a,h),this.updateCB&&this.updateCB({x:a,y:h}),this.isAnimating&&(this.animationTimer=window.requestAnimationFrame(function(){g.doAnimate()})))},setPosition:function(f,h){this.el.style[a.feat.cssPrefix+"Transform"]="matrix3d( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, "+f+", "+h+", 0, 1 )";this.currX=f;this.currY=h},stop:function(){this.isAnimating=!1;window.cancelAnimationFrame(this.animationTimer);this.pauseTime=Date.now()-this.startTime}, 177.108 +resume:function(){this.isAnimating=!0;this.startTime=Date.now()-this.pauseTime;this.doAnimate()}};var k={linear:function(a){return a},easeOutSine:function(a){return Math.sin(a*Math.PI/2)}}})(af); 177.109 +(function(a){a.passwordBox=function(){return new n};var n=function(){this.oldPasswords={}};n.prototype={showPasswordPlainText:!1,getOldPasswords:function(l){var k=l&&document.getElementById(l)?document.getElementById(l):document;if(k){l=k.getElementsByTagName("input");for(k=0;k<l.length;k++)"password"===l[k].type&&a.os.webkit&&(l[k].type="text",a(l[k]).vendorCss("TextSecurity","disc"))}else window.alert("Could not find container element for passwordBox "+l)},changePasswordVisiblity:function(l,k){l= 177.110 +parseInt(l,10);var f=document.getElementById(k);1===l?a(f).vendorCss("TextSecurity","none"):a(f).vendorCss("TextSecurity","disc");a.os.webkit||(f.type=1===l?"text":"password")}}})(af); 177.111 +(function(a){function n(){if(a.os.android&&!a.os.chrome&&a.os.webkit){var f=!1;a.bind(a.touchLayer,["cancel-enter-edit","exit-edit"],function(){if(f){f=!1;for(var a in l){var b;l[a].el?b=!0:(delete l[a],b=!1);b&&l[a].androidFormsMode&&l[a].stopFormsMode()}}})}k=!0}var l=[];a.fn.scroller=function(h){for(var g,b,e=0;e<this.length;e++)g=this[e],g.afScrollerId||(g.afScrollerId=a.uuid()),b=g.afScrollerId,l[b]?g=l[b]:(h||(h={}),a.feat.nativeTouchScroll||(h.useJsScroll=!0),g=f(this[e],h),l[b]=g);return 1=== 177.112 +this.length?g:this};var k=!1,f=function(){function f(c,d){var b=document.createElement("div");b.style.position="absolute";b.style.width=c+"px";b.style.height=d+"px";b.style[a.feat.cssPrefix+"BorderRadius"]="2px";b.style.borderRadius="2px";b.style.display="none";b.className="scrollBar";b.style.background="black";return b}var g,b,e=function(c,d){this.el=c;this.afEl=a(this.el);for(var b in d)this[b]=d[b]};e.prototype={refresh:!1,refreshContent:"Pull to Refresh",refreshHangTimeout:2E3,refreshHeight:60, 177.113 +refreshElement:null,refreshCancelCB:null,refreshRunning:!1,scrollTop:0,scrollLeft:0,preventHideRefresh:!0,verticalScroll:!0,horizontalScroll:!1,refreshTriggered:!1,moved:!1,eventsActive:!1,rememberEventsActive:!1,scrollingLocked:!1,autoEnable:!0,blockFormsFix:!1,loggedPcentY:0,loggedPcentX:0,infinite:!1,infiniteEndCheck:!1,infiniteTriggered:!1,scrollSkip:!1,scrollTopInterval:null,scrollLeftInterval:null,bubbles:!0,lockBounce:!1,initScrollProgress:!1,_scrollTo:function(a,d){d=parseInt(d,10);if(0=== 177.114 +d||isNaN(d))this.el.scrollTop=Math.abs(a.y),this.el.scrollLeft=Math.abs(a.x);else{var b=(this.el.scrollTop-a.y)/Math.ceil(d/10),e=(this.el.scrollLeft-a.x)/Math.ceil(d/10),f=this,h=Math.ceil(this.el.scrollTop-a.y)/b,g=Math.ceil(this.el.scrollLeft-a.x)/b,k=0,l=0;f.scrollTopInterval=window.setInterval(function(){f.el.scrollTop-=b;l++;l>=h&&(f.el.scrollTop=a.y,clearInterval(f.scrollTopInterval))},10);f.scrollLeftInterval=window.setInterval(function(){f.el.scrollLeft-=e;k++;k>=g&&(f.el.scrollLeft=a.x, 177.115 +clearInterval(f.scrollLeftInterval))},10)}},enable:function(){},disable:function(){},hideScrollbars:function(){},addPullToRefresh:function(){},_scrollToTop:function(a){this._scrollTo({x:0,y:0},a)},_scrollToBottom:function(a){this._scrollTo({x:0,y:this.el.scrollHeight-this.el.offsetHeight},a)},scrollToBottom:function(a){return this._scrollToBottom(a)},scrollToTop:function(a){return this._scrollToTop(a)},init:function(c,d){this.el=c;this.afEl=a(this.el);this.defaultProperties();for(var b in d)this[b]= 177.116 +d[b];var e=this,f=function(){e.eventsActive&&(!a.feat.nativeTouchScroll&&(!a.ui||a.ui.activeDiv===e.container))&&e.adjustScroll()};this.afEl.bind("destroy",function(){e.disable(!0);var c=e.el.afScrollerId;l[c]&&delete l[c];a.unbind(a.touchLayer,"orientationchange-reshape",f)});a.bind(a.touchLayer,"orientationchange-reshape",f);a(window).bind("resize",f)},needsFormsFix:function(c){return this.useJsScroll&&this.isEnabled()&&"none"!==this.el.style.display&&0<a(c).closest(this.afEl).size()},handleEvent:function(a){if(!this.scrollingLocked)switch(a.type){case "touchstart":clearInterval(this.scrollTopInterval); 177.117 +this.preventHideRefresh=!this.refreshRunning;this.moved=!1;if(a.target.getAttribute("no-scroll"))return a.preventDefault();this.onTouchStart(a);this.bubbles||a.stopPropagation();break;case "touchmove":this.onTouchMove(a);this.bubbles||a.stopPropagation();break;case "touchend":this.onTouchEnd(a);this.bubbles||a.stopPropagation();break;case "scroll":this.onScroll(a)}},coreAddPullToRefresh:function(c){c&&(this.refreshElement=c);null===this.refreshElement?(c=document.getElementById(this.container.id+ 177.118 +"_pulldown"),c=null!==c?a(c):a("<div id='"+this.container.id+"_pulldown' class='afscroll_refresh' style='position:relative;height:60px;text-align:center;line-height:60px;font-weight:bold;'>"+this.refreshContent+"</div>")):c=a(this.refreshElement);c=c.get(0);this.refreshContainer=a("<div style='overflow:hidden;height:0;width:100%;display:none;background:inherit;-webkit-backface-visibility: hidden !important;'></div>");a(this.el).prepend(this.refreshContainer.prepend(c));this.refreshContainer=this.refreshContainer[0]}, 177.119 +fireRefreshRelease:function(c){if(this.refresh&&c&&(this.setRefreshContent("Refreshing..."),c=!1!==a.trigger(this,"refresh-release",[c]),this.preventHideRefresh=!1,this.refreshRunning=!0,c)){var d=this;0<this.refreshHangTimeout&&(this.refreshCancelCB=setTimeout(function(){d.hideRefresh()},this.refreshHangTimeout))}},setRefreshContent:function(c){a(this.container).find(".afscroll_refresh").html(c)},lock:function(){this.scrollingLocked||(this.scrollingLocked=!0,(this.rememberEventsActive=this.eventsActive)&& 177.120 +this.disable())},unlock:function(){this.scrollingLocked&&(this.scrollingLocked=!1,this.rememberEventsActive&&this.enable())},scrollToItem:function(c,d){a.is$(c)||(c=a(c));var b,e;"bottom"===d?(b=c.offset(),b=b.top-this.afEl.offset().bottom+b.height,b+=4):(b=c.offset().top,b-=document.body.scrollTop,e=this.afEl.offset().top,document.body.scrollTop<e&&(b-=e),b-=4);this.scrollBy({y:b,x:0},0)},setPaddings:function(c,d){var b=a(this.el),e=numOnly(b.css("paddingTop"));b.css("paddingTop",c+"px").css("paddingBottom", 177.121 +d+"px");this.scrollBy({y:c-e,x:0})},divide:function(a,d){return 0!==d?a/d:0},isEnabled:function(){return this.eventsActive},addInfinite:function(){this.infinite=!0},clearInfinite:function(){this.infiniteTriggered=!1;this.scrollSkip=!0},scrollTo:function(a,d){return this._scrollTo(a,d)},updateP2rHackPosition:function(){}};g=function(c,d){this.init(c,d);if(d.hasParent)this.container=this.el.parentNode;else{var b=a.create("div",{});b.append(a(this.el).contents());a(this.el).append(b);this.container= 177.122 +this.el;this.el=b.get(0)}this.container.afScrollerId=c.afScrollerId;this.afEl=a(this.container);"hidden"!==this.container.style.overflow&&(this.container.style.overflow="hidden");this.addPullToRefresh(null,!0);d.autoEnable&&(this.autoEnable=d.autoEnable);this.autoEnable&&this.enable(!0);this.verticalScroll&&(!0===this.verticalScroll&&!0===this.scrollBars)&&(b=f(5,20),b.style.top="0px",this.vScrollCSS&&(b.className=this.vScrollCSS),b.style.display="none",this.container.appendChild(b),this.vscrollBar= 177.123 +b);this.horizontalScroll&&(!0===this.horizontalScroll&&!0===this.scrollBars)&&(b=f(20,5),b.style.bottom="0px",this.hScrollCSS&&(b.className=this.hScrollCSS),b.style.display="none",this.container.appendChild(b),this.hscrollBar=b);this.horizontalScroll&&(this.el.style.cssFloat="left");this.el.hasScroller=!0};b=function(c,d){d.nativeParent&&(c=c.parentNode);this.init(c,d);var b=a(c);if(!0===d.replaceParent){var e=b.parent();b.css("height",e.height()).css("width",e.width());b.insertBefore(b.parent()); 177.124 +e.remove()}this.container=this.el;b.css("-webkit-overflow-scrolling","touch");d.autoEnable&&(this.autoEnable=d.autoEnable);this.autoEnable&&this.enable()};b.prototype=new e;g.prototype=new e;b.prototype.defaultProperties=function(){this.refreshContainer=null;this.dX=this.cX=this.dY=this.cY=0;this.cancelPropagation=!1;this.yReset=this.xReset=this.loggedPcentX=this.loggedPcentY=0;var a=this;this.adjustScrollOverflowProxy=function(){a.afEl.css("overflow","auto");a.afEl.parent().css("overflow","hidden")}}; 177.125 +b.prototype.enable=function(a){this.eventsActive||(this.eventsActive=!0,this.el.style.overflow="auto",a?this.scrollToTop(0):this.adjustScroll(),this.el.addEventListener("touchstart",this,!1),this.el.addEventListener("scroll",this,!1),this.updateP2rHackPosition())};b.prototype.disable=function(c){this.eventsActive&&(this.logPos(this.el.scrollLeft,this.el.scrollTop),!c&&!a.ui&&(this.el.style.overflow="hidden"),this.el.removeEventListener("touchstart",this,!1),this.el.removeEventListener("touchmove", 177.126 +this,!1),this.el.removeEventListener("touchend",this,!1),this.el.removeEventListener("scroll",this,!1),this.eventsActive=!1)};b.prototype.addPullToRefresh=function(a,d){d||(this.refresh=!0);this.refresh&&!0===this.refresh&&(this.coreAddPullToRefresh(a),this.refreshContainer.style.position="absolute",this.refreshContainer.style.top="-60px",this.refreshContainer.style.height="60px",this.refreshContainer.style.display="block",this.updateP2rHackPosition())};b.prototype.updateP2rHackPosition=function(){if(!this.refresh)return a(this.el).find(".p2rhack").remove(); 177.127 +var c=a(this.el).find(".p2rhack");0===c.length&&(a(this.el).append("<div class='p2rhack' style='position:absolute;width:1px;height:1px;opacity:0;background:transparent;z-index:-1;-webkit-transform:translate3d(-1px,0,0);'></div>"),c=a(this.el).find(".p2rhack"));c.css("top",this.el.scrollHeight+this.refreshHeight+1+"px")};b.prototype.onTouchStart=function(a){this.lastScrollInfo={top:0};this.xReset=this.yReset=0;this.verticalScroll&&(0===this.el.scrollTop&&this.refresh&&(this.el.scrollTop=1,this.yReset= 177.128 +-1),this.el.scrollTop===this.el.scrollHeight-this.el.clientHeight&&this.infinite&&(this.el.scrollTop-=1,this.yReset=1));this.horizontalScroll&&(0===this.el.scrollLeft&&(this.el.scrollLeft=1,this.xReset=-1),this.el.scrollLeft===this.el.scrollWidth-this.el.clientWidth&&(this.el.scrollLeft-=1,this.xReset=1));this.refreshCancelCB&&clearTimeout(this.refreshCancelCB);this.refresh&&this.el.addEventListener("touchend",this,!1);this.el.addEventListener("touchmove",this,!1);this.dY=a.touches[0].pageY;this.dX= 177.129 +a.touches[0].pageX;this.startTop=this.el.scrollTop;this.startLeft=this.el.scrollLeft;(this.refresh||this.infinite)&&this.refresh&&0>this.dY&&this.showRefresh()};b.prototype.onTouchMove=function(c){var d=c.touches[0].pageY-this.dY,b=c.touches[0].pageX-this.dX,e=this.el.scrollHeight-this.el.scrollTop===this.el.clientHeight&&0>d,f=this.el.scrollWidth-this.el.scrollLeft===this.el.clientWidth&&0>b,h="input"!==c.target.tagName.toLowerCase();this.verticalScroll&&0===this.startTop&&0===this.el.scrollTop&& 177.130 +0<d&&h&&c.preventDefault();this.horizontalScroll&&0===this.startTop&&0===this.el.scrollLeft&&0<b&&h&&c.preventDefault();this.verticalScroll&&e&&h&&c.preventDefault();this.horizontalScroll&&f&&h&&c.preventDefault();this.moved||(a.trigger(this,"scrollstart",[this.el,{x:b,y:d}]),a.trigger(a.touchLayer,"scrollstart",[this.el,{x:b,y:d}]),this.refresh||this.el.addEventListener("touchend",this,!1),this.moved=!0);this.horizontalScroll&&Math.abs(d)>Math.abs(b)&&c.preventDefault();this.refresh&&this.el.scrollTop< 177.131 +-this.refreshHeight?this.showRefresh():this.refresh&&this.refreshTriggered&&this.refreshRunning&&this.el.scrollTop>this.refreshHeight?(this.refreshRunning=this.refreshTriggered=!1,this.refreshCancelCB&&clearTimeout(this.refreshCancelCB),this.hideRefresh(!1),this.setRefreshContent("Pull to Refresh"),a.trigger(this,"refresh-cancel")):this.refresh&&(this.refreshTriggered&&!this.refreshRunning&&this.el.scrollTop>-this.refreshHeight)&&(this.refreshRunning=this.refreshTriggered=!1,this.refreshCancelCB&& 177.132 +clearTimeout(this.refreshCancelCB),this.hideRefresh(!1),this.setRefreshContent("Pull to Refresh"),a.trigger(this,"refresh-cancel"));this.cY=d;this.cX=b;this.lastScrollInfo.top=this.cY;this.initScrollProgress&&(a.trigger(this,"scroll",[{x:-this.el.scrollLeft,y:-this.el.scrollTop}]),a.trigger(a.touchLayer,"scroll",[{x:-this.el.scrollLeft,y:-this.el.scrollTop}]))};b.prototype.showRefresh=function(){this.refreshTriggered||(this.refreshTriggered=!0,this.setRefreshContent("Release to Refresh"),a.trigger(this, 177.133 +"refresh-trigger"))};b.prototype.onTouchEnd=function(){var c=this.el.scrollTop<=-this.refreshHeight;this.fireRefreshRelease(c,!0);this.moved||(this.el.scrollTop+=this.yReset,this.el.scrollLeft+=this.xReset);if(c&&this.refresh){var d=a.create("<div style='height:"+this.el.clientHeight+this.refreshHeight+"px;width:1px;-webkit-transform:translated3d(-1px,0,0)'></div>");a(this.el).append(d);this.refreshContainer.style.top="0px";this.refreshContainer.style.position="";setTimeout(function(){d.remove()})}this.el.removeEventListener("touchmove", 177.134 +this,!1);this.el.removeEventListener("touchend",this,!1);this.infiniteEndCheck=!0;this.infinite&&(!this.infiniteTriggered&&this.el.scrollTop>=this.el.scrollHeight-this.el.clientHeight)&&(this.infiniteTriggered=!0,a.trigger(this,"infinite-scroll"),this.infiniteEndCheck=!0);this.touchEndFired=!0;var b=this,e=this.el.scrollTop,f=this.el.scrollLeft,h=0;clearInterval(b.nativePolling);b.nativePolling=setInterval(function(){h++;25===h&&b.initScrollProgress&&(a.trigger(b,"scroll",[{x:-b.el.scrollLeft+b.cX, 177.135 +y:-b.el.scrollTop+b.cY}]),a.trigger(a.touchLayer,"scroll",[{x:-b.el.scrollLeft+b.cX,y:-b.el.scrollTop+b.cY}]));if(200<=h)clearInterval(b.nativePolling),b.initScrollProgress&&(a.trigger(b,"scroll",[{x:-b.el.scrollLeft,y:-b.el.scrollTop}]),a.trigger(a.touchLayer,"scroll",[{x:-b.el.scrollLeft,y:-b.el.scrollTop}]));else if(b.el.scrollTop!==e||b.el.scrollLeft!==f)clearInterval(b.nativePolling),a.trigger(a.touchLayer,"scrollend",[b.el]),a.trigger(b,"scrollend",[b.el]),b.initScrollProgress&&(a.trigger(b, 177.136 +"scroll",[{x:-b.el.scrollLeft,y:-b.el.scrollTop}]),a.trigger(a.touchLayer,"scroll",[{x:-b.el.scrollLeft,y:-b.el.scrollTop}]))},20)};b.prototype.hideRefresh=function(c){if(!this.preventHideRefresh){var d=this,b=function(c){d.refreshContainer.style.top="-60px";d.refreshContainer.style.position="absolute";d.dY=d.cY=0;c||(d.el.style[a.feat.cssPrefix+"Transform"]="none",d.el.style[a.feat.cssPrefix+"TransitionProperty"]="none",d.el.scrollTop=0,d.logPos(d.el.scrollLeft,0),d.refreshRunning=!1,d.setRefreshContent("Pull to Refresh"), 177.137 +a.trigger(d,"refresh-finish"))};!1===c||!d.afEl.css3Animate?b():d.afEl.css3Animate({y:d.el.scrollTop-d.refreshHeight+"px",x:"0%",time:"325ms",complete:b});this.refreshTriggered=!1}};b.prototype.hideScrollbars=function(){};b.prototype.scrollTo=function(a,d){this.logPos(a.x,a.y);a.x*=-1;a.y*=-1;return this._scrollTo(a,d)};b.prototype.scrollBy=function(a,d){a.x+=this.el.scrollLeft;a.y+=this.el.scrollTop;this.logPos(this.el.scrollLeft,this.el.scrollTop);return this._scrollTo(a,d)};b.prototype.scrollToBottom= 177.138 +function(a){this._scrollToBottom(a);this.logPos(this.el.scrollLeft,this.el.scrollTop)};b.prototype.onScroll=function(){this.infinite&&this.touchEndFired?this.touchEndFired=!1:this.scrollSkip?this.scrollSkip=!1:(this.infinite&&(!this.infiniteTriggered&&this.el.scrollTop>=this.el.scrollHeight-this.el.clientHeight)&&(this.infiniteTriggered=!0,a.trigger(this,"infinite-scroll"),this.infiniteEndCheck=!0),this.infinite&&(this.infiniteEndCheck&&this.infiniteTriggered)&&(this.infiniteEndCheck=!1,a.trigger(this, 177.139 +"infinite-scroll-end")))};b.prototype.logPos=function(a,d){this.loggedPcentX=this.divide(a,this.el.scrollWidth);this.loggedPcentY=this.divide(d,this.el.scrollHeight);this.scrollLeft=a;this.scrollTop=d;isNaN(this.loggedPcentX)&&(this.loggedPcentX=0);isNaN(this.loggedPcentY)&&(this.loggedPcentY=0)};b.prototype.adjustScroll=function(){this.adjustScrollOverflowProxy();this.el.scrollLeft=this.loggedPcentX*this.el.scrollWidth;this.el.scrollTop=this.loggedPcentY*this.el.scrollHeight;this.logPos(this.el.scrollLeft, 177.140 +this.el.scrollTop)};g.prototype.defaultProperties=function(){this.boolScrollLock=!1;this.elementInfo=this.currentScrollingObject=null;this.verticalScroll=!0;this.horizontalScroll=!1;this.scrollBars=!0;this.hscrollBar=this.vscrollBar=null;this.vScrollCSS=this.hScrollCSS="scrollBar";this.firstEventInfo=null;this.moved=!1;this.preventPullToRefresh=!0;this.refreshSafeKeep=this.androidFormsMode=this.isScrolling=!1;this.lastScrollbar="";this.scrollingFinishCB=this.container=this.finishScrollingObject=null; 177.141 +this.androidPerfHack=this.loggedPcentX=this.loggedPcentY=0};g.prototype.enable=function(a){this.eventsActive||(this.eventsActive=!0,a?this.scrollerMoveCSS({x:0,y:0},0):this.adjustScroll(),this.container.addEventListener("touchstart",this,!1),this.container.addEventListener("touchmove",this,!1),this.container.addEventListener("touchend",this,!1))};g.prototype.adjustScroll=function(){var a=this.getViewportSize();this.scrollerMoveCSS({x:Math.round(this.loggedPcentX*(this.el.clientWidth-a.w)),y:Math.round(this.loggedPcentY* 177.142 +(this.el.clientHeight-a.h))},0)};g.prototype.disable=function(){if(this.eventsActive){var a=this.getCSSMatrix(this.el);this.logPos(numOnly(a.e)-numOnly(this.container.scrollLeft),numOnly(a.f)-numOnly(this.container.scrollTop));this.container.removeEventListener("touchstart",this,!1);this.container.removeEventListener("touchmove",this,!1);this.container.removeEventListener("touchend",this,!1);this.eventsActive=!1}};g.prototype.addPullToRefresh=function(a,d){d||(this.refresh=!0);this.refresh&&!0=== 177.143 +this.refresh&&(this.coreAddPullToRefresh(a),this.el.style.overflow="visible")};g.prototype.hideScrollbars=function(){this.hscrollBar&&(this.hscrollBar.style.display="none",this.hscrollBar.style[a.feat.cssPrefix+"TransitionDuration"]="0ms");this.vscrollBar&&(this.vscrollBar.style.display="none",this.vscrollBar.style[a.feat.cssPrefix+"TransitionDuration"]="0ms")};g.prototype.getViewportSize=function(){var a=window.getComputedStyle(this.container);isNaN(numOnly(a.paddingTop))&&window.alert(typeof a.paddingTop+ 177.144 +"::"+a.paddingTop+":");return{h:this.container.clientHeight>window.innerHeight?window.innerHeight:this.container.clientHeight-numOnly(a.paddingTop)-numOnly(a.paddingBottom),w:this.container.clientWidth>window.innerWidth?window.innerWidth:this.container.clientWidth-numOnly(a.paddingLeft)-numOnly(a.paddingRight)}};g.prototype.onTouchStart=function(c){this.moved=!1;this.currentScrollingObject=null;a(this.el).animateCss().stop();if(this.container&&(this.refreshCancelCB&&(clearTimeout(this.refreshCancelCB), 177.145 +this.refreshCancelCB=null),this.scrollingFinishCB&&(clearTimeout(this.scrollingFinishCB),this.scrollingFinishCB=null),!(1!==c.touches.length||this.boolScrollLock)&&!(c.touches[0].target&&void 0!==c.touches[0].target.type&&"select"===c.touches[0].target.tagName.toLowerCase()))){var d={top:0,left:0,speedY:0,speedX:0,absSpeedY:0,absSpeedX:0,deltaY:0,deltaX:0,absDeltaY:0,absDeltaX:0,y:0,x:0,duration:0};this.elementInfo={};var b=this.getViewportSize();this.elementInfo.bottomMargin=b.h;this.elementInfo.maxTop= 177.146 +this.el.clientHeight-this.elementInfo.bottomMargin;0>this.elementInfo.maxTop&&(this.elementInfo.maxTop=0);this.elementInfo.divHeight=this.el.clientHeight;this.elementInfo.rightMargin=b.w;this.elementInfo.maxLeft=this.el.clientWidth-this.elementInfo.rightMargin;0>this.elementInfo.maxLeft&&(this.elementInfo.maxLeft=0);this.elementInfo.divWidth=this.el.clientWidth;this.elementInfo.hasVertScroll=this.verticalScroll||0<this.elementInfo.maxTop;this.elementInfo.hasHorScroll=0<this.elementInfo.maxLeft;this.elementInfo.requiresVScrollBar= 177.147 +this.vscrollBar&&this.elementInfo.hasVertScroll;this.elementInfo.requiresHScrollBar=this.hscrollBar&&this.elementInfo.hasHorScroll;this.saveEventInfo(c);this.saveFirstEventInfo(c);c=this.getCSSMatrix(this.el);d.top=numOnly(c.f)-numOnly(this.container.scrollTop);d.left=numOnly(c.e)-numOnly(this.container.scrollLeft);this.container.scrollTop=this.container.scrollLeft=0;this.currentScrollingObject=this.el;this.refresh&&0===d.top?(this.refreshContainer.style.display="block",this.refreshHeight=this.refreshContainer.firstChild.clientHeight, 177.148 +this.refreshContainer.firstChild.style.top=-this.refreshHeight+"px",this.refreshContainer.style.overflow="visible",this.preventPullToRefresh=!1):0>d.top&&(this.preventPullToRefresh=!0,this.refresh&&(this.refreshContainer.style.overflow="hidden"));d.x=d.left;d.y=d.top;this.setVScrollBar(d,0,0)&&(this.vscrollBar.style.right="0px",this.vscrollBar.style[a.feat.cssPrefix+"Transition"]="",a(this.vscrollBar).animateCss().stop());this.setHScrollBar(d,0,0)&&(this.container.clientHeight>window.innerHeight? 177.149 +this.hscrollBar.style.top=window.innerHeight-numOnly(this.hscrollBar.style.height)+"px":this.hscrollBar.style.bottom=numOnly(this.hscrollBar.style.height),this.hscrollBar.style[a.feat.cssPrefix+"Transition"]="",a(this.hscrollBar).animateCss().stop());this.lastScrollInfo=d;this.hasMoved=!1;0===this.elementInfo.maxTop&&0===this.elementInfo.maxLeft&&this.lockBounce?this.scrollToTop(0):this.scrollerMoveCSS(this.lastScrollInfo,0);this.scrollerMoveCSS(this.lastScrollInfo,0)}};g.prototype.getCSSMatrix=function(c){if(this.androidFormsMode){var d= 177.150 +parseInt(c.style.marginTop,10);c=parseInt(c.style.marginLeft,10);isNaN(d)&&(d=0);isNaN(c)&&(c=0);return{f:d,e:c}}return a.getCssMatrix(c)};g.prototype.saveEventInfo=function(a){this.lastEventInfo={pageX:a.touches[0].pageX,pageY:a.touches[0].pageY,time:a.timeStamp}};g.prototype.saveFirstEventInfo=function(a){this.firstEventInfo={pageX:a.touches[0].pageX,pageY:a.touches[0].pageY,time:a.timeStamp}};g.prototype.setVScrollBar=function(a,d,b){if(!this.elementInfo.requiresVScrollBar)return!1;var e=parseFloat(this.elementInfo.bottomMargin/ 177.151 +this.elementInfo.divHeight)*this.elementInfo.bottomMargin+"px";numOnly(e)>this.elementInfo.bottomMargin&&(e=this.elementInfo.bottomMargin+"px");e!==this.vscrollBar.style.height&&(this.vscrollBar.style.height=e);a=this.elementInfo.bottomMargin-numOnly(this.vscrollBar.style.height)-(this.elementInfo.maxTop+a.y)/this.elementInfo.maxTop*(this.elementInfo.bottomMargin-numOnly(this.vscrollBar.style.height));a>this.elementInfo.bottomMargin&&(a=this.elementInfo.bottomMargin);0>a&&(a=0);this.scrollbarMoveCSS(this.vscrollBar, 177.152 +{x:0,y:a},d,b);return!0};g.prototype.setHScrollBar=function(a,d,b){if(!this.elementInfo.requiresHScrollBar)return!1;var e=parseFloat(this.elementInfo.rightMargin/this.elementInfo.divWidth)*this.elementInfo.rightMargin+"px";e!==this.hscrollBar.style.width&&(this.hscrollBar.style.width=e);a=this.elementInfo.rightMargin-numOnly(this.hscrollBar.style.width)-(this.elementInfo.maxLeft+a.x)/this.elementInfo.maxLeft*(this.elementInfo.rightMargin-numOnly(this.hscrollBar.style.width));a>this.elementInfo.rightMargin&& 177.153 +(a=this.elementInfo.rightMargin);0>a&&(a=0);this.scrollbarMoveCSS(this.hscrollBar,{x:a,y:0},d,b);return!0};g.prototype.onTouchMove=function(c){if(null!==this.currentScrollingObject&&(!c.target||!(c.target.getAttribute("type")&&-1!==c.target.getAttribute("type").toLowerCase().indexOf("range")))){var d=this.calculateMovement(c);this.calculateTarget(d);this.lastScrollInfo=d;this.moved||(a.trigger(this,"scrollstart",[this.el,{x:this.lastScrollInfo.top,y:this.lastScrollInfo.left}]),a.trigger(a.touchLayer, 177.154 +"scrollstart",[this.el,{x:this.lastScrollInfo.top,y:this.lastScrollInfo.left}]),this.elementInfo.requiresVScrollBar&&(this.vscrollBar.style.display="block"),this.elementInfo.requiresHScrollBar&&(this.hscrollBar.style.display="block"));this.moved=!0;this.refresh&&0===d.top?(this.refreshContainer.style.display="block",this.refreshHeight=this.refreshContainer.firstChild.clientHeight,this.refreshContainer.firstChild.style.top=-this.refreshHeight+"px",this.refreshContainer.style.overflow="visible",this.preventPullToRefresh= 177.155 +!1):0>d.top&&(this.preventPullToRefresh=!0,this.refresh&&(this.refreshContainer.style.overflow="hidden"));this.saveEventInfo(c);if(!1===this.isScrolling&&(this.isScrolling=!0,this.onScrollStart))this.onScrollStart();c=this.getCSSMatrix(this.el);this.lastScrollInfo.top=numOnly(c.f);this.lastScrollInfo.left=numOnly(c.e);this.recalculateDeltaY(this.lastScrollInfo);this.recalculateDeltaX(this.lastScrollInfo);this.checkYboundary(this.lastScrollInfo);this.elementInfo.hasHorScroll&&this.checkXboundary(this.lastScrollInfo); 177.156 +c=0<this.lastScrollInfo.y&&0<this.lastScrollInfo.deltaY;var b=this.lastScrollInfo.y<-this.elementInfo.maxTop&&0>this.lastScrollInfo.deltaY,e;if(c||b)d=c?this.lastScrollInfo.y:-this.lastScrollInfo.y-this.elementInfo.maxTop,d=(this.container.clientHeight-d)/this.container.clientHeight,0.5>d&&(d=0.5),e=0,c&&0<this.lastScrollInfo.top||b&&this.lastScrollInfo.top<-this.elementInfo.maxTop?e=this.lastScrollInfo.top:b&&(e=-this.elementInfo.maxTop),b=this.lastScrollInfo.deltaY*d,1>Math.abs(this.lastScrollInfo.deltaY* 177.157 +d)&&(b=c?1:-1),this.lastScrollInfo.y=e+b;if(this.elementInfo.hasHorScroll&&(c=0<this.lastScrollInfo.x&&0<this.lastScrollInfo.deltaX,b=this.lastScrollInfo.x<-this.elementInfo.maxLeft&&0>this.lastScrollInfo.deltaX,c||b))d=c?this.lastScrollInfo.x:-this.lastScrollInfo.x-this.elementInfo.maxLeft,d=(this.container.clientWidth-d)/this.container.clientWidth,0.5>d&&(d=0.5),e=0,c&&0<this.lastScrollInfo.left||b&&this.lastScrollInfo.left<-this.elementInfo.maxLeft?e=this.lastScrollInfo.left:b&&(e=-this.elementInfo.maxLeft), 177.158 +b=this.lastScrollInfo.deltaX*d,1>Math.abs(this.lastScrollInfo.deltaX*d)&&(b=c?1:-1),this.lastScrollInfo.x=e+b;this.lockBounce&&!this.refresh&&(0<this.lastScrollInfo.x?this.lastScrollInfo.x=0:-1*this.lastScrollInfo.x>this.elementInfo.maxLeft&&(this.lastScrollInfo.x=-1*this.elementInfo.maxLeft),0<this.lastScrollInfo.y?this.lastScrollInfo.y=0:-1*this.lastScrollInfo.y>this.elementInfo.maxTop&&(this.lastScrollInfo.y=-1*this.elementInfo.maxTop));this.scrollerMoveCSS(this.lastScrollInfo,0);this.setVScrollBar(this.lastScrollInfo, 177.159 +0,0);this.setHScrollBar(this.lastScrollInfo,0,0);this.refresh&&!this.preventPullToRefresh&&(!this.refreshTriggered&&this.lastScrollInfo.top>this.refreshHeight?(this.refreshTriggered=!0,this.setRefreshContent("Release to Refresh"),a.trigger(this,"refresh-trigger")):this.refreshTriggered&&this.lastScrollInfo.top<this.refreshHeight&&(this.refreshTriggered=!1,this.setRefreshContent("Pull to Refresh"),a.trigger(this,"refresh-cancel")));this.infinite&&!this.infiniteTriggered&&Math.abs(this.lastScrollInfo.top)> 177.160 +this.el.clientHeight-this.container.clientHeight&&(this.infiniteTriggered=!0,a.trigger(this,"infinite-scroll"))}};g.prototype.calculateMovement=function(a,d){var b={top:0,left:0,speedY:0,speedX:0,absSpeedY:0,absSpeedX:0,deltaY:0,deltaX:0,absDeltaY:0,absDeltaX:0,y:0,x:0,duration:0},e=d?this.firstEventInfo:this.lastEventInfo,f=d?a.pageX:a.touches[0].pageX,h=d?a.pageY:a.touches[0].pageY,g=d?a.time:a.timeStamp;b.deltaY=this.elementInfo.hasVertScroll?h-e.pageY:0;b.deltaX=this.elementInfo.hasHorScroll? 177.161 +f-e.pageX:0;b.time=g;b.duration=g-e.time;return b};g.prototype.calculateTarget=function(a){a.y=this.lastScrollInfo.y+a.deltaY;a.x=this.lastScrollInfo.x+a.deltaX;0<Math.abs(a.deltaY)&&(a.y+=(0<a.deltaY?1:-1)*this.elementInfo.divHeight*this.androidPerfHack);0<Math.abs(a.deltaX)&&(a.x+=(0<a.deltaX?1:-1)*this.elementInfo.divWidth*this.androidPerfHack)};g.prototype.checkYboundary=function(a){var d=this.container.clientHeight/2,b=this.elementInfo.maxTop+d;if(a.y>d)a.y=d;else if(-a.y>b)a.y=-b;else return; 177.162 +this.recalculateDeltaY(a)};g.prototype.checkXboundary=function(a){var d=this.container.clientWidth/2,b=this.elementInfo.maxLeft+d;if(a.x>d)a.x=d;else if(-a.x>b)a.x=-b;else return;this.recalculateDeltaX(a)};g.prototype.recalculateDeltaY=function(a){var d=Math.abs(a.deltaY);a.deltaY=a.y-a.top;var b=Math.abs(a.deltaY);a.duration=a.duration*b/d};g.prototype.recalculateDeltaX=function(a){var d=Math.abs(a.deltaX);a.deltaX=a.x-a.left;var b=Math.abs(a.deltaX);a.duration=a.duration*b/d};g.prototype.hideRefresh= 177.163 +function(b){var d=this;if(!this.preventHideRefresh){var e=function(){d.setRefreshContent("Pull to Refresh");a.trigger(d,"refresh-finish")};this.scrollerMoveCSS({x:0,y:0},325);!1===b||!d.afEl.css3Animate?e():d.afEl.css3Animate({time:"325ms",complete:e});this.refreshTriggered=!1}};g.prototype.setMomentum=function(a){a.speedY=this.divide(a.deltaY,a.duration);a.speedX=this.divide(a.deltaX,a.duration);a.absSpeedY=Math.abs(a.speedY);a.absSpeedX=Math.abs(a.speedX);a.absDeltaY=Math.abs(a.deltaY);a.absDeltaX= 177.164 +Math.abs(a.deltaX);if(0<a.absDeltaY){if(a.deltaY=(0>a.deltaY?-1:1)*a.absSpeedY*a.absSpeedY/0.0024,a.absDeltaY=Math.abs(a.deltaY),a.duration=a.absSpeedY/0.0012,a.speedY=a.deltaY/a.duration,a.absSpeedY=Math.abs(a.speedY),0.12>a.absSpeedY||5>a.absDeltaY)a.deltaY=a.absDeltaY=a.duration=a.speedY=a.absSpeedY=0}else if(a.absDeltaX){if(a.deltaX=(0>a.deltaX?-1:1)*a.absSpeedX*a.absSpeedX/0.0024,a.absDeltaX=Math.abs(a.deltaX),a.duration=a.absSpeedX/0.0012,a.speedX=a.deltaX/a.duration,a.absSpeedX=Math.abs(a.speedX), 177.165 +0.12>a.absSpeedX||5>a.absDeltaX)a.deltaX=a.absDeltaX=a.duration=a.speedX=a.absSpeedX=0}else a.duration=0};g.prototype.onTouchEnd=function(){var b=this;if(null!==this.currentScrollingObject&&this.moved){this.finishScrollingObject=this.currentScrollingObject;this.currentScrollingObject=null;var d=this.calculateMovement(this.lastEventInfo,!0);this.androidFormsMode||this.setMomentum(d);this.calculateTarget(d);var e=this.getCSSMatrix(this.el);d.top=numOnly(e.f);d.left=numOnly(e.e);this.checkYboundary(d); 177.166 +this.elementInfo.hasHorScroll&&this.checkXboundary(d);e=!this.preventPullToRefresh&&(d.top>this.refreshHeight||d.y>this.refreshHeight);this.fireRefreshRelease(e,0<d.top);if(this.refresh&&e)d.y=this.refreshHeight,d.duration=325;else if(0<=d.y)d.y=0,0<=d.top&&(d.duration=325);else if(-d.y>this.elementInfo.maxTop||0===this.elementInfo.maxTop)d.y=-this.elementInfo.maxTop,-d.top>this.elementInfo.maxTop&&(d.duration=325);if(this.elementInfo.hasHorScroll)if(0<=d.x)d.x=0,0<=d.left&&this.refresh&&(d.duration= 177.167 +325);else if(-d.x>this.elementInfo.maxLeft||0===this.elementInfo.maxLeft)d.x=-this.elementInfo.maxLeft,-d.left>this.elementInfo.maxLeft&&this.refresh&&(d.duration=325);if(d.x===d.left&&d.y===d.top||this.androidFormsMode)d.duration=0;setTimeout(function(){b.scrollerMoveCSS(d,d.duration,"cubic-bezier(0.33,0.66,0.66,1)")});this.setVScrollBar(d,d.duration,"cubic-bezier(0.33,0.66,0.66,1)");this.setHScrollBar(d,d.duration,"cubic-bezier(0.33,0.66,0.66,1)");this.setFinishCalback(d.duration);this.infinite&& 177.168 +!this.infiniteTriggered&&Math.abs(d.y)>=this.el.clientHeight-this.container.clientHeight&&(b=this,setTimeout(function(){b.infiniteTriggered=!0;a.trigger(b,"infinite-scroll")},d.duration-50))}};g.prototype.setFinishCalback=function(b){var d=this;this.scrollingFinishCB=setTimeout(function(){d.hideScrollbars();a.trigger(a.touchLayer,"scrollend",[d.el]);a.trigger(d,"scrollend",[d.el]);d.isScrolling=!1;d.elementInfo=null;d.infinite&&d.infiniteTriggered&&a.trigger(d,"infinite-scroll-end")},b)};g.prototype.startFormsMode= 177.169 +function(){if(!this.blockFormsFix){var b=this.getCSSMatrix(this.el);this.refreshSafeKeep=this.refresh;this.refresh=!1;this.androidFormsMode=!0;this.el.style[a.feat.cssPrefix+"Transform"]="none";this.el.style[a.feat.cssPrefix+"Transition"]="none";this.el.style[a.feat.cssPrefix+"Perspective"]="none";this.scrollerMoveCSS({x:numOnly(b.e),y:numOnly(b.f)},0);this.container.style[a.feat.cssPrefix+"Perspective"]="none";this.container.style[a.feat.cssPrefix+"BackfaceVisibility"]="visible";this.vscrollBar&& 177.170 +(this.vscrollBar.style[a.feat.cssPrefix+"Transform"]="none",this.vscrollBar.style[a.feat.cssPrefix+"Transition"]="none",this.vscrollBar.style[a.feat.cssPrefix+"Perspective"]="none",this.vscrollBar.style[a.feat.cssPrefix+"BackfaceVisibility"]="visible");this.hscrollBar&&(this.hscrollBar.style[a.feat.cssPrefix+"Transform"]="none",this.hscrollBar.style[a.feat.cssPrefix+"Transition"]="none",this.hscrollBar.style[a.feat.cssPrefix+"Perspective"]="none",this.hscrollBar.style[a.feat.cssPrefix+"BackfaceVisibility"]= 177.171 +"visible")}};g.prototype.stopFormsMode=function(){if(!this.blockFormsFix){var b=this.getCSSMatrix(this.el);this.refresh=this.refreshSafeKeep;this.androidFormsMode=!1;this.el.style[a.feat.cssPrefix+"Perspective"]=1E3;this.el.style.marginTop=0;this.el.style.marginLeft=0;this.el.style[a.feat.cssPrefix+"Transition"]="0ms linear";this.scrollerMoveCSS({x:numOnly(b.e),y:numOnly(b.f)},0);this.container.style[a.feat.cssPrefix+"Perspective"]=1E3;this.container.style[a.feat.cssPrefix+"BackfaceVisibility"]="hidden"; 177.172 +this.vscrollBar&&(this.vscrollBar.style[a.feat.cssPrefix+"Perspective"]=1E3,this.vscrollBar.style[a.feat.cssPrefix+"BackfaceVisibility"]="hidden");this.hscrollBar&&(this.hscrollBar.style[a.feat.cssPrefix+"Perspective"]=1E3,this.hscrollBar.style[a.feat.cssPrefix+"BackfaceVisibility"]="hidden")}};g.prototype.scrollerMoveCSS=function(b,d,e){d||(d=0);e||(e="linear");d=numOnly(d);var f=this;this.el&&this.el.style&&(this.eventsActive&&(this.androidFormsMode?(this.el.style.marginTop=Math.round(b.y)+"px", 177.173 +this.el.style.marginLeft=Math.round(b.x)+"px"):(d={x:b.x,y:b.y,duration:d,easing:"easeOutSine"},f.initScrollProgress&&(d.update=function(b){a.trigger(f,"scroll",[b]);a.trigger(a.touchLayer,"scroll",[b])}),a(this.el).animateCss(d).start())),this.logPos(b.x,b.y))};g.prototype.logPos=function(a,b){var e;e=this.elementInfo?{h:this.elementInfo.bottomMargin,w:this.elementInfo.rightMargin}:this.getViewportSize();this.loggedPcentX=this.divide(a,this.el.clientWidth-e.w);this.loggedPcentY=this.divide(b,this.el.clientHeight- 177.174 +e.h);this.scrollTop=b;this.scrollLeft=a};g.prototype.scrollbarMoveCSS=function(b,d,e,f){e||(e=0);b&&b.style&&(this.androidFormsMode?(b.style.marginTop=Math.round(d.y)+"px",b.style.marginLeft=Math.round(d.x)+"px"):a(b).animateCss({x:d.x,y:d.y,duration:e,easing:"easeOutSine"}).start())};g.prototype.scrollTo=function(a,b){b||(b=0);this.scrollerMoveCSS(a,b)};g.prototype.scrollBy=function(a,b){var e=this.getCSSMatrix(this.el),f=numOnly(e.f),e=numOnly(e.e);this.scrollTo({y:f-a.y,x:e-a.x},b)};g.prototype.scrollToBottom= 177.175 +function(a){this.scrollTo({y:-1*(this.el.clientHeight-this.container.clientHeight),x:0},a)};g.prototype.scrollToTop=function(a){this.scrollTo({x:0,y:0},a)};return function(c,d){var p;if(!k&&a.touchLayer&&a.isObject(a.touchLayer))n();else if(!a.touchLayer||!a.isObject(a.touchLayer))a.touchLayer={};if(p="string"===typeof c||c instanceof String?document.getElementById(c):c){var f=a(p);d.hasParent&&(f=f.parent());f.hasClass("x-scroll")&&(d.horizontalScroll=!0);f.hasClass("y-scroll")&&(d.verticalScroll= 177.176 +!0);return a.os.desktop?new e(p,d):d.useJsScroll?new g(p,d):new b(p,d)}window.alert("Could not find element for scroller "+c)}}()})(af); 177.177 +(function(a){function n(f,h,g){!0===g&&(this.getAttribute("multiple")||a.selectBox.updateMaskValue(this.parentNode.id,this.text,this.value),this.parentNode.value=this.value);return g}function l(f,h,g){this.options[g]&&(this.getAttribute("multiple")||a.selectBox.updateMaskValue(this.linker,this.options[g].value,this.options[g].text),this.value=this.options[g].value);return g}function k(f){var h=f.target;a(h.linker).remove();delete h.linker;f.stopPropagation()}a.selectBox={scroller:null,currLinker:null, 177.178 +getOldSelects:function(f){if(a.os.android&&!a.os.androidICS)if(a.fn.scroller){var h=f&&document.getElementById(f)?document.getElementById(f):document;if(h){f=h.getElementsByTagName("select");for(h=0;h<f.length;h++){var g=f[h];g.style.display="none";var b=a.create("div",{className:"afFakeSelect"});b.get(0).linker=f[h];g.linker=b.get(0);b.insertAfter(f[h]);g.watch("selectedIndex",l);for(var e=0;e<g.options.length;e++)g.options[e].watch("selected",n),g.options[e].selected&&b.html(g.options[e].text); 177.179 +a(g).one("destroy",k)}this.createHtml()}else window.alert("Could not find container element for af.selectBox "+f)}else window.alert("This library requires af.scroller")},updateDropdown:function(a){if(a)for(var h=0;h<a.options.length;h++)a.options[h].selected&&(a.linker.innerHTML=a.options[h].text)},initDropDown:function(f){if(!f.disabled&&f&&f.options&&0!==f.options.length){var h=0,g=a("#afSelectBoxfix");g.html("<ul></ul>");for(var g=g.find("ul"),b=0;b<f.options.length;b++){f.options[b].watch("selected", 177.180 +n);var e=f.options[b].selected?"selected":"";e&&(h=b+1);e=a.create("li",{html:f.options[b].text,className:e});e.data("ind",b);g.append(e)}a("#afModalMask").show();try{if(0<h&&"multiple"!==f.getAttribute("multiple")){f=0;var c=numOnly(g.find("li").computedStyle("height")),d=numOnly(a("#afSelectBoxContainer").computedStyle("height"));h*c>=d&&(f=(h-1)*-c);this.scroller.scrollTo({x:0,y:f})}}catch(p){console.log("error init dropdown"+p)}h="block"===a("#afSelectClose").css("display")?numOnly(a("#afSelectClose").height()): 177.181 +0;a("#afSelectWrapper").height(numOnly(a("#afSelectBoxContainer").height())-h+"px")}},updateMaskValue:function(f,h,g){a(f).html(g)},setDropDownValue:function(f,h){if(f){var g=a(f);h=parseInt(h,10);isNaN(h)||(f.getAttribute("multiple")?(g=a("#afSelectBoxfix li:nth-child("+(h+1)+")"),g.hasClass("selected")?g.removeClass("selected"):g.addClass("selected")):(f.selectedIndex=h,g.find("option").prop("selected",!1),g.find("option:nth-child("+(h+1)+")").prop("selected",!0),this.scroller.scrollTo({x:0,y:0}), 177.182 +this.hideDropDown()),a(f).trigger("change"))}},hideDropDown:function(){a("#afModalMask").hide();a("#afSelectBoxfix").html("")},createHtml:function(){var f=this;document.getElementById("afSelectBoxfix")||a(document).ready(function(){a(document).on("click",".afFakeSelect",function(){this.linker.disabled||(f.currLinker=this,"multiple"===this.linker.getAttribute("multiple")?a("#afSelectClose").show():a("#afSelectClose").hide(),f.initDropDown(this.linker))});var h=a.create("div",{id:"afSelectBoxContainer"}), 177.183 +g=a.create("div",{id:"afSelectBoxfix"}),b=a.create("div",{id:"afSelectWrapper"});b.css("position","relative");b.append(g);var g=a.create("div",{id:"afSelectClose",html:"<a id='afSelectDone'>Done</a> <a id='afSelectCancel'>Cancel</a>"}),e=a.create("div",{id:"afModalMask"}),c=a("#afui");h.prepend(g).append(b);e.append(h);0<c.length?c.append(e):document.body.appendChild(e.get(0));f.scroller=a.query("#afSelectBoxfix").scroller({scroller:!1,verticalScroll:!0,vScrollCSS:"afselectscrollBarV",hasParent:!0}); 177.184 +a("#afModalMask").on("click",function(b){0===a(b.target).closest("#afSelectBoxContainer").length&&f.hideDropDown()});a("#afSelectBoxfix").on("click","li",function(b){b=a(b.target);f.setDropDownValue(f.currLinker.linker,b.data("ind"))});a("#afSelectBoxContainer").on("click","a",function(b){if("afSelectCancel"===b.target.id)return f.hideDropDown();var c=a(f.currLinker.linker);c.find("option").prop("selected",!1);a("#afSelectBoxfix li").each(function(){var b=a(this);if(b.hasClass("selected")){var d= 177.185 +parseInt(b.data("ind"),10);c.find("option:nth-child("+(d+1)+")").prop("selected",!0);f.currLinker.innerHTML=b.html()}});f.hideDropDown();b.stopPropagation();b.preventDefault();return!1})})}};HTMLElement.prototype.watch||(HTMLElement.prototype.watch=function(a,h){var g=this[a],b=g,e=function(){return b},c=function(d){g=b;return b=h.call(this,a,g,d)};delete this[a]&&(HTMLElement.defineProperty?HTMLElement.defineProperty(this,a,{get:e,set:c,enumerable:!1,configurable:!0}):HTMLElement.prototype.__defineGetter__&& 177.186 +HTMLElement.prototype.__defineSetter__&&(HTMLElement.prototype.__defineGetter__.call(this,a,e),HTMLElement.prototype.__defineSetter__.call(this,a,c)))});HTMLElement.prototype.unwatch||(HTMLElement.prototype.unwatch=function(a){var h=this[a];delete this[a];this[a]=h})})(af); 177.187 +(function(a){function n(a,e,c,d){var p=Math.abs(a-e),f=Math.abs(c-d);return p>=f?0<a-e?"Left":"Right":0<c-d?"Up":"Down"}function l(){k.last&&Date.now()-k.last>=h&&(k.el.trigger("longTap"),k={})}var k={},f,h=750,g;a(document).ready(function(){var b;a(document.body).bind("touchstart",function(e){e.originalEvent&&(e=e.originalEvent);if(e.touches&&0!==e.touches.length){var c=Date.now(),d=c-(k.last||c);e.touches&&0!==e.touches.length&&(k.el=a("tagName"in e.touches[0].target?e.touches[0].target:e.touches[0].target.parentNode), 177.188 +f&&clearTimeout(f),k.x1=e.touches[0].pageX,k.y1=e.touches[0].pageY,k.x2=k.y2=0,0<d&&250>=d&&(k.isDoubleTap=!0),k.last=c,g=setTimeout(l,h),a.ui.useAutoPressed&&!k.el.data("ignore-pressed")&&k.el.addClass("pressed"),b&&(a.ui.useAutoPressed&&!b.data("ignore-pressed")&&b[0]!==k.el[0])&&b.removeClass("pressed"),b=k.el)}}).bind("touchmove",function(a){a.originalEvent&&(a=a.originalEvent);k.x2=a.touches[0].pageX;k.y2=a.touches[0].pageY;(3<Math.abs(k.x2-k.x1)||3<Math.abs(k.y2-k.y1))&&clearTimeout(g)}).bind("touchend", 177.189 +function(b){b.originalEvent&&(b=b.originalEvent);k.el&&(a.ui.useAutoPressed&&!k.el.data("ignore-pressed")&&k.el.removeClass("pressed"),k.isDoubleTap?(k.el.trigger("doubleTap"),k={}):0<k.x2||0<k.y2?((30<Math.abs(k.x1-k.x2)||30<Math.abs(k.y1-k.y2))&&k.el.trigger("swipe")&&k.el.trigger("swipe"+n(k.x1,k.x2,k.y1,k.y2),k),k.x1=k.x2=k.y1=k.y2=k.last=0):"last"in k&&(k.el.trigger("tap"),f=setTimeout(function(){f=null;k.el&&k.el.trigger("singleTap");k={}},250)))}).bind("touchcancel",function(){k.el&&(a.ui.useAutoPressed&& 177.190 +!k.el.data("ignore-pressed"))&&k.el.removeClass("pressed");k={};clearTimeout(g)})});"swipe swipeLeft swipeRight swipeUp swipeDown doubleTap tap singleTap longTap".split(" ").forEach(function(b){a.fn[b]=function(a){return this.bind(b,a)}})})(af); 177.191 +(function(a){a.touchLayer=function(b){a.touchLayer=new c(b);return a.touchLayer};var n=["input","select","textarea","range"],l=["button","radio","checkbox","range","date"],k=a.os.ios||a.os.androidICS&&a.os.chrome,f=a.os.blackberry,h=a.os.blackberry||a.os.fennec||a.os.android&&!a.os.androidICS,g=a.os.ios&&!a.os.ios7,b=!1,e=!1,c=function(b){this.clearTouchVars();b.addEventListener("touchstart",this,!1);b.addEventListener("touchmove",this,!1);b.addEventListener("touchend",this,!1);b.addEventListener("click", 177.192 +this,!1);b.addEventListener("focusin",this,!1);document.addEventListener("scroll",this,!1);window.addEventListener("resize",this,!1);window.addEventListener("orientationchange",this,!1);this.layer=b;this.scrollEndedProxy_=a.proxy(this.scrollEnded,this);this.exitEditProxy_=a.proxy(this.exitExit,this,[]);this.launchFixUIProxy_=a.proxy(this.launchFixUI,this);var c=this;this.scrollTimeoutExpireProxy_=function(){c.scrollTimeout_=null;c.scrollTimeoutEl_.addEventListener("scroll",c.scrollEndedProxy_,!1)}; 177.193 +this.retestAndFixUIProxy_=function(){a.os.android&&!a.os.chrome&&(c.layer.style.height="100%");a.asap(c.testAndFixUI,c,arguments)};document.addEventListener("click",function(a){if(e)return a.preventDefault(),a.stopPropagation(),!1;void 0!==a.clientX&&null!==c.lastTouchStartX&&(2>Math.abs(c.lastTouchStartX-a.clientX)&&2>Math.abs(c.lastTouchStartY-a.clientY))&&(a.preventDefault(),a.stopPropagation())},!0);a.bind(this,"scrollstart",function(b){c.isScrolling=!0;c.scrollingEl_=b;a.feat.nativeTouchScroll|| 177.194 +(c.scrollerIsScrolling=!0);c.fireEvent("UIEvents","scrollstart",b,!1,!1)});a.bind(this,"scrollend",function(b){c.isScrolling=!1;a.feat.nativeTouchScroll||(c.scrollerIsScrolling=!1);c.fireEvent("UIEvents","scrollend",b,!1,!1)});this.hideAddressBar(0,1);this.launchFixUI(5)};c.prototype={dX:0,dY:0,cX:0,cY:0,touchStartX:null,touchStartY:null,layer:null,scrollingEl_:null,scrollTimeoutEl_:null,scrollTimeout_:null,reshapeTimeout_:null,scrollEndedProxy_:null,exitEditProxy_:null,launchFixUIProxy_:null,reHideAddressBarTimeout_:null, 177.195 +retestAndFixUIProxy_:null,panElementId:"header",blockClicks:!1,allowDocumentScroll_:!1,ignoreNextResize_:!1,blockPossibleClick_:!1,isScrolling:!1,isScrollingVertical_:!1,wasPanning_:!1,isPanning_:!1,isFocused_:!1,justBlurred_:!1,requiresNativeTap:!1,holdingReshapeType_:null,trackingClick:!1,scrollerIsScrolling:!1,handleEvent:function(a){switch(a.type){case "touchstart":this.onTouchStart(a);break;case "touchmove":this.onTouchMove(a);break;case "touchend":this.onTouchEnd(a);break;case "click":this.onClick(a); 177.196 +break;case "blur":this.onBlur(a);break;case "scroll":this.onScroll(a);break;case "orientationchange":this.onOrientationChange(a);break;case "resize":this.onResize(a);break;case "focusin":this.onFocusIn(a)}},launchFixUI:function(a){a||(a=2);if(null===this.reHideAddressBarTimeout_)return this.testAndFixUI(0,a)},resetFixUI:function(){this.reHideAddressBarTimeout_&&clearTimeout(this.reHideAddressBarTimeout_);this.reHideAddressBarTimeout_=null},testAndFixUI:function(b,c){var e=this.getReferenceHeight(), 177.197 +f=this.getCurrentHeight();if(e!==f&&!(0.97*f<e&&0.97*e<f))return this.hideAddressBar(b,c),!0;a.os.android&&this.resetFixUI();return!1},hideAddressBar:function(b,c){if(!a.ui||!a.ui.isIntel)if(b>=c)this.resetFixUI();else if(a.os.ios7)window.scrollTo(1,1);else if(a.os.desktop||a.os.kindle)this.layer.style.height="100%";else if(a.os.android){window.scrollTo(1,1);this.layer.style.height=this.isFocused_||window.innerHeight>=window.outerHeight?window.innerHeight+"px":window.outerHeight+"px";var e=b+1;this.reHideAddressBarTimeout_= 177.198 +setTimeout(this.retestAndFixUIProxy_,250*e,e,c)}else this.isFocused_||(document.documentElement.style.height="5000px",window.scrollTo(0,0),document.documentElement.style.height=window.innerHeight+"px",this.layer.style.height=window.innerHeight+"px")},getReferenceHeight:function(){return window.innerHeight},getCurrentHeight:function(){return a.os.android?window.innerHeight:numOnly(document.documentElement.style.height)},onOrientationChange:function(){this.focusedElement&&this.focusedElement.blur(); 177.199 +!this.holdingReshapeType_&&this.reshapeTimeout_?this.fireReshapeEvent("orientationchange"):this.previewReshapeEvent("orientationchange");a.os.android&&a.os.chrome&&(this.layer.style.height="100%")},onResize:function(){this.ignoreNextResize_?this.ignoreNextResize_=!1:this.launchFixUI()&&this.reshapeAction()},onClick:function(b){var c=b.target&&void 0!==b.target.tagName?b.target.tagName.toLowerCase():"";if(-1!==n.indexOf(c)&&(!this.isFocused_||b.target!==this.focusedElement)){c=b.target&&void 0!==b.target.type? 177.200 +b.target.type.toLowerCase():"";if(-1===l.indexOf(c)){this.isFocused_&&this.focusedElement.removeEventListener("blur",this,!1);this.focusedElement=b.target;this.focusedElement.addEventListener("blur",this,!1);if(!this.isFocused_&&!this.justBlurred_)if(a.trigger(this,"enter-edit",[b.target]),a.os.ios){var e=this;setTimeout(function(){e.fireReshapeEvent("enter-edit")},300)}else this.previewReshapeEvent("enter-edit");this.isFocused_=!0}else this.isFocused_=!1;this.justBlurred_=!1;this.allowDocumentScroll_= 177.201 +!0;k&&b.target.focus()}else a.os.blackberry10&&this.isFocused_&&this.focusedElement.blur()},previewReshapeEvent:function(a){var b=this;this.reshapeTimeout_=setTimeout(function(){b.fireReshapeEvent(a);b.reshapeTimeout_=null;b.holdingReshapeType_=null},750);this.holdingReshapeType_=a},fireReshapeEvent:function(b){a.trigger(this,"reshape");a.trigger(this,b?b+"-reshape":"unknown-reshape")},reshapeAction:function(){this.reshapeTimeout_?(clearTimeout(this.reshapeTimeout_),this.fireReshapeEvent(this.holdingReshapeType_), 177.202 +this.reshapeTimeout_=this.holdingReshapeType_=null):this.previewReshapeEvent()},onFocusIn:function(a){if(!this.isFocused_)this.onClick(a)},onBlur:function(b){a.os.android&&b.target===window||(this.isFocused_=!1,this.focusedElement&&this.focusedElement.removeEventListener("blur",this,!1),this.focusedElement=null,this.justBlurred_=!0,a.asap(this.exitEditProxy_,this,[b.target]))},exitExit:function(b){this.justBlurred_=!1;if(!this.isFocused_)if(a.trigger(this,"exit-edit",[b]),this.allowDocumentScroll_= 177.203 +!1,a.os.ios){var c=this;setTimeout(function(){c.fireReshapeEvent("exit-edit")},300)}else this.previewReshapeEvent("exit-edit")},onScroll:function(a){!this.allowDocumentScroll_&&(!this.isPanning_&&a.target===document)&&(this.allowDocumentScroll_=!0,this.wasPanning_?(this.wasPanning_=!1,setTimeout(this.launchFixUIProxy_,2E3,[2])):this.launchFixUI())},onTouchStart:function(d){this.dX=d.touches[0].pageX;this.dY=d.touches[0].pageY;this.lastTimestamp=d.timeStamp;this.lastTouchStartX=this.lastTouchStartY= 177.204 +null;if(a.os.ios){if(b===d.touches[0].identifier)return e=!0,d.preventDefault(),b=!1;b=d.touches[0].identifier;e=!1}if(this.scrollerIsScrolling)return this.moved=!0,this.scrollerIsScrolling=!1,d.preventDefault(),!1;this.trackingClick=!0;(g||a.feat.nativeTouchScroll)&&this.checkDOMTree(d.target,this.layer);this.isScrolling&&(null!==this.scrollTimeout_?(clearTimeout(this.scrollTimeout_),this.scrollTimeout_=null,this.scrollTimeoutEl_!==this.scrollingEl_?this.scrollEnded(!1):this.blockPossibleClick_= 177.205 +!0):(this.scrollEnded(!0),this.blockPossibleClick_=!1));if(a.os.android&&d&&d.target&&d.target.getAttribute&&"ignore"===d.target.getAttribute("data-touchlayer")||this.isFocused_&&!a.os.blackberry10)this.allowDocumentScroll_=this.requiresNativeTap=!0;else if(h&&d.target&&void 0!==d.target.tagName){var c=d.target.tagName.toLowerCase();-1!==n.indexOf(c)&&(this.requiresNativeTap=!0)}else d.target&&(void 0!==d.target.tagName&&"input"===d.target.tagName.toLowerCase()&&"range"===d.target.type)&&(this.requiresNativeTap= 177.206 +!0);!a.os.chrome&&(!a.os.fennec&&!a.os.androidICS)&&(!this.isPanning_&&!this.requiresNativeTap?(this.isScrolling&&!a.feat.nativeTouchScroll||!this.isScrolling)&&d.preventDefault():this.isScrollingVertical_&&this.demandVerticalScroll())},demandVerticalScroll:function(){0>=this.scrollingEl_.scrollTop?this.scrollingEl_.scrollTop=1:this.scrollingEl_.scrollTop+this.scrollingEl_.clientHeight>=this.scrollingEl_.scrollHeight&&(this.scrollingEl_.scrollTop=this.scrollingEl_.scrollHeight-this.scrollingEl_.clientHeight- 177.207 +1)},ignoreScrolling:function(a){return void 0===a.scrollWidth||void 0===a.clientWidth||void 0===a.scrollHeight||void 0===a.clientHeight?!0:!1},allowsVerticalScroll:function(a,b){var c=b.overflowY;return"scroll"===c||"auto"===c&&a.scrollHeight>a.clientHeight?!0:!1},allowsHorizontalScroll:function(a,b){var c=b.overflowX;return"scroll"===c||"auto"===c&&a.scrollWidth>a.clientWidth?!0:!1},checkDOMTree:function(b,c){if(g&&this.panElementId===b.id)this.isPanning_=!0;else{if(a.feat.nativeTouchScroll){if(this.ignoreScrolling(b))return; 177.208 +var e=window.getComputedStyle(b);if(this.allowsVerticalScroll(b,e)){this.isScrollingVertical_=!0;this.scrollingEl_=b;this.isScrolling=!0;return}this.allowsHorizontalScroll(b,e)&&(this.isScrollingVertical_=!1,this.scrollingEl_=null,this.isScrolling=!0)}b!==c&&b.parentNode&&this.checkDOMTree(b.parentNode,c)}},scrollEnded:function(a){null!==this.scrollTimeoutEl_&&(a&&this.scrollTimeoutEl_.removeEventListener("scroll",this.scrollEndedProxy_,!1),this.fireEvent("UIEvents","scrollend",this.scrollTimeoutEl_, 177.209 +!1,!1),this.scrollTimeoutEl_=null)},onTouchMove:function(b){var c=this.moved;this.moved=!0;f&&(this.cY=b.touches[0].pageY-this.dY,this.cX=b.touches[0].pageX-this.dX);this.isPanning_||(this.isScrolling&&(c||this.fireEvent("UIEvents","scrollstart",this.scrollingEl_,!1,!1),this.speedY=(this.lastY-b.touches[0].pageY)/(b.timeStamp-this.lastTimestamp),this.lastY=b.touches[0].pageY,this.lastX=b.touches[0].pageX,this.lastTimestamp=b.timeStamp),!a.os.blackberry10&&!this.requiresNativeTap&&(!this.isScrolling|| 177.210 +!a.feat.nativeTouchScroll&&!this.requiresNativeTap)&&b.preventDefault())},onTouchEnd:function(b){var c=this.moved;f&&(c=c&&!(10>Math.abs(this.cX)&&10>Math.abs(this.cY)));if(!a.os.ios||!this.requiresNativeTap)this.allowDocumentScroll_=!1;if(this.isPanning_&&c)this.wasPanning_=!0;else if(!c&&!this.requiresNativeTap){this.scrollerIsScrolling=!1;if(!this.trackingClick)return;b.preventDefault();if(!this.blockClicks&&!this.blockPossibleClick_){var c=b.target,e=b.changedTouches?b.changedTouches[0]:b.touches[0]; 177.211 +3===c.nodeType&&(c=c.parentNode);this.fireEvent("Event","click",c,!0,b.mouseToTouch,e[0]);this.lastTouchStartX=this.dX;this.lastTouchStartY=this.dY}}else c&&(this.isScrolling&&(this.scrollTimeoutEl_=this.scrollingEl_,0.01>Math.abs(this.speedY)?this.scrollEnded(!1):this.scrollTimeout_=setTimeout(this.scrollTimeoutExpireProxy_,30)),this.requiresNativeTap&&(this.isFocused_||a.trigger(this,"cancel-enter-edit",[b.target])));a.os.blackberry10&&(this.lastTouchStartX=this.dX,this.lastTouchStartY=this.dY); 177.212 +this.clearTouchVars()},clearTouchVars:function(){this.speedY=this.lastY=this.cY=this.cX=this.dX=this.dY=0;this.trackingClick=this.blockPossibleClick_=this.requiresNativeTap=this.isScrollingVertical_=this.isScrolling=this.isPanning_=this.moved=!1},fireEvent:function(b,c,e,f,h,g){var k=document.createEvent(b);k.initEvent(c,f,!0);g&&a.each(g,function(a,b){k.key=b});h&&(k.mouseToTouch=!0);e.dispatchEvent(k)}}})(af); 177.213 +(function(a){a.fn.popup=function(a){return new l(this[0],a)};var n=[],l=function(){var f=function(f,g){if(this.container="string"===typeof f||f instanceof String?document.getElementById(f):f)try{if("string"===typeof g||"number"===typeof g)g={message:g,cancelOnly:"true",cancelText:"OK"};this.id=g.id=g.id||a.uuid();this.addCssClass=g.addCssClass?g.addCssClass:"";this.suppressTitle=g.suppressTitle||this.suppressTitle;this.title=g.suppressTitle?"":g.title||"Alert";this.message=g.message||"";this.cancelText= 177.214 +g.cancelText||"Cancel";this.cancelCallback=g.cancelCallback||function(){};this.cancelClass=g.cancelClass||"button";this.doneText=g.doneText||"Done";this.doneCallback=g.doneCallback||function(){};this.doneClass=g.doneClass||"button";this.cancelOnly=g.cancelOnly||!1;this.onShow=g.onShow||function(){};this.autoCloseDone=void 0!==g.autoCloseDone?g.autoCloseDone:!0;n.push(this);1===n.length&&this.show()}catch(b){console.log("error adding popup "+b)}else window.alert("Error finding container for popup "+ 177.215 +f)};f.prototype={id:null,addCssClass:null,title:null,message:null,cancelText:null,cancelCallback:null,cancelClass:null,doneText:null,doneCallback:null,doneClass:null,cancelOnly:!1,onShow:null,autoCloseDone:!0,suppressTitle:!1,show:function(){var f=this,g="<div id='"+this.id+"' class='afPopup hidden "+this.addCssClass+"'><header>"+this.title+"</header><div>"+this.message+"</div><footer><a href='javascript:;' class='"+this.cancelClass+"' id='cancel'>"+this.cancelText+"</a><a href='javascript:;' class='"+ 177.216 +this.doneClass+"' id='action'>"+this.doneText+"</a><div style='clear:both'></div></footer></div>";a(this.container).append(a(g));var b=a.query("#"+this.id);b.bind("close",function(){f.hide()});this.cancelOnly&&(b.find("A#action").hide(),b.find("A#cancel").addClass("center"));b.find("A").each(function(){var b=a(this);b.bind("click",function(a){"cancel"===b.attr("id")?(f.cancelCallback.call(f.cancelCallback,f),f.hide()):(f.doneCallback.call(f.doneCallback,f),f.autoCloseDone&&f.hide());a.preventDefault()})}); 177.217 +f.positionPopup();a.blockUI(0.5);b.bind("orientationchange",function(){f.positionPopup()});b.find("header").show();b.find("footer").show();setTimeout(function(){b.removeClass("hidden").addClass("show");f.onShow(f)},50)},hide:function(){var f=this;a.query("#"+f.id).addClass("hidden");a.unblockUI();!a.os.ie&&!a.os.android?setTimeout(function(){f.remove()},250):f.remove()},remove:function(){var f=a.query("#"+this.id);f.unbind("close");f.find("BUTTON#action").unbind("click");f.find("BUTTON#cancel").unbind("click"); 177.218 +f.unbind("orientationchange").remove();n.splice(0,1);0<n.length&&n[0].show()},positionPopup:function(){var f=a.query("#"+this.id);f.css("top",window.innerHeight/2.5+window.pageYOffset-f[0].clientHeight/2+"px");f.css("left",window.innerWidth/2-f[0].clientWidth/2+"px")}};return f}(),k=!1;a.blockUI=function(f){k||(f=f?" style='opacity:"+f+";'":"",a.query("BODY").prepend(a("<div id='mask'"+f+"></div>")),a.query("BODY DIV#mask").bind("touchstart",function(a){a.preventDefault()}),a.query("BODY DIV#mask").bind("touchmove", 177.219 +function(a){a.preventDefault()}),k=!0)};a.unblockUI=function(){k=!1;a.query("BODY DIV#mask").unbind("touchstart");a.query("BODY DIV#mask").unbind("touchmove");a("BODY DIV#mask").remove()}})(af); 177.220 +(function(a){var n=window.location.pathname+window.location.search,l=window.location.hash,k=l,f=function(){function b(){e.useOSThemes&&(a("#afui").removeClass("ios ios7 win8 tizen bb android light dark firefox"),a.os.android?a("#afui").addClass("android"):a.os.ie?a("#afui").addClass("win8"):a.os.blackberry||a.os.blackberry10||a.os.playbook?(a("#afui").addClass("bb"),e.backButtonText="Back"):a.os.ios7?a("#afui").addClass("ios7"):a.os.ios?a("#afui").addClass("ios"):a.os.tizen?a("#afui").addClass("tizen"): 177.221 +a.os.fennec&&(a("#afui").addClass("firefox"),e.animateHeaders=!1));if(a.os.ios){a("head").find("#iosBlurrHack").remove();var b;b="-webkit-backface-visibility: hidden;-webkit-perspective:1000;";a("head").append("<style id='iosBlurrHack'>#afui .y-scroll > *, #afui .x-scroll > * {"+b+"}</style>")}else a.os.android&&!a.os.androidICS?e.transitionTime="150ms":a.os.fennec&&e.ready(function(){window.addEventListener("deviceorientation",function(){var b=numOnly(a("#header").css("height"))+numOnly(a("#navbar").css("height")); 177.222 +a("#content").css("height",window.innerHeight-b)})});a.os.ios7&&a("#afui").hasClass("ios7")&&e.overlayStatusbar&&(e.ready(function(){a("#afui").addClass("overlayStatusbar")}),a(document.body).css("background","rgb(249,249,249)"))}var e=this;this.availableTransitions={};this.availableTransitions["default"]=this.availableTransitions.none=this.noTransition;if("function"===typeof define&&define.amd||"undefined"!==typeof module&&module.exports)e.autoLaunch=!1;var c=function(){var c=document.getElementById("afui"); 177.223 +if(null===c){c=document.createElement("div");c.id="afui";for(var f=document.body;f&&f.firstChild;)c.appendChild(f.firstChild);a(document.body).prepend(c)}e.isIntel="intel"in window&&window.intel&&window.intel.xdk&&"app"in window.intel.xdk;a.os.supportsTouch&&a.touchLayer(c);b()};if("complete"===document.readyState||"loaded"===document.readyState)if(c(),e.init)e.autoBoot();else a(window).one("afui:init",function(){e.autoBoot()});else a(document).ready(function(){c();if(e.init)e.autoBoot();else a(window).one("afui:init", 177.224 +function(){e.autoBoot()})},!1);"intel"in window||(window.intel={xdk:{}},window.intel.xdk.webRoot="");window.addEventListener("popstate",function(){if(e.useInternalRouting){var a=e.getPanelId(document.location.hash);"#"!==document.location.href.replace(document.location.origin+"/","")&&(""===a&&1===e.history.length&&(a="#"+e.firstDiv.id),""!==a&&0!==af(a).filter(".panel").length&&a!=="#"+e.activeDiv.id&&e.goBack())}},!1)};f.prototype={init:!1,transitionTime:"230ms",showLoading:!0,loadingText:"Loading Content", 177.225 +loadContentQueue:[],isIntel:!1,titlebar:"",navbar:"",header:"",viewportContainer:"",remotePages:{},history:[],homeDiv:"",screenWidth:"",content:"",modalWindow:"",customFooter:!1,defaultFooter:"",defaultHeader:null,customMenu:!1,customAside:!1,defaultAside:"",defaultMenu:"",_readyFunc:null,doingTransition:!1,passwordBox:a.passwordBox?new a.passwordBox:!1,selectBox:a.selectBox?a.selectBox:!1,ajaxUrl:"",transitionType:"slide",scrollingDivs:{},firstDiv:"",hasLaunched:!1,isLaunching:!1,launchCompleted:!1, 177.226 +activeDiv:"",customClickHandler:"",menuAnimation:null,togglingSideMenu:!1,sideMenuWidth:"200px",handheldMinWidth:"768",trimBackButtonText:!0,useOSThemes:!0,overlayStatusbar:!1,lockPageBounce:!0,animateHeaders:!0,useAutoPressed:!0,horizontalScroll:!1,_currentHeaderID:"defaultHeader",useInternalRouting:!0,autoBoot:function(){this.hasLaunched=!0;var a=this;if(this.autoLaunch)if(this.isIntel){var e=function(){a.launch();document.removeEventListener("intel.xdk.device.ready",e)};document.addEventListener("intel.xdk.device.ready", 177.227 +e)}else this.launch()},css3animate:function(b,e){b=a(b);return b.css3Animate(e)},dispatchPanelEvent:function(a,e){if("string"===typeof a&&window[a])return window[a](e);if(-1!==a.indexOf(".")){var c=window,d=a.split("."),f=d.length,g=0;for(g;g<f-1;g++)if(c=c[d[g]],void 0===c)return;return c[d[g]](e)}},enableTabBar:function(){a(document).on("click",".button-grouped.tabbed",function(b){var e=a(b.target);e.closest(".tabbed").find(".button").data("ignore-pressed","true").removeClass("pressed");e.closest(".button").addClass("pressed"); 177.228 +setTimeout(function(){e.closest(".button").addClass("pressed")})})},disableTabBar:function(){a(document).off("click",".button-grouped.tabbed");a(".button-grouped.tabbed .button").removeAttr("data-ignore-pressed")},setLeftSideMenuWidth:function(b){this.sideMenuWidth=b;b=(b+"").replace("px","")+"px";var e=numOnly(window.innerWidth)-numOnly(b);a("head").find("style#afui_sideMenuWidth").remove();b="@media handheld, only screen and (min-width: 768px) {#afui > #navbar.hasMenu.splitview, #afui > #header.hasMenu.splitview, #afui > #content.hasMenu.splitview { margin-left:"+ 177.229 +b+" !important; width: "+e+"px !important;}}#afui #menu {width:"+b+" !important}";a("head").append("<style id='afui_sideMenuWidth'>"+b+"</style>")},setSideMenuWidth:function(){this.setLeftSideMenuWidth.apply(this,arguments)},setRightSideMenuWidth:function(b){this.sideMenuWidth=b;b=(b+"").replace("px","")+"px";a("head").find("style#afui_asideMenuWidth").remove();a("head").append("<style id='afui_asideMenuWidth'>#afui #aside_menu {width:"+b+" !important}</style>")},disableNativeScrolling:function(){a.feat.nativeTouchScroll= 177.230 +!1},manageHistory:!0,loadDefaultHash:!0,useAjaxCacheBuster:!1,actionsheet:function(b){return a.query("#afui").actionsheet(b)},popup:function(b){return a.query("#afui").popup(b)},blockUI:function(b){a.blockUI(b)},unblockUI:function(){a.unblockUI()},removeFooterMenu:function(){a.query("#navbar").hide();this.showNavMenu=!1},showNavMenu:!0,autoLaunch:!0,showBackbutton:!0,showBackButton:!0,backButtonText:"",resetScrollers:!1,ready:function(b){if(this.launchCompleted)b();else a(document).one("afui:ready", 177.231 +function(){b()})},setBackButtonStyle:function(b){a.query("#header .backButton").get(0).className=b},goBack:function(a){if(a=Math.min(Math.abs(~~a||1),this.history.length))a=this.history.splice(-a).shift(),this.loadContent(a.target+"",0,1,a.transition),this.transitionType=a.transition,this.updateHash(a.target)},clearHistory:function(){this.history=[];this.setBackButtonVisibility(!1)},pushHistory:function(b,e,c,d){this.history.push({target:b,transition:c});try{this.manageHistory&&(window.history.pushState(e, 177.232 +e,n+"#"+e+d),a(window).trigger("hashchange",null,{newUrl:n+"#"+e+d,oldUrl:n+b}))}catch(f){}},updateHash:function(b){if(this.manageHistory){k=b=-1===b.indexOf("#")?"#"+b:b;var e=window.location.hash,c=this.getPanelId(b).substring(1);try{window.history.replaceState(c,c,n+b),a(window).trigger("hashchange",null,{newUrl:n+b,oldUrl:n+e})}catch(d){}}},getPanelId:function(a){var e=a.indexOf("/");return-1===e?a:a.substring(0,e)},updateBadge:function(b,e,c,d){void 0===c&&(c="");b=a(b);var f=b.find("span.af-badge"); 177.233 +0===f.length?("absolute"!==b.css("position")&&b.css("position","relative"),f=a.create("span",{className:"af-badge "+c,html:e}),b.append(f)):f.html(e);f.removeClass("tl bl br tr");f.addClass(c);void 0===d&&(d="red");a.isObject(d)?f.css(d):d&&f.css("background",d);f.data("ignore-pressed","true")},removeBadge:function(b){a(b).find("span.af-badge").remove()},toggleNavMenu:function(b){this.showNavMenu&&("none"!==a.query("#navbar").css("display")&&(void 0!==b&&!0!==b||void 0===b)?a.query("#navbar").hide(): 177.234 +(void 0===b||void 0!==b&&!0===b)&&a.query("#navbar").show())},toggleHeaderMenu:function(b){"none"!==a.query("#header").css("display")&&(void 0!==b&&!0!==b||void 0===b)?a.query("#header").hide():(void 0===b||void 0!==b&&!0===b)&&a.query("#header").show()},toggleAsideMenu:function(){this.toggleRightSideMenu.apply(this,arguments)},toggleRightSideMenu:function(a,e,c){if(this.isAsideMenuEnabled())return this.toggleLeftSideMenu(a,e,c,!0)},toggleLeftSideMenu:function(b,e,c,d){if(!(!this.isSideMenuEnabled()&& 177.235 +!this.isAsideMenuEnabled()||this.togglingSideMenu))if(d||this.isSideMenuEnabled())if(d||!(a.ui.splitview&&window.innerWidth>=a.ui.handheldMinWidth)){var f=this,g=a.query("#menu"),h=a.query("#aside_menu"),k=a.query("#content, #header, #navbar"),l=a.query(".afui_panel_mask");c=c||this.transitionTime;var n=this.isSideMenuOn(),z=d?"-"+numOnly(h.css("width")):numOnly(g.css("width"));0===l.length&&window.innerWidth<a.ui.handheldMinWidth&&(k.append("<div class='afui_panel_mask'></div>"),l=a.query(".afui_panel_mask"), 177.236 +a(".afui_panel_mask").bind("click",function(){a.ui.toggleSideMenu(!1,null,null,d)}));var s=this.getSideMenuPosition();n&&!d&&0>s?n=!1:n&&(d&&0<s)&&(n=!1);if(2===b||!n&&(void 0!==b&&!1!==b||void 0===b))this.togglingSideMenu=!0,d?h.show():g.show(),f.css3animate(k,{x:z,time:c,complete:function(b){f.togglingSideMenu=!1;k.vendorCss("Transition","");e&&e(b);0!==l.length&&window.innerWidth<a.ui.handheldMinWidth&&l.show()}});else if(void 0===b||void 0!==b&&!1===b)this.togglingSideMenu=!0,f.css3animate(k, 177.237 +{x:"0px",time:c,complete:function(b){k.vendorCss("Transition","");k.vendorCss("Transform","");f.togglingSideMenu=!1;e&&e(b);a.ui.splitview||g.hide();h.hide();0!==l.length&&window.innerWidth<a.ui.handheldMinWidth&&l.hide()}})}},toggleSideMenu:function(){this.toggleLeftSideMenu.apply(this,arguments)},disableSideMenu:function(){this.disableLeftSideMenu()},disableLeftSideMenu:function(){var b=a.query("#content, #header, #navbar");this.isSideMenuOn()?this.toggleSideMenu(!1,function(a){a||b.removeClass("hasMenu")}): 177.238 +b.removeClass("hasMenu")},enableLeftSideMenu:function(){a.query("#content, #header, #navbar").addClass("hasMenu")},enableSideMenu:function(){return this.enableLeftSideMenu()},disableRightSideMenu:function(){var b=a.query("#content, #header, #navbar");this.isSideMenuOn()?this.toggleSideMenu(!1,function(a){a||b.removeClass("hasAside")}):b.removeClass("hasAside")},enableRightSideMenu:function(){a.query("#content, #header, #navbar").addClass("hasAside")},isSideMenuEnabled:function(){return a.query("#content").hasClass("hasMenu")}, 177.239 +isAsideMenuEnabled:function(){return a.query("#content").hasClass("hasAside")},isSideMenuOn:function(){var a=0!==this.getSideMenuPosition()?!0:!1;return(this.isSideMenuEnabled()||this.isAsideMenuEnabled)&&a},getSideMenuPosition:function(){return numOnly(parseFloat(a.getCssMatrix(a("#content")).e))},splitview:!0,disableSplitView:function(){a.query("#content, #header, #navbar, #menu").removeClass("splitview");this.splitview=!1},prevFooter:null,updateNavbarElements:function(b){if(this.prevFooter)if(this.prevFooter.data("parent")){var e= 177.240 +this.scrollingDivs.hasOwnProperty(this.prevFooter.data("parent"));a.feat.nativeTouchScroll||a.os.desktop||!e?this.prevFooter.appendTo("#"+this.prevFooter.data("parent")):this.prevFooter.appendTo(a("#"+this.prevFooter.data("parent")).find(".afScrollPanel"))}else this.prevFooter.appendTo("#afui");a.is$(b)||(b=a.query("#"+b));a.query("#navbar").append(b);this.prevFooter=b;b=a.query("#navbar > footer > a:not(.button)");0<b.length&&(b.data("ignore-pressed","true").data("resetHistory","true"),e=parseFloat(100/ 177.241 +b.length),b.css("width",e+"%"));b=a.query("#navbar footer");if(0!==b.length){b=b.get(0).childNodes;for(e=0;e<b.length;e++)3===b[e].nodeType&&b[e].parentNode.removeChild(b[e])}},prevHeader:null,updateHeaderElements:function(b,e){var c=this;a.is$(b)||(b=a.query("#"+b));if(b!==this.prevHeader)if(this._currentHeaderID=b.prop("id"),this.prevHeader){var d=this.scrollingDivs.hasOwnProperty(this.prevHeader.data("parent"));a.query("#header").append(b);if(a.ui.animateHeaders){var f=e?"100px":"-100px",g=e?"-100px": 177.242 +"100px";c.prevHeader.addClass("ignore");c.css3animate(b,{x:g,opacity:0.3,time:"1ms"});c.css3animate(c.prevHeader,{x:f,y:0,opacity:0.3,time:c.transitionTime,delay:numOnly(c.transitionTime)/5+"ms",complete:function(){c.prevHeader.data("parent")?a.feat.nativeTouchScroll||a.os.desktop||!d?c.prevHeader.appendTo("#"+c.prevHeader.data("parent")):c.prevHeader.appendTo(a("#"+c.prevHeader.data("parent")).find(".afScrollPanel")):c.prevHeader.appendTo("#afui");c.prevHeader.removeClass("ignore");c.css3animate(c.prevHeader, 177.243 +{x:g,opacity:1,time:"1ms"});c.prevHeader=b}});c.css3animate(b,{x:"0px",opacity:1,time:c.transitionTime})}else c.prevHeader.data("parent")?a.feat.nativeTouchScroll||a.os.desktop||!d?this.prevHeader.appendTo("#"+this.prevHeader.data("parent")):this.prevHeader.appendTo(a("#"+this.prevHeader.data("parent")).find(".afScrollPanel")):c.prevHeader.appendTo("#afui"),c.prevHeader=b}else a.query("#header").append(b),this.prevHeader=b},previAsideMenu:null,updateAsideElements:function(){return this.updateRightSideMenuElements.apply(this, 177.244 +arguments)},updateRightSideMenuElements:function(b){if(!(void 0===b||null===b)){var e=a.query("#aside_menu_scroller");this.prevAsideMenu&&(this.prevAsideMenu.insertBefore("#afui #aside_menu"),this.prevAsideMenu=null);a.is$(b)||(b=a.query("#"+b));a(b).attr("title")&&(a(b).prepend(a.create("header",{className:"header"}).append(a.create("h1",{html:a(b).attr("title")}).get(0))),a(b).removeAttr("title"));e.html("");e.append(b);this.prevAsideMenu=b;this.scrollingDivs.aside_menu_scroller.hideScrollbars(); 177.245 +this.scrollingDivs.aside_menu_scroller.scrollToTop()}},updateSideMenu:function(a){return this.updateSideMenuElements(a)},updateSideMenuElements:function(){return this.updateLeftSideMenuElements.apply(this,arguments)},updateLeftSideMenuElements:function(b){if(!(void 0===b||null===b)){var e=a.query("#menu_scroller");this.prevMenu&&(this.prevMenu.insertBefore("#afui #menu"),this.prevMenu=null);a.is$(b)||(b=a.query("#"+b));a(b).attr("title")&&(a(b).prepend(a.create("header",{className:"header"}).append(a.create("h1", 177.246 +{html:a(b).attr("title")}).get(0))),a(b).removeAttr("title"));e.html("");e.append(b);this.prevMenu=b;this.scrollingDivs.menu_scroller.hideScrollbars();this.scrollingDivs.menu_scroller.scrollToTop()}},setTitle:function(b){"defaultHeader"===this._currentHeaderID&&a.query("#header header:not(.ignore) #pageTitle").html(b)},setBackButtonText:function(b){"defaultHeader"===this._currentHeaderID&&(this.trimBackButtonText&&7<=b.length&&(b=b.substring(0,5)+"..."),0<this.backButtonText.length?a.query("#header header:not(.ignore) .backButton").html(this.backButtonText): 177.247 +a.query("#header header:not(.ignore) .backButton").html(b))},setBackButtonVisibility:function(b){b?a.query("#header .backButton").css("visibility","visible"):a.query("#header .backButton").css("visibility","hidden")},showMask:function(b){b||(b=this.loadingText||"");a.query("#afui_mask>h1").html(b);a.query("#afui_mask").show()},hideMask:function(){a.query("#afui_mask").hide()},modalReference_:null,showModal:function(b,e){this.modalTransition=e||"up";var c=a.query("#modalContainer");"string"===typeof b&& 177.248 +(b="#"+b.replace("#",""));var d=a.query(b);this.modalReference_=d;var f=a.query("#afui_modal");if(d.length){var g=this.scrollingDivs.hasOwnProperty(d.attr("id")),h;a.feat.nativeTouchScroll||a.os.desktop||!g?(h=d.contents(),c.append(h)):(h=a(d.get(0).childNodes[0]).contents(),c.children().eq(0).append(h));this.runTransition(this.modalTransition,this.modalTransContainer,this.modalWindow,!1);a(this.modalWindow).css("display","");a(this.modalWindow).addClass("display","flexContainer");g?this.scrollingDivs.modal_container.enable(this.resetScrollers): 177.249 +this.scrollingDivs.modal_container.disable();c.addClass("panel").show();"none"===d.data("header")?f.find("#modalHeader").hide():0<h.filter("header").length?f.find("#modalHeader").append(h.filter("header")).show():f.find("#modalHeader").append(a.create("header",{}).append(a.create("h1",{html:d.data("title")}).get(0)).append(a.create("a",{className:"button icon close"}).attr("onclick","$.ui.hideModal()").get(0))).show();if("none"===d.data("footer"))f.find("#modalFooter").hide();else if(0<h.filter("footer").length){f.find("#modalFooter").append(h.filter("footer")).show(); 177.250 +f=a.query("#modalFooter > footer > a:not(.button)");0<f.length&&(g=parseFloat(100/f.length),f.css("width",g+"%"));f=a.query("#modalFooter footer");if(0===f.length)return;f=f.get(0).childNodes;for(g=0;g<f.length;g++)3===f[g].nodeType&&f[g].parentNode.removeChild(f[g])}else f.find("#modalFooter").hide();this.scrollToTop("modal");c.data("panel",b);c=d.get(0);(f=c.getAttribute("data-load"))&&this.dispatchPanelEvent(f,c);d.trigger("loadpanel")}},hideModal:function(){var b=this,e=a.query("#modalContainer"); 177.251 +if(this.modalReference_){var c=this.scrollingDivs.hasOwnProperty(this.modalReference_.attr("id"));this.runTransition(b.modalTransition,b.modalWindow,b.modalTransContainer,!0);this.scrollingDivs.modal_container.disable();var d=a.query(e.data("panel")),f=d.data("unload");f&&this.dispatchPanelEvent(f,d.get(0));d.trigger("unloadpanel");setTimeout(function(){a.feat.nativeTouchScroll||a.os.desktop||!c?(b.modalReference_.append(a("#modalHeader header")),b.modalReference_.append(e.contents()),b.modalReference_.append(a("#modalFooter footer"))): 177.252 +(b.modalReference_.children().eq(0).append(a("#modalHeader header")),a(b.modalReference_.get(0).childNodes[0]).append(e.children().eq(0).contents()),b.modalReference_.children().eq(0).append(a("#modalFooter footer")));b.modalReference_=null},this.transitionTime)}},updatePanel:function(b,e){b="#"+b.replace("#","");var c=a.query(b).get(0);if(c){var d=a.create("div",{html:e}),d=d.children(".panel")&&0<d.children(".panel").length?d.children(".panel").get(0):d.get(0);c.getAttribute("js-scrolling")&&("yes"=== 177.253 +c.getAttribute("js-scrolling").toLowerCase()||"true"===c.getAttribute("js-scrolling").toLowerCase())?(a.cleanUpContent(c.childNodes[0],!1,!0),a(c.childNodes[0]).html(e)):(a.cleanUpContent(c,!1,!0),a(c).html(e));var f=this.scrollingDivs[c.id];f&&f.refresh&&f.addPullToRefresh();d.getAttribute("data-title")&&c.setAttribute("data-title",d.getAttribute("data-title"))}},updateContentDiv:function(a,e){return this.updatePanel(a,e)},addContentDiv:function(b,e,c,d,f){var g;"string"===typeof b?(-1===b.lastIndexOf("#", 177.254 +1)&&(b="#"+b),g=a.query(b).get(0)):(g=a.is$(b)?b.get(0):b,b=g.id);g?e=g:(e=a.create("div",{html:e}),e=e.children(".panel")&&0<e.children(".panel").length?e.children(".panel").get(0):e.get(0),!e.getAttribute("data-title")&&c&&e.setAttribute("data-title",c),c=e.id?e.id:b.replace("#",""),e.id=c,e.id!==b&&e.setAttribute("data-crc",b.replace("#","")));e.className="panel";c=e.id;this.addDivAndScroll(e,d,f);return c},addDivAndScroll:function(b,e,c,d){var f=!1,g,h=b.style.overflow,h="hidden"!==h&&"visible"!== 177.255 +h;d=d||this.content;!a.feat.nativeTouchScroll&&(h&&!a.os.desktop)&&b.setAttribute("js-scrolling","true");if(b.getAttribute("js-scrolling")&&("yes"===b.getAttribute("js-scrolling").toLowerCase()||"true"===b.getAttribute("js-scrolling").toLowerCase()))h=f=!0;g=b.getAttribute("data-title")||b.title;b.title="";b.setAttribute("data-title",g);if(a(b).hasClass("no-scroll")||b.getAttribute("scrolling")&&"no"===b.getAttribute("scrolling"))f=h=!1,b.removeAttribute("js-scrolling");f?(g=b,d.appendChild(b),!1!== 177.256 +this.selectBox&&this.selectBox.getOldSelects(g.id),!1!==this.passwordBox&&this.passwordBox.getOldPasswords(g.id)):(d.appendChild(b),g=b,b.style["-webkit-overflow-scrolling"]="none");h&&(this.scrollingDivs[g.id]=a(b).scroller({scrollBars:!0,verticalScroll:!0,horizontalScroll:this.horizontalScroll,vScrollCSS:"afScrollbar",refresh:e,useJsScroll:f,lockBounce:this.lockPageBounce,autoEnable:!1}),a(b).addClass("y-scroll"),this.horizontalScroll&&a(b).addClass("x-scroll"),c&&a.bind(this.scrollingDivs[g.id], 177.257 +"refresh-release",function(a){if(a)return c(),!1}),f&&a(b).children().eq(0).addClass("afScrollPanel"));return g.id},scrollToTop:function(a,e){e=e||"300ms";a=a.replace("#","");this.scrollingDivs[a]&&this.scrollingDivs[a].scrollToTop(e)},scrollToBottom:function(a,e){a=a.replace("#","");this.scrollingDivs[a]&&this.scrollingDivs[a].scrollToBottom(e)},parsePanelFunctions:function(b,e,c){var d=b.getAttribute("data-footer"),f=b.getAttribute("data-header");d&&"none"===d.toLowerCase()?(this.toggleNavMenu(!1), 177.258 +d=!1):this.toggleNavMenu(!0);d&&this.customFooter!==d?(this.customFooter=d,this.updateNavbarElements(d)):d!==this.customFooter&&(this.customFooter&&this.updateNavbarElements(this.defaultFooter),this.customFooter=!1);f&&"none"===f.toLowerCase()?(this.toggleHeaderMenu(!1),f=!1):this.toggleHeaderMenu(!0);f&&this.customHeader!==f?(this.customHeader=f,this.updateHeaderElements(f,c)):f!==this.customHeader&&(this.customHeader&&this.updateHeaderElements(this.defaultHeader,c),this.customHeader=!1);d=a(b).find("footer"); 177.259 +0<d.length&&(this.customFooter=b.id,d.data("parent",b.id),this.updateNavbarElements(d));d=a(b).find("header");0<d.length&&(this.customHeader=b.id,d.data("parent",b.id),this.updateHeaderElements(d,c));b.getAttribute("data-tab")&&(a.query("#navbar>footer>a:not(.button)").removeClass("pressed"),a.query("#navbar #"+b.getAttribute("data-tab")).addClass("pressed"));(c=b.getAttribute("data-left-menu")||b.getAttribute("data-nav"))&&this.customMenu!==c?(this.customMenu=c,this.updateSideMenuElements(c)):c!== 177.260 +this.customMenu&&(this.customMenu&&this.updateSideMenuElements(this.defaultMenu),this.customMenu=!1);(c=b.getAttribute("data-right-menu")||b.getAttribute("data-aside"))&&this.customAside!==c?(this.customAside=c,this.updateAsideElements(c)):c!==this.customAside&&(this.customAside&&this.updateAsideElements(this.defaultAside),this.customAside=!1);e&&((c=e.getAttribute("data-unload"))&&this.dispatchPanelEvent(c,e),a(e).trigger("unloadpanel"));(c=b.getAttribute("data-load"))&&this.dispatchPanelEvent(c, 177.261 +b);a(b).trigger("loadpanel");this.isSideMenuOn()&&this.toggleSideMenu(!1)},parseScriptTags:function(b){b&&a.fn&&"appframework"===a.fn.namespace&&a.parseJS(b)},loadContent:function(b,e,c,d,f){if(this.doingTransition)this.loadContentQueue.push([b,e,c,d,f]);else if(0!==b.length){var h=!0;f=f||document.createElement("a");if(-1===b.indexOf("#")){var k="url"+g(b),l=a.query("div.panel[data-crc='"+k+"']");0<a.query("#"+b).length?h=!1:0<l.length?(h=!1,"true"===f.getAttribute("data-refresh-ajax")||f.refresh&& 177.262 +!0===f.refresh||this.isAjaxApp?h=!0:b="#"+l.get(0).id):0<a.query("#"+k).length&&(h=!1,"true"===f.getAttribute("data-refresh-ajax")||f.refresh&&!0===f.refresh||this.isAjaxApp?h=!0:b="#"+k)}-1===b.indexOf("#")&&h?this.loadAjax(b,e,c,d,f):this.loadDiv(b,e,c,d)}},loadDiv:function(b,e,c,d){var f=this,g=b.replace("#",""),h=g.indexOf("/"),l="";-1!==h&&(l=g.substr(h),g=g.substr(0,h));if(g=a.query("#"+g).get(0))if(g===this.activeDiv&&!c)this.isSideMenuOn()&&this.toggleSideMenu(!1);else{this.transitionType= 177.263 +d;var n=this.activeDiv;b=g;if("true"===g.getAttribute("data-modal")||"true"===g.getAttribute("modal"))return this.showModal(g.id);n!==b&&(e?(this.clearHistory(),this.pushHistory("#"+this.firstDiv.id,g.id,d,l)):c||this.pushHistory(k,g.id,d,l),k="#"+g.id+l,this.doingTransition=!0,n.style.display="block",b.style.display="block",this.runTransition(d,n,b,c),this.parsePanelFunctions(g,n,c),this.loadContentData(g,e,c,d),a.feat.nativeTouchScroll?setTimeout(function(){f.scrollingDivs[n.id]&&f.scrollingDivs[n.id].disable()}, 177.264 +numOnly(f.transitionTime)+50):"undefined"!==typeof f.scrollingDivs[n.id]&&f.scrollingDivs[n.id].disable())}else a(document).trigger("missingpanel",null,{missingTarget:b})},loadContentData:function(b,e,c){var d;c?0<this.history.length&&(c=this.history[this.history.length-1],d=c.target.indexOf("/"),c=-1!==d?c.target.substr(0,d):c.target,(c=a.query(c).get(0))?this.setBackButtonText(c.getAttribute("data-title")):this.setBackButtonText("Back")):this.activeDiv.getAttribute("data-title")?this.setBackButtonText(this.activeDiv.getAttribute("data-title")): 177.265 +this.setBackButtonText("Back");b.getAttribute("data-title")&&this.setTitle(b.getAttribute("data-title"));e&&(this.setBackButtonText(this.firstDiv.getAttribute("data-title")),b===this.firstDiv&&(this.history.length=0));a("#header #menubadge").css("float","right");0===this.history.length?(this.setBackButtonVisibility(!1),this.history=[],a("#header #menubadge").css("float","left")):this.setBackButtonVisibility(this.showBackButton&&this.showBackbutton);this.activeDiv=b;this.scrollingDivs[this.activeDiv.id]&& 177.266 +this.scrollingDivs[this.activeDiv.id].enable(this.resetScrollers)},loadAjax:function(b,e,c,d,f){if(!("afui_ajax"===this.activeDiv.id&&b===this.ajaxUrl)){var h="url"+g(b),k=this;-1===b.indexOf("http")&&(b=intel.xdk.webRoot+b);var l=new XMLHttpRequest;f&&"object"!==typeof f&&(f=document.createElement("a"),f.setAttribute("data-persist-ajax",!0));f=f||document.createElement("a");l.onreadystatechange=function(){if(4===l.readyState&&200===l.status){this.doingTransition=!1;var g,n=!1;g=a.query("#"+h);var s= 177.267 +"",A=function(a){(a=k.scrollingDivs[a])&&a.refresh&&a.hideRefresh()};if(0<g.length)A(h),k.updatePanel(h,l.responseText),g.get(0).setAttribute("data-title",f.title?f.title:b);else if(f.getAttribute("data-persist-ajax")||k.isAjaxApp){var q="true"===f.getAttribute("data-pull-scroller")?!0:!1;g=q?function(){setTimeout(function(){f.refresh=!0;k.loadContent(b,e,c,d,f);f.refresh=!1},500)}:null;var r=a(l.responseText);r.hasClass("panel")?(s=r.get(0).className,h=r.attr("id"),r=r.get(0).innerHTML):(s=r.className, 177.268 +r=r.html());A(h);0<a("#"+h).length?k.updatePanel("#"+h,r):0<a("div.panel[data-crc='"+h+"']").length?(k.updatePanel(a("div.panel[data-crc='"+h+"']").get(0).id,r),h=a("div.panel[data-crc='"+h+"']").get(0).id):h=k.addContentDiv(h,l.responseText,f.title?f.title:b,q,g)}else k.updatePanel("afui_ajax",l.responseText),a.query("#afui_ajax").attr("data-title",f.title?f.title:b),k.loadContent("#afui_ajax",e,c,d),n=!0;A=document.createElement("div");a(A).html(l.responseText);k.parseScriptTags(A);if(n)k.showLoading&& 177.269 +k.hideMask();else{if(s){n=s.split(" ");for(s=0;s<n.length;s++)"panel"!==n[s].trim()&&a("#"+h).addClass(n[s])}k.loadContent("#"+h,e,c,d);k.showLoading&&k.hideMask();return null}}else 4===l.readyState&&a.ui.hideMask()};this.ajaxUrl=b;var n=this.useAjaxCacheBuster?b+(b.split("?")[1]?"&":"?")+"cache="+1E16*Math.random():b;l.open("GET",n,!0);l.setRequestHeader("X-Requested-With","XMLHttpRequest");l.send();this.showLoading&&this.showMask()}},runTransition:function(a,e,c,d){this.availableTransitions[a]|| 177.270 +(a="default");"none"===e.style.display&&(e.style.display="block");"none"===c.style.display&&(c.style.display="block");this.availableTransitions[a].call(this,e,c,d)},launch:function(){if(!1===this.hasLaunched||this.launchCompleted)this.hasLaunched=!0;else{if(this.isLaunching)return!0;this.isLaunching=!0;var b=this;this.viewportContainer=af.query("#afui");this.navbar=af.query("#navbar").get(0);this.content=af.query("#content").get(0);this.header=af.query("#header").get(0);this.menu=af.query("#menu").get(0); 177.271 +this.viewportContainer.on("click","a",function(a){b.useInternalRouting&&h(a,a.currentTarget)});var e=null;a.bind(a.touchLayer,"enter-edit",function(a){e=a});a.os.android&&(a.bind(a.touchLayer,"enter-edit-reshape",function(){var c=a(e),d=c.closest(b.activeDiv);if(d&&0<d.size())if(a.os.androidICS){var f=b.scrollingDivs[b.activeDiv.id],g=f.scrollTop;f.scrollBy({x:0,y:(c.offset().top-d.offset().top+g)/2})}else if(a.os.android||a.os.blackberry)f=c.offset(),d=d.offset(),f.bottom>d.bottom&&f.height<d.height&& 177.272 +b.scrollingDivs[b.activeDiv.id].scrollToItem(c,"bottom")}),a.bind(a.touchLayer,"exit-edit-reshape",function(){b.activeDiv&&(b.activeDiv.id&&b.scrollingDivs.hasOwnProperty(b.activeDiv.id))&&b.scrollingDivs[b.activeDiv.id].setPaddings(0,0)}));this.navbar||(this.navbar=a.create("div",{id:"navbar"}).get(0),this.viewportContainer.append(this.navbar));this.header||(this.header=a.create("div",{id:"header"}).get(0),this.viewportContainer.prepend(this.header));this.content||(this.content=a.create("div",{id:"content"}).get(0), 177.273 +a(this.content).insertAfter(this.header));this.menu||(this.menu=a.create("div",{id:"menu",html:"<div id='menu_scroller'></div>"}).get(0),this.viewportContainer.append(this.menu),this.menu.style.overflow="hidden",this.scrollingDivs.menu_scroller=a.query("#menu_scroller").scroller({scrollBars:!0,verticalScroll:!0,vScrollCSS:"afScrollbar",useJsScroll:!a.feat.nativeTouchScroll,autoEnable:!0,lockBounce:this.lockPageBounce,hasParent:!0}),a.feat.nativeTouchScroll&&a.query("#menu_scroller").css("height", 177.274 +"100%"),this.asideMenu=a.create("div",{id:"aside_menu",html:"<div id='aside_menu_scroller'></div>"}).get(0),this.viewportContainer.append(this.asideMenu),this.asideMenu.style.overflow="hidden",this.scrollingDivs.aside_menu_scroller=a.query("#aside_menu_scroller").scroller({scrollBars:!0,verticalScroll:!0,vScrollCSS:"afScrollbar",useJsScroll:!a.feat.nativeTouchScroll,autoEnable:!0,lockBounce:this.lockPageBounce,hasParent:!0}),a.feat.nativeTouchScroll&&a.query("#aside_menu_scroller").css("height","100%")); 177.275 +a(this.header).html("<a class='backButton button'></a> <h1 id='pageTitle'></h1>"+this.header.innerHTML);this.backButton=a.query("#header .backButton").css("visibility","hidden");a(document).on("click","#header .backButton",function(a){a.preventDefault();b.goBack()});this.titlebar=a.query("#header #pageTitle").get(0);this.addContentDiv("afui_ajax","");var c=a.create("div",{id:"afui_mask",className:"ui-loader",html:"<span class='ui-icon ui-icon-loading spin'></span><h1>Loading Content</h1>"}).css({"z-index":2E4, 177.276 +display:"none"});document.body.appendChild(c.get(0));c=a.create("div",{id:"afui_modal"}).get(0);a(c).hide();c.appendChild(a.create("div",{id:"modalHeader",className:"header"}).get(0));c.appendChild(a.create("div",{id:"modalContainer"}).get(0));c.appendChild(a.create("div",{id:"modalFooter",className:"footer"}).get(0));this.modalTransContainer=a.create("div",{id:"modalTransContainer"}).appendTo(c).get(0);this.viewportContainer.append(c);this.scrollingDivs.modal_container=a.query("#modalContainer").scroller({scrollBars:!0, 177.277 +vertical:!0,vScrollCSS:"afScrollbar",lockBounce:this.lockPageBounce});this.modalWindow=c;for(var d={},c=this.viewportContainer.get(0).querySelectorAll(".panel"),f=0;f<c.length;f++){var g=c[f],n=g,y=g.previousSibling;g.parentNode&&"content"!==g.parentNode.id?(n.getAttribute("selected")&&(this.firstDiv=g),this.addDivAndScroll(n),a.query("#content").append(g)):g.parsedContent||(g.parsedContent=1,n.getAttribute("selected")&&(this.firstDiv=g),this.addDivAndScroll(g),a(g).insertAfter(y));g.getAttribute("data-defer")&& 177.278 +(d[g.id]=g.getAttribute("data-defer"));this.firstDiv||(this.firstDiv=g);g=null}var c=null,u=!1,F=Object.keys(d).length,c=function(c){a.ajax({url:intel.xdk.webRoot+d[c],success:function(d){0<d.length&&(b.updatePanel(c,d),b.parseScriptTags(a.query("#"+c).get(0)));z++;z>=F&&(u=!1,a(document).trigger("defer:loaded"))},error:function(){console.log("Error with deferred load "+intel.xdk.webRoot+d[c]);z++;z>=F&&(u=!1,a(document).trigger("defer:loaded"))}})};if(0<F){var u=!0,z=0,s;for(s in d)c(s)}if(this.firstDiv)if(this.activeDiv= 177.279 +this.firstDiv,this.scrollingDivs[this.activeDiv.id]&&this.scrollingDivs[this.activeDiv.id].enable(),s=function(){a.query("#navbar").append(a.create("footer",{id:"defaultNav"}).append(a.query("#navbar").children()));b.defaultFooter="defaultNav";b.prevFooter=a.query("#defaultNav");b.updateNavbarElements(b.prevFooter);var c=a.query("nav").get(0);c&&(b.defaultMenu=a(c),b.updateSideMenuElements(b.defaultMenu),b.prevMenu=b.defaultMenu);if(c=a.query("aside").get(0))b.defaultAside=a(c),b.updateAsideElements(b.defaultAside), 177.280 +b.prevAsideMenu=b.defaultAside;b.defaultHeader="defaultHeader";a.query("#header").append(a.create("header",{id:"defaultHeader"}).append(a.query("#header").children()));b.prevHeader=a.query("#defaultHeader");a.query("#header").addClass("header");a.query("#navbar").addClass("footer");a.query("#navbar").on("click","footer>a:not(.button)",function(b){a.query("#navbar>footer>a").not(b.currentTarget).removeClass("pressed");a(b.currentTarget).addClass("pressed")});0<a.query("nav").length&&(c=b.splitview? 177.281 +" splitview":"",a.query("#afui #header").addClass("hasMenu"+c),a.query("#afui #content").addClass("hasMenu"+c),a.query("#afui #navbar").addClass("hasMenu"+c),a.query("#afui #menu").addClass("hasMenu"+c),a.query("#afui #aside_menu").addClass(c));0<a.query("aside").length&&a.query("#afui #header, #afui #content, #afui #navbar").addClass("hasAside");a.query("#afui #menu").addClass("tabletMenu");a.ui.splitview&&window.innerWidth>parseInt(a.ui.handheldMinWidth,10)&&(a.ui.sideMenuWidth=a("#menu").css("width")+ 177.282 +"px");var c=b.getPanelId(l),d=null!==c&&c==="#"+b.firstDiv.id;0<c.length&&b.loadDefaultHash&&!d?b.loadContent(l,!0,!1,"none"):(k="#"+b.firstDiv.id,b.firstDiv.style.display="block",b.parsePanelFunctions(b.firstDiv),b.loadContentData(b.firstDiv),a.query("#header .backButton").css("visibility","hidden"),("true"===b.firstDiv.getAttribute("data-modal")||"true"===b.firstDiv.getAttribute("modal"))&&b.showModal(b.firstDiv.id));b.launchCompleted=!0;a.query("#afui #splashscreen").remove();a.os.fennec?a(document).trigger("afui:ready"): 177.283 +setTimeout(function(){a(document).trigger("afui:ready")})},u)a(document).one("defer:loaded",s);else s();else setTimeout(function(){a(document).trigger("afui:ready")});a.bind(b,"content-loaded",function(){if(0<b.loadContentQueue.length){var a=b.loadContentQueue.splice(0,1)[0];b.loadContent(a[0],a[1],a[2],a[3],a[4])}});(window.navigator.standalone||this.isIntel)&&this.blockPageScroll();this.enableTabBar();this.topClickScroll()}},topClickScroll:function(){var a=this;document.getElementById("header").addEventListener("click", 177.284 +function(e){15>=e.clientY&&"h1"===e.target.nodeName.toLowerCase()&&a.scrollingDivs[a.activeDiv.id].scrollToTop("100")})},blockPageScroll:function(){a.query("#afui #header").bind("touchmove",function(a){a.preventDefault()})},noTransition:function(a,e){e.style.display="block";a.style.display="block";this.clearAnimations(e);this.css3animate(a,{x:"0%",y:0});this.finishTransition(a);e.style.zIndex=2;a.style.zIndex=1},finishTransition:function(b,e){b.style.display="none";this.doingTransition=!1;b&&a(b).trigger("unloadpanelcomplete"); 177.285 +e&&a(e).trigger("loadpanelcomplete");e&&this.clearAnimations(e);b&&this.clearAnimations(b);a.trigger(this,"content-loaded")},clearAnimations:function(b){b.style[a.feat.cssPrefix+"Transform"]="none";b.style[a.feat.cssPrefix+"Transition"]="none"}};var h=function(b,e){var c=document.getElementById("afui");if(e!==c){if("a"!==e.tagName.toLowerCase()&&e.parentNode)return h(b,e.parentNode);if("undefined"!==e.tagName&&"a"===e.tagName.toLowerCase()){if(!1!==("function"===typeof a.ui.customClickHandler?a.ui.customClickHandler: 177.286 +!1)&&a.ui.customClickHandler(e,b))return b.preventDefault();if(!(-1!==e.href.toLowerCase().indexOf("javascript:")||e.getAttribute("data-ignore")))if(-1===e.hash.indexOf("#")&&0<e.target.length)0!==e.href.toLowerCase().indexOf("javascript:")&&(a.ui.isIntel?(b.preventDefault(),intel.xdk.device.launchExternal(e.href)):a.os.desktop||(b.target.target="_blank"));else{var c=e.href,d=location.protocol+"//"+location.hostname+":"+location.port+location.pathname;0===c.indexOf(d)&&(c=c.substring(d.length));if("#"=== 177.287 +c||c.indexOf("#")===c.length-1||0===c.length&&0===e.hash.length)return b.preventDefault();d=/^((http|https|file):\/\/)/;-1!==e.href.indexOf(":")&&d.test(e.href)&&b.preventDefault();var d=e.getAttribute("data-transition"),f=e.getAttribute("data-resetHistory"),f=f&&"true"===f.toLowerCase()?!0:!1,c=0<e.hash.length?e.hash:c;a.ui.loadContent(c,f,0,d,e)}}}},g=function(a,e){void 0===e&&(e=0);var c=0,c=0;e^=-1;for(var d=0,f=a.length;d<f;d++)c=(e^a.charCodeAt(d))&255,c="0x"+"00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D".substr(9* 177.288 +c,8),e=e>>>8^c;return(e^-1)>>>0};a.ui=new f;a.ui.init=!0;a(window).trigger("afui:preinit");a(window).trigger("afui:init")})(af); 177.289 +(function(a){var n=function(){a.ui.isIntel=!0;setTimeout(function(){document.getElementById("afui").style.height="100%";document.body.style.height="100%";document.documentElement.style.minHeight=window.innerHeight},30);document.removeEventListener("intel.xdk.device.ready",n)};document.addEventListener("intel.xdk.device.ready",n);a.feat.nativeTouchScroll&&document.addEventListener("orientationchange",function(){if(a.ui.scrollingDivs[a.ui.activeDiv.id]){var l=a.ui.scrollingDivs[a.ui.activeDiv.id];l&& 177.290 +(0===l.el.scrollTop&&(l.disable(),setTimeout(function(){l.enable()},300)),l.refresh&&l.updateP2rHackPosition())}})})(af); 177.291 +(function(a){a.availableTransitions.fade=function(n,l,k){var f=this;k?(l.style.zIndex=1,n.style.zIndex=2,f.clearAnimations(l),f.css3animate(n,{x:"0%",time:a.transitionTime,opacity:0.1,complete:function(a){a?f.finishTransition(n,l):(f.css3animate(n,{x:"-100%",opacity:1,complete:function(){f.finishTransition(n)}}),l.style.zIndex=2,n.style.zIndex=1)}})):(n.style.zIndex=1,l.style.zIndex=2,l.style.opacity=0,f.css3animate(l,{x:"0%",opacity:0.1,complete:function(){f.css3animate(l,{x:"0%",time:a.transitionTime, 177.292 +opacity:1,complete:function(a){a?f.finishTransition(n,l):(f.clearAnimations(l),f.css3animate(n,{x:"-100%",y:0,complete:function(){f.finishTransition(n)}}))}})}}))}})(af.ui); 177.293 +(function(a){a.availableTransitions.flip=function(n,l,k){var f=this;k||(n.style.zIndex=1,l.style.zIndex=2);f.css3animate(l,{x:"100%",scale:0.8,rotateY:"180deg",complete:function(){f.css3animate(l,{x:"0%",scale:1,time:a.transitionTime,rotateY:"0deg",complete:function(){f.clearAnimations(l)}})}});f.css3animate(n,{x:"100%",time:a.transitionTime,scale:0.8,rotateY:"180deg",complete:function(){f.css3animate(n,{x:"-100%",opacity:1,scale:1,rotateY:"0deg",complete:function(){f.finishTransition(n)}});l.style.zIndex= 177.294 +2;n.style.zIndex=1}})}})(af.ui); 177.295 +(function(a){a.availableTransitions.pop=function(n,l,k){var f=this;k?(l.style.zIndex=1,n.style.zIndex=2,f.clearAnimations(l),f.css3animate(n,{x:"0%",time:a.transitionTime,opacity:0.1,scale:0.2,origin:"50% 50%",complete:function(a){a?f.finishTransition(n):(f.css3animate(n,{x:"-100%",opacity:1,complete:function(){f.finishTransition(n)}}),l.style.zIndex=2,n.style.zIndex=1)}})):(n.style.zIndex=1,l.style.zIndex=2,f.css3animate(l,{x:"0%",scale:0.2,origin:"50% 50%",opacity:0.1,time:"0ms",complete:function(){f.css3animate(l, 177.296 +{x:"0%",time:a.transitionTime,scale:1,opacity:1,origin:"0% 0%",complete:function(a){a?f.finishTransition(n,l):(f.clearAnimations(l),f.css3animate(n,{x:"100%",y:0,complete:function(){f.finishTransition(n)}}))}})}}))}})(af.ui); 177.297 +(function(a){function n(l,k,f){var h=this;f?h.css3animate(l,{x:"0%",y:"0%",complete:function(){h.css3animate(l,{x:"100%",time:a.transitionTime,complete:function(){h.finishTransition(l,k)}}).link(k,{x:"0%",time:a.transitionTime})}}).link(k,{x:"-100%",y:"0%"}):h.css3animate(l,{x:"0%",y:"0%",complete:function(){h.css3animate(l,{x:"-100%",time:a.transitionTime,complete:function(){h.finishTransition(l,k)}}).link(k,{x:"0%",time:a.transitionTime})}}).link(k,{x:"100%",y:"0%"})}a.availableTransitions.slide= 177.298 +n;a.availableTransitions["default"]=n})(af.ui);(function(a){a.availableTransitions.down=function(n,l,k){var f=this;k?(n.style.zIndex=2,l.style.zIndex=1,f.css3animate(n,{y:"0%",x:"0%",complete:function(){f.css3animate(n,{y:"-100%",time:a.transitionTime,complete:function(){f.finishTransition(n,l)}})}})):(n.style.zIndex=1,l.style.zIndex=2,f.css3animate(l,{y:"-100%",x:"0%",time:"10ms",complete:function(){f.css3animate(l,{y:"0%",time:a.transitionTime,complete:function(){f.finishTransition(n,l)}})}}))}})(af.ui); 177.299 +(function(a){a.availableTransitions.up=function(n,l,k){var f=this;k?(n.style.zIndex=2,l.style.zIndex=1,f.css3animate(n,{y:"0%",x:"0%",complete:function(){f.css3animate(n,{y:"100%",time:a.transitionTime,complete:function(){f.finishTransition(n,l)}})}})):(n.style.zIndex=1,l.style.zIndex=2,f.css3animate(l,{y:"100%",x:"0%",time:"10ms",complete:function(){f.css3animate(l,{y:"0%",time:a.transitionTime,complete:function(){f.finishTransition(n,l)}})}}))}})(af.ui); 177.300 +(function(a){function n(){a.ui.isWin8=!0;a.os.ie&&a.ui.isSideMenuEnabled()&&a.ui.ready(function(){if(!a.ui.tilesLoaded){a.ui.tilesLoaded=!0;if(window.innerWidth>a.ui.handheldMinWidth)return!0;a.ui.slideSideMenu&&(a.ui.slideSideMenu=!1);a.query("#afui #navbar footer").append("<a id='metroMenu' onclick='$.ui.toggleSideMenu()'>\u2022\u2022\u2022</a>");var l=a.query("#afui #navbar").find("a").not(".button");if(0<l.length){l.data("ignore-pressed","true").data("resetHistory","true");var k=parseFloat(100/ 177.301 +l.length);l.css("width",k+"%")}var f=a.ui.updateNavbarElements;a.ui.updateNavbarElements=function(){f.apply(a.ui,arguments);1!==a.query("#afui #navbar #metroMenu").length&&a.query("#afui #navbar footer").append("<a id='metroMenu' onclick='$.ui.toggleSideMenu()'>\u2022\u2022\u2022</a>")};a.ui.isSideMenuOn=function(){var f=0>parseInt(a.getCssMatrix(a("#navbar")).f,10)?!0:!1;return this.isSideMenuEnabled()&&f};a.ui.toggleRightSideMenu=function(f,g,b){if(this.isAsideMenuEnabled()&&!this.togglingAsideMenu){var e= 177.302 +this,c=a("#menu"),d=a.query("#aside_menu"),k=a.query("#content, #header, #navbar"),l=a.query(".afui_panel_mask");b=b||this.transitionTime;var n="block"===a("#aside_menu").css("display"),y="-"+e.sideMenuWidth;0===l.length&&window.innerWidth<a.ui.handheldMinWidth&&(k.append("<div class='afui_panel_mask'></div>"),l=a.query(".afui_panel_mask"),a(".afui_panel_mask").bind("click",function(){a.ui.toggleSideMenu(!1,null,null,!0)}));var u=this.getSideMenuPosition();n&&0<u&&(n=!1);if(2===f||!n&&(void 0!== 177.303 +f&&!1!==f||void 0===f))this.togglingSideMenu=!0,d.show(),e.css3animate(k,{x:y,time:b,complete:function(b){e.togglingSideMenu=!1;k.vendorCss("Transition","");g&&g(b);0!==l.length&&window.innerWidth<a.ui.handheldMinWidth&&l.show()}});else if(void 0===f||void 0!==f&&!1===f)this.togglingSideMenu=!0,e.css3animate(k,{x:"0px",time:b,complete:function(b){k.vendorCss("Transition","");k.vendorCss("Transform","");e.togglingSideMenu=!1;g&&g(b);a.ui.splitview||c.hide();d.hide();0!==l.length&&window.innerWidth< 177.304 +a.ui.handheldMinWidth&&l.hide()}})}};a.ui.toggleLeftSideMenu=function(f,g){if(this.isSideMenuEnabled()&&!this.togglingSideMenu){this.togglingSideMenu=!0;var b=this,e=a.query("#menu"),c=a.query("#navbar"),d=this.isSideMenuOn();if(2===f||!d&&(void 0!==f&&!1!==f||void 0===f))e.show(),b.css3animate(c,{y:"-150px",time:a.ui.transitionTime,complete:function(){b.togglingSideMenu=!1;g&&g(!0)}}),b.css3animate(e,{y:"0px",time:a.ui.transitionTime});else if(void 0===f||void 0!==f&&!1===f)b.css3animate(c,{y:"0", 177.305 +time:a.ui.transitionTime,complete:function(){b.togglingSideMenu=!1;g&&g(!0);e.hide()}}),b.css3animate(e,{y:"150px",time:a.ui.transitionTime})}}}})}if(!a)throw"This plugin requires AFUi";a.ui?a.ui.ready(function(){n()}):a(document).ready(function(){n()})})(af);
178.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 178.2 +++ b/Touchgui/www/lib/appframework/jq.appframework.min.js Thu Jun 04 14:50:33 2015 +0200 178.3 @@ -0,0 +1,18 @@ 178.4 +/*! intel-appframework - v2.1.0 - 2014-09-16 */ 178.5 + 178.6 +/* 178.7 + Intel 2013 178.8 + @author Ian Maffett 178.9 + @description A plugin to allow jQuery developers to use App Framework UI 178.10 +*/ 178.11 +(function(c,f){function p(a,b){if(a)if(a.nodeType)b[b.length++]=a;else for(var e=0,d=a.length;e<d;e++)b[b.length++]=a[e]}function m(a,b){a.os={};a.os.webkit=b.match(/WebKit\/([\d.]+)/)?!0:!1;a.os.android=b.match(/(Android)\s+([\d.]+)/)||b.match(/Silk-Accelerated/)?!0:!1;a.os.androidICS=a.os.android&&b.match(/(Android)\s4/)?!0:!1;a.os.ipad=b.match(/(iPad).*OS\s([\d_]+)/)?!0:!1;a.os.iphone=!a.os.ipad&&b.match(/(iPhone\sOS)\s([\d_]+)/)?!0:!1;a.os.ios7=(a.os.ipad||a.os.iphone)&&b.match(/7_/)||(a.os.ipad|| 178.12 +a.os.iphone)&&b.match(/8_/)?!0:!1;a.os.webos=b.match(/(webOS|hpwOS)[\s\/]([\d.]+)/)?!0:!1;a.os.touchpad=a.os.webos&&b.match(/TouchPad/)?!0:!1;a.os.ios=a.os.ipad||a.os.iphone;a.os.playbook=b.match(/PlayBook/)?!0:!1;a.os.blackberry10=b.match(/BB10/)?!0:!1;a.os.blackberry=a.os.playbook||a.os.blackberry10||b.match(/BlackBerry/)?!0:!1;a.os.chrome=b.match(/Chrome/)?!0:!1;a.os.opera=b.match(/Opera/)?!0:!1;a.os.fennec=b.match(/fennec/i)?!0:b.match(/Firefox/)?!0:!1;a.os.ie=b.match(/MSIE 10.0/i)||b.match(/Trident\/7/i)? 178.13 +!0:!1;a.os.ieTouch=a.os.ie&&b.toLowerCase().match(/touch/i)?!0:!1;a.os.tizen=b.match(/Tizen/i)?!0:!1;a.os.supportsTouch=f.DocumentTouch&&h instanceof f.DocumentTouch||"ontouchstart"in f;a.os.kindle=b.match(/Silk-Accelerated/)?!0:!1;a.feat={};var e=h.documentElement.getElementsByTagName("head")[0];a.feat.nativeTouchScroll="undefined"!==typeof e.style["-webkit-overflow-scrolling"]&&(a.os.ios||a.os.blackberry10);a.feat.cssPrefix=a.os.webkit?"Webkit":a.os.fennec?"Moz":a.os.ie?"ms":a.os.opera?"O":"";a.feat.cssTransformStart= 178.14 +!a.os.opera?"3d(":"(";a.feat.cssTransformEnd=!a.os.opera?",0)":")";a.os.android&&!a.os.webkit&&(a.os.android=!1)}jQuery.event.props.push("touches");jQuery.event.props.push("originalTouches");jQuery.event.props.push("changedTouches");var h=f.document,l={},k="object"===typeof MSApp,q=1;c.extend(c.fn,{vendorCss:function(a,b,e){return this.css(c.feat.cssPrefix+a,b,e)},cssTranslate:function(a){return this.vendorCss("Transform","translate"+c.feat.cssTransformStart+a+c.feat.cssTransformEnd)},computedStyle:function(a){if(!(0=== 178.15 +this.length||void 0==a))return f.getComputedStyle(this[0],"")[a]},replaceClass:function(a,b){if(void 0==a||void 0==b)return this;var e=function(a){c=c.replace(a in l?l[a]:l[a]=RegExp("(^|\\s)"+a+"(\\s|$)")," ")},d=0;for(;d<this.length;d++)if(void 0==a)this[d].className=b;else{var c=this[d].className;a.split(/\s+/g).concat(b.split(/\s+/g)).forEach(e);c=c.trim();this[d].className=0<c.length?(c+" "+b).trim():b}return this}});m(c,navigator.userAgent);c.__detectUA=m;c.uuid=function(){var a=function(){return(65536* 178.16 +(1+Math.random())|0).toString(16).substring(1)};return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()};c.getCssMatrix=function(a){c.is$(a)&&(a=a.get(0));var b=f.WebKitCSSMatrix||f.MSCSSMatrix;if(void 0===a)return b?new b:{a:0,b:0,c:0,d:0,e:0,f:0};a=f.getComputedStyle(a);a=a.webkitTransform||a.transform||a[c.feat.cssPrefix+"Transform"];return b?new b(a):a?(b=a.replace(/[^0-9\-.,]/g,"").split(","),{a:+b[0],b:+b[1],c:+b[2],d:+b[3],e:+b[4],f:+b[5]}):{a:0,b:0,c:0,d:0,e:0,f:0}};c.create=function(a,b){var e, 178.17 +d=new c;if(b||"<"!==a[0]){b.html&&(b.innerHTML=b.html,delete b.html);e=h.createElement(a);for(var g in b)e[g]=b[g];d[d.length++]=e}else e=h.createElement("div"),k?MSApp.execUnsafeLocalFunction(function(){e.innerHTML=a.trim()}):e.innerHTML=a,p(e.childNodes,d);return d};c.query=function(a,b){try{return c(a,b)}catch(e){return c()}};c.bind=function(a,b,e){a.__events||(a.__events={});c.isArray(b)||(b=[b]);for(var d=0;d<b.length;d++)a.__events[b[d]]||(a.__events[b[d]]=[]),a.__events[b[d]].push(e)};c.trigger= 178.18 +function(a,b,e){var d=!0;if(!a.__events)return d;c.isArray(b)||(b=[b]);c.isArray(e)||(e=[]);for(var g=0;g<b.length;g++)if(a.__events[b[g]])for(var f=a.__events[b[g]],h=0;h<f.length;h++)c.isFunction(f[h])&&!1===f[h].apply(a,e)&&(d=!1);return d};c.unbind=function(a,b,e){if(a.__events)if(void 0==b)delete a.__events;else{c.isArray(b)||(b=[b]);for(var d=0;d<b.length;d++)if(a.__events[b[d]])for(var g=a.__events[b[d]],f=0;f<g.length;f++)if(void 0==e&&delete g[f],g[f]===e){g.splice(f,1);break}}};c.cleanUpContent= 178.19 +function(){};c.isObject=function(a){return"object"===typeof a};c.asap=function(a,b,e){if(!c.isFunction(a))throw"$.asap - argument is not a valid function";setTimeout(function(){a.apply(b,e)})};var n={};c.parseJS=function(a){if(a){if("string"===typeof a){var b=h.createElement("div");k?MSApp.execUnsafeLocalFunction(function(){b.innerHTML=a}):b.innerHTML=a;a=b}var c=a.getElementsByTagName("script");a=null;for(var d=0;d<c.length;d++)if(0<c[d].src.length&&!n[c[d].src]&&!k){var g=h.createElement("script"); 178.20 +g.type=c[d].type;g.src=c[d].src;h.getElementsByTagName("head")[0].appendChild(g);n[c[d].src]=1;g=null}else f.eval(c[d].innerHTML)}};c.is$=function(a){return a instanceof c};c.jsonP=function(a){if(k)return a.type="get",a.dataType=null,c.get(a);var b="jsonp_callback"+ ++q,e="",d,g=h.createElement("script");f[b]=function(d){clearTimeout(e);c(g).remove();delete f[b];a.success.call(void 0,d)};-1!==a.url.indexOf("callback=?")?g.src=a.url.replace(/=\?/,"="+b):(d=a.jsonp?a.jsonp:"callback",-1===a.url.indexOf("?")? 178.21 +a.url+="?"+d+"="+b:a.url+="&"+d+"="+b,g.src=a.url);a.error&&(g.onerror=function(){clearTimeout(e);a.error.call(void 0,"","error")});c("head").append(g);0<a.timeout&&(e=setTimeout(function(){a.error.call(void 0,"","timeout")},a.timeout));return{}};f.$afm=c;f.numOnly||(f.numOnly=function(a){if(void 0===a||""===a)return 0;if(isNaN(parseFloat(a)))if(a.replace)a=a.replace(/[^0-9.-]/g,"");else return 0;return parseFloat(a)})})(jQuery,window);window.af=window.jq=jQuery;
179.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 179.2 +++ b/Touchgui/www/lib/jquery/jquery-2.1.1.js Thu Jun 04 14:50:33 2015 +0200 179.3 @@ -0,0 +1,9190 @@ 179.4 +/*! 179.5 + * jQuery JavaScript Library v2.1.1 179.6 + * http://jquery.com/ 179.7 + * 179.8 + * Includes Sizzle.js 179.9 + * http://sizzlejs.com/ 179.10 + * 179.11 + * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors 179.12 + * Released under the MIT license 179.13 + * http://jquery.org/license 179.14 + * 179.15 + * Date: 2014-05-01T17:11Z 179.16 + */ 179.17 + 179.18 +(function( global, factory ) { 179.19 + 179.20 + if ( typeof module === "object" && typeof module.exports === "object" ) { 179.21 + // For CommonJS and CommonJS-like environments where a proper window is present, 179.22 + // execute the factory and get jQuery 179.23 + // For environments that do not inherently posses a window with a document 179.24 + // (such as Node.js), expose a jQuery-making factory as module.exports 179.25 + // This accentuates the need for the creation of a real window 179.26 + // e.g. var jQuery = require("jquery")(window); 179.27 + // See ticket #14549 for more info 179.28 + module.exports = global.document ? 179.29 + factory( global, true ) : 179.30 + function( w ) { 179.31 + if ( !w.document ) { 179.32 + throw new Error( "jQuery requires a window with a document" ); 179.33 + } 179.34 + return factory( w ); 179.35 + }; 179.36 + } else { 179.37 + factory( global ); 179.38 + } 179.39 + 179.40 +// Pass this if window is not defined yet 179.41 +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 179.42 + 179.43 +// Can't do this because several apps including ASP.NET trace 179.44 +// the stack via arguments.caller.callee and Firefox dies if 179.45 +// you try to trace through "use strict" call chains. (#13335) 179.46 +// Support: Firefox 18+ 179.47 +// 179.48 + 179.49 +var arr = []; 179.50 + 179.51 +var slice = arr.slice; 179.52 + 179.53 +var concat = arr.concat; 179.54 + 179.55 +var push = arr.push; 179.56 + 179.57 +var indexOf = arr.indexOf; 179.58 + 179.59 +var class2type = {}; 179.60 + 179.61 +var toString = class2type.toString; 179.62 + 179.63 +var hasOwn = class2type.hasOwnProperty; 179.64 + 179.65 +var support = {}; 179.66 + 179.67 + 179.68 + 179.69 +var 179.70 + // Use the correct document accordingly with window argument (sandbox) 179.71 + document = window.document, 179.72 + 179.73 + version = "2.1.1", 179.74 + 179.75 + // Define a local copy of jQuery 179.76 + jQuery = function( selector, context ) { 179.77 + // The jQuery object is actually just the init constructor 'enhanced' 179.78 + // Need init if jQuery is called (just allow error to be thrown if not included) 179.79 + return new jQuery.fn.init( selector, context ); 179.80 + }, 179.81 + 179.82 + // Support: Android<4.1 179.83 + // Make sure we trim BOM and NBSP 179.84 + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, 179.85 + 179.86 + // Matches dashed string for camelizing 179.87 + rmsPrefix = /^-ms-/, 179.88 + rdashAlpha = /-([\da-z])/gi, 179.89 + 179.90 + // Used by jQuery.camelCase as callback to replace() 179.91 + fcamelCase = function( all, letter ) { 179.92 + return letter.toUpperCase(); 179.93 + }; 179.94 + 179.95 +jQuery.fn = jQuery.prototype = { 179.96 + // The current version of jQuery being used 179.97 + jquery: version, 179.98 + 179.99 + constructor: jQuery, 179.100 + 179.101 + // Start with an empty selector 179.102 + selector: "", 179.103 + 179.104 + // The default length of a jQuery object is 0 179.105 + length: 0, 179.106 + 179.107 + toArray: function() { 179.108 + return slice.call( this ); 179.109 + }, 179.110 + 179.111 + // Get the Nth element in the matched element set OR 179.112 + // Get the whole matched element set as a clean array 179.113 + get: function( num ) { 179.114 + return num != null ? 179.115 + 179.116 + // Return just the one element from the set 179.117 + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : 179.118 + 179.119 + // Return all the elements in a clean array 179.120 + slice.call( this ); 179.121 + }, 179.122 + 179.123 + // Take an array of elements and push it onto the stack 179.124 + // (returning the new matched element set) 179.125 + pushStack: function( elems ) { 179.126 + 179.127 + // Build a new jQuery matched element set 179.128 + var ret = jQuery.merge( this.constructor(), elems ); 179.129 + 179.130 + // Add the old object onto the stack (as a reference) 179.131 + ret.prevObject = this; 179.132 + ret.context = this.context; 179.133 + 179.134 + // Return the newly-formed element set 179.135 + return ret; 179.136 + }, 179.137 + 179.138 + // Execute a callback for every element in the matched set. 179.139 + // (You can seed the arguments with an array of args, but this is 179.140 + // only used internally.) 179.141 + each: function( callback, args ) { 179.142 + return jQuery.each( this, callback, args ); 179.143 + }, 179.144 + 179.145 + map: function( callback ) { 179.146 + return this.pushStack( jQuery.map(this, function( elem, i ) { 179.147 + return callback.call( elem, i, elem ); 179.148 + })); 179.149 + }, 179.150 + 179.151 + slice: function() { 179.152 + return this.pushStack( slice.apply( this, arguments ) ); 179.153 + }, 179.154 + 179.155 + first: function() { 179.156 + return this.eq( 0 ); 179.157 + }, 179.158 + 179.159 + last: function() { 179.160 + return this.eq( -1 ); 179.161 + }, 179.162 + 179.163 + eq: function( i ) { 179.164 + var len = this.length, 179.165 + j = +i + ( i < 0 ? len : 0 ); 179.166 + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); 179.167 + }, 179.168 + 179.169 + end: function() { 179.170 + return this.prevObject || this.constructor(null); 179.171 + }, 179.172 + 179.173 + // For internal use only. 179.174 + // Behaves like an Array's method, not like a jQuery method. 179.175 + push: push, 179.176 + sort: arr.sort, 179.177 + splice: arr.splice 179.178 +}; 179.179 + 179.180 +jQuery.extend = jQuery.fn.extend = function() { 179.181 + var options, name, src, copy, copyIsArray, clone, 179.182 + target = arguments[0] || {}, 179.183 + i = 1, 179.184 + length = arguments.length, 179.185 + deep = false; 179.186 + 179.187 + // Handle a deep copy situation 179.188 + if ( typeof target === "boolean" ) { 179.189 + deep = target; 179.190 + 179.191 + // skip the boolean and the target 179.192 + target = arguments[ i ] || {}; 179.193 + i++; 179.194 + } 179.195 + 179.196 + // Handle case when target is a string or something (possible in deep copy) 179.197 + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { 179.198 + target = {}; 179.199 + } 179.200 + 179.201 + // extend jQuery itself if only one argument is passed 179.202 + if ( i === length ) { 179.203 + target = this; 179.204 + i--; 179.205 + } 179.206 + 179.207 + for ( ; i < length; i++ ) { 179.208 + // Only deal with non-null/undefined values 179.209 + if ( (options = arguments[ i ]) != null ) { 179.210 + // Extend the base object 179.211 + for ( name in options ) { 179.212 + src = target[ name ]; 179.213 + copy = options[ name ]; 179.214 + 179.215 + // Prevent never-ending loop 179.216 + if ( target === copy ) { 179.217 + continue; 179.218 + } 179.219 + 179.220 + // Recurse if we're merging plain objects or arrays 179.221 + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { 179.222 + if ( copyIsArray ) { 179.223 + copyIsArray = false; 179.224 + clone = src && jQuery.isArray(src) ? src : []; 179.225 + 179.226 + } else { 179.227 + clone = src && jQuery.isPlainObject(src) ? src : {}; 179.228 + } 179.229 + 179.230 + // Never move original objects, clone them 179.231 + target[ name ] = jQuery.extend( deep, clone, copy ); 179.232 + 179.233 + // Don't bring in undefined values 179.234 + } else if ( copy !== undefined ) { 179.235 + target[ name ] = copy; 179.236 + } 179.237 + } 179.238 + } 179.239 + } 179.240 + 179.241 + // Return the modified object 179.242 + return target; 179.243 +}; 179.244 + 179.245 +jQuery.extend({ 179.246 + // Unique for each copy of jQuery on the page 179.247 + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 179.248 + 179.249 + // Assume jQuery is ready without the ready module 179.250 + isReady: true, 179.251 + 179.252 + error: function( msg ) { 179.253 + throw new Error( msg ); 179.254 + }, 179.255 + 179.256 + noop: function() {}, 179.257 + 179.258 + // See test/unit/core.js for details concerning isFunction. 179.259 + // Since version 1.3, DOM methods and functions like alert 179.260 + // aren't supported. They return false on IE (#2968). 179.261 + isFunction: function( obj ) { 179.262 + return jQuery.type(obj) === "function"; 179.263 + }, 179.264 + 179.265 + isArray: Array.isArray, 179.266 + 179.267 + isWindow: function( obj ) { 179.268 + return obj != null && obj === obj.window; 179.269 + }, 179.270 + 179.271 + isNumeric: function( obj ) { 179.272 + // parseFloat NaNs numeric-cast false positives (null|true|false|"") 179.273 + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 179.274 + // subtraction forces infinities to NaN 179.275 + return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; 179.276 + }, 179.277 + 179.278 + isPlainObject: function( obj ) { 179.279 + // Not plain objects: 179.280 + // - Any object or value whose internal [[Class]] property is not "[object Object]" 179.281 + // - DOM nodes 179.282 + // - window 179.283 + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { 179.284 + return false; 179.285 + } 179.286 + 179.287 + if ( obj.constructor && 179.288 + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { 179.289 + return false; 179.290 + } 179.291 + 179.292 + // If the function hasn't returned already, we're confident that 179.293 + // |obj| is a plain object, created by {} or constructed with new Object 179.294 + return true; 179.295 + }, 179.296 + 179.297 + isEmptyObject: function( obj ) { 179.298 + var name; 179.299 + for ( name in obj ) { 179.300 + return false; 179.301 + } 179.302 + return true; 179.303 + }, 179.304 + 179.305 + type: function( obj ) { 179.306 + if ( obj == null ) { 179.307 + return obj + ""; 179.308 + } 179.309 + // Support: Android < 4.0, iOS < 6 (functionish RegExp) 179.310 + return typeof obj === "object" || typeof obj === "function" ? 179.311 + class2type[ toString.call(obj) ] || "object" : 179.312 + typeof obj; 179.313 + }, 179.314 + 179.315 + // Evaluates a script in a global context 179.316 + globalEval: function( code ) { 179.317 + var script, 179.318 + indirect = eval; 179.319 + 179.320 + code = jQuery.trim( code ); 179.321 + 179.322 + if ( code ) { 179.323 + // If the code includes a valid, prologue position 179.324 + // strict mode pragma, execute code by injecting a 179.325 + // script tag into the document. 179.326 + if ( code.indexOf("use strict") === 1 ) { 179.327 + script = document.createElement("script"); 179.328 + script.text = code; 179.329 + document.head.appendChild( script ).parentNode.removeChild( script ); 179.330 + } else { 179.331 + // Otherwise, avoid the DOM node creation, insertion 179.332 + // and removal by using an indirect global eval 179.333 + indirect( code ); 179.334 + } 179.335 + } 179.336 + }, 179.337 + 179.338 + // Convert dashed to camelCase; used by the css and data modules 179.339 + // Microsoft forgot to hump their vendor prefix (#9572) 179.340 + camelCase: function( string ) { 179.341 + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 179.342 + }, 179.343 + 179.344 + nodeName: function( elem, name ) { 179.345 + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 179.346 + }, 179.347 + 179.348 + // args is for internal usage only 179.349 + each: function( obj, callback, args ) { 179.350 + var value, 179.351 + i = 0, 179.352 + length = obj.length, 179.353 + isArray = isArraylike( obj ); 179.354 + 179.355 + if ( args ) { 179.356 + if ( isArray ) { 179.357 + for ( ; i < length; i++ ) { 179.358 + value = callback.apply( obj[ i ], args ); 179.359 + 179.360 + if ( value === false ) { 179.361 + break; 179.362 + } 179.363 + } 179.364 + } else { 179.365 + for ( i in obj ) { 179.366 + value = callback.apply( obj[ i ], args ); 179.367 + 179.368 + if ( value === false ) { 179.369 + break; 179.370 + } 179.371 + } 179.372 + } 179.373 + 179.374 + // A special, fast, case for the most common use of each 179.375 + } else { 179.376 + if ( isArray ) { 179.377 + for ( ; i < length; i++ ) { 179.378 + value = callback.call( obj[ i ], i, obj[ i ] ); 179.379 + 179.380 + if ( value === false ) { 179.381 + break; 179.382 + } 179.383 + } 179.384 + } else { 179.385 + for ( i in obj ) { 179.386 + value = callback.call( obj[ i ], i, obj[ i ] ); 179.387 + 179.388 + if ( value === false ) { 179.389 + break; 179.390 + } 179.391 + } 179.392 + } 179.393 + } 179.394 + 179.395 + return obj; 179.396 + }, 179.397 + 179.398 + // Support: Android<4.1 179.399 + trim: function( text ) { 179.400 + return text == null ? 179.401 + "" : 179.402 + ( text + "" ).replace( rtrim, "" ); 179.403 + }, 179.404 + 179.405 + // results is for internal usage only 179.406 + makeArray: function( arr, results ) { 179.407 + var ret = results || []; 179.408 + 179.409 + if ( arr != null ) { 179.410 + if ( isArraylike( Object(arr) ) ) { 179.411 + jQuery.merge( ret, 179.412 + typeof arr === "string" ? 179.413 + [ arr ] : arr 179.414 + ); 179.415 + } else { 179.416 + push.call( ret, arr ); 179.417 + } 179.418 + } 179.419 + 179.420 + return ret; 179.421 + }, 179.422 + 179.423 + inArray: function( elem, arr, i ) { 179.424 + return arr == null ? -1 : indexOf.call( arr, elem, i ); 179.425 + }, 179.426 + 179.427 + merge: function( first, second ) { 179.428 + var len = +second.length, 179.429 + j = 0, 179.430 + i = first.length; 179.431 + 179.432 + for ( ; j < len; j++ ) { 179.433 + first[ i++ ] = second[ j ]; 179.434 + } 179.435 + 179.436 + first.length = i; 179.437 + 179.438 + return first; 179.439 + }, 179.440 + 179.441 + grep: function( elems, callback, invert ) { 179.442 + var callbackInverse, 179.443 + matches = [], 179.444 + i = 0, 179.445 + length = elems.length, 179.446 + callbackExpect = !invert; 179.447 + 179.448 + // Go through the array, only saving the items 179.449 + // that pass the validator function 179.450 + for ( ; i < length; i++ ) { 179.451 + callbackInverse = !callback( elems[ i ], i ); 179.452 + if ( callbackInverse !== callbackExpect ) { 179.453 + matches.push( elems[ i ] ); 179.454 + } 179.455 + } 179.456 + 179.457 + return matches; 179.458 + }, 179.459 + 179.460 + // arg is for internal usage only 179.461 + map: function( elems, callback, arg ) { 179.462 + var value, 179.463 + i = 0, 179.464 + length = elems.length, 179.465 + isArray = isArraylike( elems ), 179.466 + ret = []; 179.467 + 179.468 + // Go through the array, translating each of the items to their new values 179.469 + if ( isArray ) { 179.470 + for ( ; i < length; i++ ) { 179.471 + value = callback( elems[ i ], i, arg ); 179.472 + 179.473 + if ( value != null ) { 179.474 + ret.push( value ); 179.475 + } 179.476 + } 179.477 + 179.478 + // Go through every key on the object, 179.479 + } else { 179.480 + for ( i in elems ) { 179.481 + value = callback( elems[ i ], i, arg ); 179.482 + 179.483 + if ( value != null ) { 179.484 + ret.push( value ); 179.485 + } 179.486 + } 179.487 + } 179.488 + 179.489 + // Flatten any nested arrays 179.490 + return concat.apply( [], ret ); 179.491 + }, 179.492 + 179.493 + // A global GUID counter for objects 179.494 + guid: 1, 179.495 + 179.496 + // Bind a function to a context, optionally partially applying any 179.497 + // arguments. 179.498 + proxy: function( fn, context ) { 179.499 + var tmp, args, proxy; 179.500 + 179.501 + if ( typeof context === "string" ) { 179.502 + tmp = fn[ context ]; 179.503 + context = fn; 179.504 + fn = tmp; 179.505 + } 179.506 + 179.507 + // Quick check to determine if target is callable, in the spec 179.508 + // this throws a TypeError, but we will just return undefined. 179.509 + if ( !jQuery.isFunction( fn ) ) { 179.510 + return undefined; 179.511 + } 179.512 + 179.513 + // Simulated bind 179.514 + args = slice.call( arguments, 2 ); 179.515 + proxy = function() { 179.516 + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 179.517 + }; 179.518 + 179.519 + // Set the guid of unique handler to the same of original handler, so it can be removed 179.520 + proxy.guid = fn.guid = fn.guid || jQuery.guid++; 179.521 + 179.522 + return proxy; 179.523 + }, 179.524 + 179.525 + now: Date.now, 179.526 + 179.527 + // jQuery.support is not used in Core but other projects attach their 179.528 + // properties to it so it needs to exist. 179.529 + support: support 179.530 +}); 179.531 + 179.532 +// Populate the class2type map 179.533 +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { 179.534 + class2type[ "[object " + name + "]" ] = name.toLowerCase(); 179.535 +}); 179.536 + 179.537 +function isArraylike( obj ) { 179.538 + var length = obj.length, 179.539 + type = jQuery.type( obj ); 179.540 + 179.541 + if ( type === "function" || jQuery.isWindow( obj ) ) { 179.542 + return false; 179.543 + } 179.544 + 179.545 + if ( obj.nodeType === 1 && length ) { 179.546 + return true; 179.547 + } 179.548 + 179.549 + return type === "array" || length === 0 || 179.550 + typeof length === "number" && length > 0 && ( length - 1 ) in obj; 179.551 +} 179.552 +var Sizzle = 179.553 +/*! 179.554 + * Sizzle CSS Selector Engine v1.10.19 179.555 + * http://sizzlejs.com/ 179.556 + * 179.557 + * Copyright 2013 jQuery Foundation, Inc. and other contributors 179.558 + * Released under the MIT license 179.559 + * http://jquery.org/license 179.560 + * 179.561 + * Date: 2014-04-18 179.562 + */ 179.563 +(function( window ) { 179.564 + 179.565 +var i, 179.566 + support, 179.567 + Expr, 179.568 + getText, 179.569 + isXML, 179.570 + tokenize, 179.571 + compile, 179.572 + select, 179.573 + outermostContext, 179.574 + sortInput, 179.575 + hasDuplicate, 179.576 + 179.577 + // Local document vars 179.578 + setDocument, 179.579 + document, 179.580 + docElem, 179.581 + documentIsHTML, 179.582 + rbuggyQSA, 179.583 + rbuggyMatches, 179.584 + matches, 179.585 + contains, 179.586 + 179.587 + // Instance-specific data 179.588 + expando = "sizzle" + -(new Date()), 179.589 + preferredDoc = window.document, 179.590 + dirruns = 0, 179.591 + done = 0, 179.592 + classCache = createCache(), 179.593 + tokenCache = createCache(), 179.594 + compilerCache = createCache(), 179.595 + sortOrder = function( a, b ) { 179.596 + if ( a === b ) { 179.597 + hasDuplicate = true; 179.598 + } 179.599 + return 0; 179.600 + }, 179.601 + 179.602 + // General-purpose constants 179.603 + strundefined = typeof undefined, 179.604 + MAX_NEGATIVE = 1 << 31, 179.605 + 179.606 + // Instance methods 179.607 + hasOwn = ({}).hasOwnProperty, 179.608 + arr = [], 179.609 + pop = arr.pop, 179.610 + push_native = arr.push, 179.611 + push = arr.push, 179.612 + slice = arr.slice, 179.613 + // Use a stripped-down indexOf if we can't use a native one 179.614 + indexOf = arr.indexOf || function( elem ) { 179.615 + var i = 0, 179.616 + len = this.length; 179.617 + for ( ; i < len; i++ ) { 179.618 + if ( this[i] === elem ) { 179.619 + return i; 179.620 + } 179.621 + } 179.622 + return -1; 179.623 + }, 179.624 + 179.625 + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", 179.626 + 179.627 + // Regular expressions 179.628 + 179.629 + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace 179.630 + whitespace = "[\\x20\\t\\r\\n\\f]", 179.631 + // http://www.w3.org/TR/css3-syntax/#characters 179.632 + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", 179.633 + 179.634 + // Loosely modeled on CSS identifier characters 179.635 + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors 179.636 + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier 179.637 + identifier = characterEncoding.replace( "w", "w#" ), 179.638 + 179.639 + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 179.640 + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + 179.641 + // Operator (capture 2) 179.642 + "*([*^$|!~]?=)" + whitespace + 179.643 + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 179.644 + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + 179.645 + "*\\]", 179.646 + 179.647 + pseudos = ":(" + characterEncoding + ")(?:\\((" + 179.648 + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 179.649 + // 1. quoted (capture 3; capture 4 or capture 5) 179.650 + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 179.651 + // 2. simple (capture 6) 179.652 + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 179.653 + // 3. anything else (capture 2) 179.654 + ".*" + 179.655 + ")\\)|)", 179.656 + 179.657 + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 179.658 + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), 179.659 + 179.660 + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 179.661 + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), 179.662 + 179.663 + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), 179.664 + 179.665 + rpseudo = new RegExp( pseudos ), 179.666 + ridentifier = new RegExp( "^" + identifier + "$" ), 179.667 + 179.668 + matchExpr = { 179.669 + "ID": new RegExp( "^#(" + characterEncoding + ")" ), 179.670 + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), 179.671 + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), 179.672 + "ATTR": new RegExp( "^" + attributes ), 179.673 + "PSEUDO": new RegExp( "^" + pseudos ), 179.674 + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + 179.675 + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + 179.676 + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 179.677 + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), 179.678 + // For use in libraries implementing .is() 179.679 + // We use this for POS matching in `select` 179.680 + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + 179.681 + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 179.682 + }, 179.683 + 179.684 + rinputs = /^(?:input|select|textarea|button)$/i, 179.685 + rheader = /^h\d$/i, 179.686 + 179.687 + rnative = /^[^{]+\{\s*\[native \w/, 179.688 + 179.689 + // Easily-parseable/retrievable ID or TAG or CLASS selectors 179.690 + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 179.691 + 179.692 + rsibling = /[+~]/, 179.693 + rescape = /'|\\/g, 179.694 + 179.695 + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 179.696 + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), 179.697 + funescape = function( _, escaped, escapedWhitespace ) { 179.698 + var high = "0x" + escaped - 0x10000; 179.699 + // NaN means non-codepoint 179.700 + // Support: Firefox<24 179.701 + // Workaround erroneous numeric interpretation of +"0x" 179.702 + return high !== high || escapedWhitespace ? 179.703 + escaped : 179.704 + high < 0 ? 179.705 + // BMP codepoint 179.706 + String.fromCharCode( high + 0x10000 ) : 179.707 + // Supplemental Plane codepoint (surrogate pair) 179.708 + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 179.709 + }; 179.710 + 179.711 +// Optimize for push.apply( _, NodeList ) 179.712 +try { 179.713 + push.apply( 179.714 + (arr = slice.call( preferredDoc.childNodes )), 179.715 + preferredDoc.childNodes 179.716 + ); 179.717 + // Support: Android<4.0 179.718 + // Detect silently failing push.apply 179.719 + arr[ preferredDoc.childNodes.length ].nodeType; 179.720 +} catch ( e ) { 179.721 + push = { apply: arr.length ? 179.722 + 179.723 + // Leverage slice if possible 179.724 + function( target, els ) { 179.725 + push_native.apply( target, slice.call(els) ); 179.726 + } : 179.727 + 179.728 + // Support: IE<9 179.729 + // Otherwise append directly 179.730 + function( target, els ) { 179.731 + var j = target.length, 179.732 + i = 0; 179.733 + // Can't trust NodeList.length 179.734 + while ( (target[j++] = els[i++]) ) {} 179.735 + target.length = j - 1; 179.736 + } 179.737 + }; 179.738 +} 179.739 + 179.740 +function Sizzle( selector, context, results, seed ) { 179.741 + var match, elem, m, nodeType, 179.742 + // QSA vars 179.743 + i, groups, old, nid, newContext, newSelector; 179.744 + 179.745 + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { 179.746 + setDocument( context ); 179.747 + } 179.748 + 179.749 + context = context || document; 179.750 + results = results || []; 179.751 + 179.752 + if ( !selector || typeof selector !== "string" ) { 179.753 + return results; 179.754 + } 179.755 + 179.756 + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { 179.757 + return []; 179.758 + } 179.759 + 179.760 + if ( documentIsHTML && !seed ) { 179.761 + 179.762 + // Shortcuts 179.763 + if ( (match = rquickExpr.exec( selector )) ) { 179.764 + // Speed-up: Sizzle("#ID") 179.765 + if ( (m = match[1]) ) { 179.766 + if ( nodeType === 9 ) { 179.767 + elem = context.getElementById( m ); 179.768 + // Check parentNode to catch when Blackberry 4.6 returns 179.769 + // nodes that are no longer in the document (jQuery #6963) 179.770 + if ( elem && elem.parentNode ) { 179.771 + // Handle the case where IE, Opera, and Webkit return items 179.772 + // by name instead of ID 179.773 + if ( elem.id === m ) { 179.774 + results.push( elem ); 179.775 + return results; 179.776 + } 179.777 + } else { 179.778 + return results; 179.779 + } 179.780 + } else { 179.781 + // Context is not a document 179.782 + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && 179.783 + contains( context, elem ) && elem.id === m ) { 179.784 + results.push( elem ); 179.785 + return results; 179.786 + } 179.787 + } 179.788 + 179.789 + // Speed-up: Sizzle("TAG") 179.790 + } else if ( match[2] ) { 179.791 + push.apply( results, context.getElementsByTagName( selector ) ); 179.792 + return results; 179.793 + 179.794 + // Speed-up: Sizzle(".CLASS") 179.795 + } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { 179.796 + push.apply( results, context.getElementsByClassName( m ) ); 179.797 + return results; 179.798 + } 179.799 + } 179.800 + 179.801 + // QSA path 179.802 + if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { 179.803 + nid = old = expando; 179.804 + newContext = context; 179.805 + newSelector = nodeType === 9 && selector; 179.806 + 179.807 + // qSA works strangely on Element-rooted queries 179.808 + // We can work around this by specifying an extra ID on the root 179.809 + // and working up from there (Thanks to Andrew Dupont for the technique) 179.810 + // IE 8 doesn't work on object elements 179.811 + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { 179.812 + groups = tokenize( selector ); 179.813 + 179.814 + if ( (old = context.getAttribute("id")) ) { 179.815 + nid = old.replace( rescape, "\\$&" ); 179.816 + } else { 179.817 + context.setAttribute( "id", nid ); 179.818 + } 179.819 + nid = "[id='" + nid + "'] "; 179.820 + 179.821 + i = groups.length; 179.822 + while ( i-- ) { 179.823 + groups[i] = nid + toSelector( groups[i] ); 179.824 + } 179.825 + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; 179.826 + newSelector = groups.join(","); 179.827 + } 179.828 + 179.829 + if ( newSelector ) { 179.830 + try { 179.831 + push.apply( results, 179.832 + newContext.querySelectorAll( newSelector ) 179.833 + ); 179.834 + return results; 179.835 + } catch(qsaError) { 179.836 + } finally { 179.837 + if ( !old ) { 179.838 + context.removeAttribute("id"); 179.839 + } 179.840 + } 179.841 + } 179.842 + } 179.843 + } 179.844 + 179.845 + // All others 179.846 + return select( selector.replace( rtrim, "$1" ), context, results, seed ); 179.847 +} 179.848 + 179.849 +/** 179.850 + * Create key-value caches of limited size 179.851 + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with 179.852 + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 179.853 + * deleting the oldest entry 179.854 + */ 179.855 +function createCache() { 179.856 + var keys = []; 179.857 + 179.858 + function cache( key, value ) { 179.859 + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 179.860 + if ( keys.push( key + " " ) > Expr.cacheLength ) { 179.861 + // Only keep the most recent entries 179.862 + delete cache[ keys.shift() ]; 179.863 + } 179.864 + return (cache[ key + " " ] = value); 179.865 + } 179.866 + return cache; 179.867 +} 179.868 + 179.869 +/** 179.870 + * Mark a function for special use by Sizzle 179.871 + * @param {Function} fn The function to mark 179.872 + */ 179.873 +function markFunction( fn ) { 179.874 + fn[ expando ] = true; 179.875 + return fn; 179.876 +} 179.877 + 179.878 +/** 179.879 + * Support testing using an element 179.880 + * @param {Function} fn Passed the created div and expects a boolean result 179.881 + */ 179.882 +function assert( fn ) { 179.883 + var div = document.createElement("div"); 179.884 + 179.885 + try { 179.886 + return !!fn( div ); 179.887 + } catch (e) { 179.888 + return false; 179.889 + } finally { 179.890 + // Remove from its parent by default 179.891 + if ( div.parentNode ) { 179.892 + div.parentNode.removeChild( div ); 179.893 + } 179.894 + // release memory in IE 179.895 + div = null; 179.896 + } 179.897 +} 179.898 + 179.899 +/** 179.900 + * Adds the same handler for all of the specified attrs 179.901 + * @param {String} attrs Pipe-separated list of attributes 179.902 + * @param {Function} handler The method that will be applied 179.903 + */ 179.904 +function addHandle( attrs, handler ) { 179.905 + var arr = attrs.split("|"), 179.906 + i = attrs.length; 179.907 + 179.908 + while ( i-- ) { 179.909 + Expr.attrHandle[ arr[i] ] = handler; 179.910 + } 179.911 +} 179.912 + 179.913 +/** 179.914 + * Checks document order of two siblings 179.915 + * @param {Element} a 179.916 + * @param {Element} b 179.917 + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 179.918 + */ 179.919 +function siblingCheck( a, b ) { 179.920 + var cur = b && a, 179.921 + diff = cur && a.nodeType === 1 && b.nodeType === 1 && 179.922 + ( ~b.sourceIndex || MAX_NEGATIVE ) - 179.923 + ( ~a.sourceIndex || MAX_NEGATIVE ); 179.924 + 179.925 + // Use IE sourceIndex if available on both nodes 179.926 + if ( diff ) { 179.927 + return diff; 179.928 + } 179.929 + 179.930 + // Check if b follows a 179.931 + if ( cur ) { 179.932 + while ( (cur = cur.nextSibling) ) { 179.933 + if ( cur === b ) { 179.934 + return -1; 179.935 + } 179.936 + } 179.937 + } 179.938 + 179.939 + return a ? 1 : -1; 179.940 +} 179.941 + 179.942 +/** 179.943 + * Returns a function to use in pseudos for input types 179.944 + * @param {String} type 179.945 + */ 179.946 +function createInputPseudo( type ) { 179.947 + return function( elem ) { 179.948 + var name = elem.nodeName.toLowerCase(); 179.949 + return name === "input" && elem.type === type; 179.950 + }; 179.951 +} 179.952 + 179.953 +/** 179.954 + * Returns a function to use in pseudos for buttons 179.955 + * @param {String} type 179.956 + */ 179.957 +function createButtonPseudo( type ) { 179.958 + return function( elem ) { 179.959 + var name = elem.nodeName.toLowerCase(); 179.960 + return (name === "input" || name === "button") && elem.type === type; 179.961 + }; 179.962 +} 179.963 + 179.964 +/** 179.965 + * Returns a function to use in pseudos for positionals 179.966 + * @param {Function} fn 179.967 + */ 179.968 +function createPositionalPseudo( fn ) { 179.969 + return markFunction(function( argument ) { 179.970 + argument = +argument; 179.971 + return markFunction(function( seed, matches ) { 179.972 + var j, 179.973 + matchIndexes = fn( [], seed.length, argument ), 179.974 + i = matchIndexes.length; 179.975 + 179.976 + // Match elements found at the specified indexes 179.977 + while ( i-- ) { 179.978 + if ( seed[ (j = matchIndexes[i]) ] ) { 179.979 + seed[j] = !(matches[j] = seed[j]); 179.980 + } 179.981 + } 179.982 + }); 179.983 + }); 179.984 +} 179.985 + 179.986 +/** 179.987 + * Checks a node for validity as a Sizzle context 179.988 + * @param {Element|Object=} context 179.989 + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 179.990 + */ 179.991 +function testContext( context ) { 179.992 + return context && typeof context.getElementsByTagName !== strundefined && context; 179.993 +} 179.994 + 179.995 +// Expose support vars for convenience 179.996 +support = Sizzle.support = {}; 179.997 + 179.998 +/** 179.999 + * Detects XML nodes 179.1000 + * @param {Element|Object} elem An element or a document 179.1001 + * @returns {Boolean} True iff elem is a non-HTML XML node 179.1002 + */ 179.1003 +isXML = Sizzle.isXML = function( elem ) { 179.1004 + // documentElement is verified for cases where it doesn't yet exist 179.1005 + // (such as loading iframes in IE - #4833) 179.1006 + var documentElement = elem && (elem.ownerDocument || elem).documentElement; 179.1007 + return documentElement ? documentElement.nodeName !== "HTML" : false; 179.1008 +}; 179.1009 + 179.1010 +/** 179.1011 + * Sets document-related variables once based on the current document 179.1012 + * @param {Element|Object} [doc] An element or document object to use to set the document 179.1013 + * @returns {Object} Returns the current document 179.1014 + */ 179.1015 +setDocument = Sizzle.setDocument = function( node ) { 179.1016 + var hasCompare, 179.1017 + doc = node ? node.ownerDocument || node : preferredDoc, 179.1018 + parent = doc.defaultView; 179.1019 + 179.1020 + // If no document and documentElement is available, return 179.1021 + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { 179.1022 + return document; 179.1023 + } 179.1024 + 179.1025 + // Set our document 179.1026 + document = doc; 179.1027 + docElem = doc.documentElement; 179.1028 + 179.1029 + // Support tests 179.1030 + documentIsHTML = !isXML( doc ); 179.1031 + 179.1032 + // Support: IE>8 179.1033 + // If iframe document is assigned to "document" variable and if iframe has been reloaded, 179.1034 + // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 179.1035 + // IE6-8 do not support the defaultView property so parent will be undefined 179.1036 + if ( parent && parent !== parent.top ) { 179.1037 + // IE11 does not have attachEvent, so all must suffer 179.1038 + if ( parent.addEventListener ) { 179.1039 + parent.addEventListener( "unload", function() { 179.1040 + setDocument(); 179.1041 + }, false ); 179.1042 + } else if ( parent.attachEvent ) { 179.1043 + parent.attachEvent( "onunload", function() { 179.1044 + setDocument(); 179.1045 + }); 179.1046 + } 179.1047 + } 179.1048 + 179.1049 + /* Attributes 179.1050 + ---------------------------------------------------------------------- */ 179.1051 + 179.1052 + // Support: IE<8 179.1053 + // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) 179.1054 + support.attributes = assert(function( div ) { 179.1055 + div.className = "i"; 179.1056 + return !div.getAttribute("className"); 179.1057 + }); 179.1058 + 179.1059 + /* getElement(s)By* 179.1060 + ---------------------------------------------------------------------- */ 179.1061 + 179.1062 + // Check if getElementsByTagName("*") returns only elements 179.1063 + support.getElementsByTagName = assert(function( div ) { 179.1064 + div.appendChild( doc.createComment("") ); 179.1065 + return !div.getElementsByTagName("*").length; 179.1066 + }); 179.1067 + 179.1068 + // Check if getElementsByClassName can be trusted 179.1069 + support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { 179.1070 + div.innerHTML = "<div class='a'></div><div class='a i'></div>"; 179.1071 + 179.1072 + // Support: Safari<4 179.1073 + // Catch class over-caching 179.1074 + div.firstChild.className = "i"; 179.1075 + // Support: Opera<10 179.1076 + // Catch gEBCN failure to find non-leading classes 179.1077 + return div.getElementsByClassName("i").length === 2; 179.1078 + }); 179.1079 + 179.1080 + // Support: IE<10 179.1081 + // Check if getElementById returns elements by name 179.1082 + // The broken getElementById methods don't pick up programatically-set names, 179.1083 + // so use a roundabout getElementsByName test 179.1084 + support.getById = assert(function( div ) { 179.1085 + docElem.appendChild( div ).id = expando; 179.1086 + return !doc.getElementsByName || !doc.getElementsByName( expando ).length; 179.1087 + }); 179.1088 + 179.1089 + // ID find and filter 179.1090 + if ( support.getById ) { 179.1091 + Expr.find["ID"] = function( id, context ) { 179.1092 + if ( typeof context.getElementById !== strundefined && documentIsHTML ) { 179.1093 + var m = context.getElementById( id ); 179.1094 + // Check parentNode to catch when Blackberry 4.6 returns 179.1095 + // nodes that are no longer in the document #6963 179.1096 + return m && m.parentNode ? [ m ] : []; 179.1097 + } 179.1098 + }; 179.1099 + Expr.filter["ID"] = function( id ) { 179.1100 + var attrId = id.replace( runescape, funescape ); 179.1101 + return function( elem ) { 179.1102 + return elem.getAttribute("id") === attrId; 179.1103 + }; 179.1104 + }; 179.1105 + } else { 179.1106 + // Support: IE6/7 179.1107 + // getElementById is not reliable as a find shortcut 179.1108 + delete Expr.find["ID"]; 179.1109 + 179.1110 + Expr.filter["ID"] = function( id ) { 179.1111 + var attrId = id.replace( runescape, funescape ); 179.1112 + return function( elem ) { 179.1113 + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); 179.1114 + return node && node.value === attrId; 179.1115 + }; 179.1116 + }; 179.1117 + } 179.1118 + 179.1119 + // Tag 179.1120 + Expr.find["TAG"] = support.getElementsByTagName ? 179.1121 + function( tag, context ) { 179.1122 + if ( typeof context.getElementsByTagName !== strundefined ) { 179.1123 + return context.getElementsByTagName( tag ); 179.1124 + } 179.1125 + } : 179.1126 + function( tag, context ) { 179.1127 + var elem, 179.1128 + tmp = [], 179.1129 + i = 0, 179.1130 + results = context.getElementsByTagName( tag ); 179.1131 + 179.1132 + // Filter out possible comments 179.1133 + if ( tag === "*" ) { 179.1134 + while ( (elem = results[i++]) ) { 179.1135 + if ( elem.nodeType === 1 ) { 179.1136 + tmp.push( elem ); 179.1137 + } 179.1138 + } 179.1139 + 179.1140 + return tmp; 179.1141 + } 179.1142 + return results; 179.1143 + }; 179.1144 + 179.1145 + // Class 179.1146 + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { 179.1147 + if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { 179.1148 + return context.getElementsByClassName( className ); 179.1149 + } 179.1150 + }; 179.1151 + 179.1152 + /* QSA/matchesSelector 179.1153 + ---------------------------------------------------------------------- */ 179.1154 + 179.1155 + // QSA and matchesSelector support 179.1156 + 179.1157 + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 179.1158 + rbuggyMatches = []; 179.1159 + 179.1160 + // qSa(:focus) reports false when true (Chrome 21) 179.1161 + // We allow this because of a bug in IE8/9 that throws an error 179.1162 + // whenever `document.activeElement` is accessed on an iframe 179.1163 + // So, we allow :focus to pass through QSA all the time to avoid the IE error 179.1164 + // See http://bugs.jquery.com/ticket/13378 179.1165 + rbuggyQSA = []; 179.1166 + 179.1167 + if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { 179.1168 + // Build QSA regex 179.1169 + // Regex strategy adopted from Diego Perini 179.1170 + assert(function( div ) { 179.1171 + // Select is set to empty string on purpose 179.1172 + // This is to test IE's treatment of not explicitly 179.1173 + // setting a boolean content attribute, 179.1174 + // since its presence should be enough 179.1175 + // http://bugs.jquery.com/ticket/12359 179.1176 + div.innerHTML = "<select msallowclip=''><option selected=''></option></select>"; 179.1177 + 179.1178 + // Support: IE8, Opera 11-12.16 179.1179 + // Nothing should be selected when empty strings follow ^= or $= or *= 179.1180 + // The test attribute must be unknown in Opera but "safe" for WinRT 179.1181 + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 179.1182 + if ( div.querySelectorAll("[msallowclip^='']").length ) { 179.1183 + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); 179.1184 + } 179.1185 + 179.1186 + // Support: IE8 179.1187 + // Boolean attributes and "value" are not treated correctly 179.1188 + if ( !div.querySelectorAll("[selected]").length ) { 179.1189 + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 179.1190 + } 179.1191 + 179.1192 + // Webkit/Opera - :checked should return selected option elements 179.1193 + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 179.1194 + // IE8 throws error here and will not see later tests 179.1195 + if ( !div.querySelectorAll(":checked").length ) { 179.1196 + rbuggyQSA.push(":checked"); 179.1197 + } 179.1198 + }); 179.1199 + 179.1200 + assert(function( div ) { 179.1201 + // Support: Windows 8 Native Apps 179.1202 + // The type and name attributes are restricted during .innerHTML assignment 179.1203 + var input = doc.createElement("input"); 179.1204 + input.setAttribute( "type", "hidden" ); 179.1205 + div.appendChild( input ).setAttribute( "name", "D" ); 179.1206 + 179.1207 + // Support: IE8 179.1208 + // Enforce case-sensitivity of name attribute 179.1209 + if ( div.querySelectorAll("[name=d]").length ) { 179.1210 + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); 179.1211 + } 179.1212 + 179.1213 + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 179.1214 + // IE8 throws error here and will not see later tests 179.1215 + if ( !div.querySelectorAll(":enabled").length ) { 179.1216 + rbuggyQSA.push( ":enabled", ":disabled" ); 179.1217 + } 179.1218 + 179.1219 + // Opera 10-11 does not throw on post-comma invalid pseudos 179.1220 + div.querySelectorAll("*,:x"); 179.1221 + rbuggyQSA.push(",.*:"); 179.1222 + }); 179.1223 + } 179.1224 + 179.1225 + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || 179.1226 + docElem.webkitMatchesSelector || 179.1227 + docElem.mozMatchesSelector || 179.1228 + docElem.oMatchesSelector || 179.1229 + docElem.msMatchesSelector) )) ) { 179.1230 + 179.1231 + assert(function( div ) { 179.1232 + // Check to see if it's possible to do matchesSelector 179.1233 + // on a disconnected node (IE 9) 179.1234 + support.disconnectedMatch = matches.call( div, "div" ); 179.1235 + 179.1236 + // This should fail with an exception 179.1237 + // Gecko does not error, returns false instead 179.1238 + matches.call( div, "[s!='']:x" ); 179.1239 + rbuggyMatches.push( "!=", pseudos ); 179.1240 + }); 179.1241 + } 179.1242 + 179.1243 + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); 179.1244 + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); 179.1245 + 179.1246 + /* Contains 179.1247 + ---------------------------------------------------------------------- */ 179.1248 + hasCompare = rnative.test( docElem.compareDocumentPosition ); 179.1249 + 179.1250 + // Element contains another 179.1251 + // Purposefully does not implement inclusive descendent 179.1252 + // As in, an element does not contain itself 179.1253 + contains = hasCompare || rnative.test( docElem.contains ) ? 179.1254 + function( a, b ) { 179.1255 + var adown = a.nodeType === 9 ? a.documentElement : a, 179.1256 + bup = b && b.parentNode; 179.1257 + return a === bup || !!( bup && bup.nodeType === 1 && ( 179.1258 + adown.contains ? 179.1259 + adown.contains( bup ) : 179.1260 + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 179.1261 + )); 179.1262 + } : 179.1263 + function( a, b ) { 179.1264 + if ( b ) { 179.1265 + while ( (b = b.parentNode) ) { 179.1266 + if ( b === a ) { 179.1267 + return true; 179.1268 + } 179.1269 + } 179.1270 + } 179.1271 + return false; 179.1272 + }; 179.1273 + 179.1274 + /* Sorting 179.1275 + ---------------------------------------------------------------------- */ 179.1276 + 179.1277 + // Document order sorting 179.1278 + sortOrder = hasCompare ? 179.1279 + function( a, b ) { 179.1280 + 179.1281 + // Flag for duplicate removal 179.1282 + if ( a === b ) { 179.1283 + hasDuplicate = true; 179.1284 + return 0; 179.1285 + } 179.1286 + 179.1287 + // Sort on method existence if only one input has compareDocumentPosition 179.1288 + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 179.1289 + if ( compare ) { 179.1290 + return compare; 179.1291 + } 179.1292 + 179.1293 + // Calculate position if both inputs belong to the same document 179.1294 + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? 179.1295 + a.compareDocumentPosition( b ) : 179.1296 + 179.1297 + // Otherwise we know they are disconnected 179.1298 + 1; 179.1299 + 179.1300 + // Disconnected nodes 179.1301 + if ( compare & 1 || 179.1302 + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { 179.1303 + 179.1304 + // Choose the first element that is related to our preferred document 179.1305 + if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { 179.1306 + return -1; 179.1307 + } 179.1308 + if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { 179.1309 + return 1; 179.1310 + } 179.1311 + 179.1312 + // Maintain original order 179.1313 + return sortInput ? 179.1314 + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 179.1315 + 0; 179.1316 + } 179.1317 + 179.1318 + return compare & 4 ? -1 : 1; 179.1319 + } : 179.1320 + function( a, b ) { 179.1321 + // Exit early if the nodes are identical 179.1322 + if ( a === b ) { 179.1323 + hasDuplicate = true; 179.1324 + return 0; 179.1325 + } 179.1326 + 179.1327 + var cur, 179.1328 + i = 0, 179.1329 + aup = a.parentNode, 179.1330 + bup = b.parentNode, 179.1331 + ap = [ a ], 179.1332 + bp = [ b ]; 179.1333 + 179.1334 + // Parentless nodes are either documents or disconnected 179.1335 + if ( !aup || !bup ) { 179.1336 + return a === doc ? -1 : 179.1337 + b === doc ? 1 : 179.1338 + aup ? -1 : 179.1339 + bup ? 1 : 179.1340 + sortInput ? 179.1341 + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 179.1342 + 0; 179.1343 + 179.1344 + // If the nodes are siblings, we can do a quick check 179.1345 + } else if ( aup === bup ) { 179.1346 + return siblingCheck( a, b ); 179.1347 + } 179.1348 + 179.1349 + // Otherwise we need full lists of their ancestors for comparison 179.1350 + cur = a; 179.1351 + while ( (cur = cur.parentNode) ) { 179.1352 + ap.unshift( cur ); 179.1353 + } 179.1354 + cur = b; 179.1355 + while ( (cur = cur.parentNode) ) { 179.1356 + bp.unshift( cur ); 179.1357 + } 179.1358 + 179.1359 + // Walk down the tree looking for a discrepancy 179.1360 + while ( ap[i] === bp[i] ) { 179.1361 + i++; 179.1362 + } 179.1363 + 179.1364 + return i ? 179.1365 + // Do a sibling check if the nodes have a common ancestor 179.1366 + siblingCheck( ap[i], bp[i] ) : 179.1367 + 179.1368 + // Otherwise nodes in our document sort first 179.1369 + ap[i] === preferredDoc ? -1 : 179.1370 + bp[i] === preferredDoc ? 1 : 179.1371 + 0; 179.1372 + }; 179.1373 + 179.1374 + return doc; 179.1375 +}; 179.1376 + 179.1377 +Sizzle.matches = function( expr, elements ) { 179.1378 + return Sizzle( expr, null, null, elements ); 179.1379 +}; 179.1380 + 179.1381 +Sizzle.matchesSelector = function( elem, expr ) { 179.1382 + // Set document vars if needed 179.1383 + if ( ( elem.ownerDocument || elem ) !== document ) { 179.1384 + setDocument( elem ); 179.1385 + } 179.1386 + 179.1387 + // Make sure that attribute selectors are quoted 179.1388 + expr = expr.replace( rattributeQuotes, "='$1']" ); 179.1389 + 179.1390 + if ( support.matchesSelector && documentIsHTML && 179.1391 + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && 179.1392 + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 179.1393 + 179.1394 + try { 179.1395 + var ret = matches.call( elem, expr ); 179.1396 + 179.1397 + // IE 9's matchesSelector returns false on disconnected nodes 179.1398 + if ( ret || support.disconnectedMatch || 179.1399 + // As well, disconnected nodes are said to be in a document 179.1400 + // fragment in IE 9 179.1401 + elem.document && elem.document.nodeType !== 11 ) { 179.1402 + return ret; 179.1403 + } 179.1404 + } catch(e) {} 179.1405 + } 179.1406 + 179.1407 + return Sizzle( expr, document, null, [ elem ] ).length > 0; 179.1408 +}; 179.1409 + 179.1410 +Sizzle.contains = function( context, elem ) { 179.1411 + // Set document vars if needed 179.1412 + if ( ( context.ownerDocument || context ) !== document ) { 179.1413 + setDocument( context ); 179.1414 + } 179.1415 + return contains( context, elem ); 179.1416 +}; 179.1417 + 179.1418 +Sizzle.attr = function( elem, name ) { 179.1419 + // Set document vars if needed 179.1420 + if ( ( elem.ownerDocument || elem ) !== document ) { 179.1421 + setDocument( elem ); 179.1422 + } 179.1423 + 179.1424 + var fn = Expr.attrHandle[ name.toLowerCase() ], 179.1425 + // Don't get fooled by Object.prototype properties (jQuery #13807) 179.1426 + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 179.1427 + fn( elem, name, !documentIsHTML ) : 179.1428 + undefined; 179.1429 + 179.1430 + return val !== undefined ? 179.1431 + val : 179.1432 + support.attributes || !documentIsHTML ? 179.1433 + elem.getAttribute( name ) : 179.1434 + (val = elem.getAttributeNode(name)) && val.specified ? 179.1435 + val.value : 179.1436 + null; 179.1437 +}; 179.1438 + 179.1439 +Sizzle.error = function( msg ) { 179.1440 + throw new Error( "Syntax error, unrecognized expression: " + msg ); 179.1441 +}; 179.1442 + 179.1443 +/** 179.1444 + * Document sorting and removing duplicates 179.1445 + * @param {ArrayLike} results 179.1446 + */ 179.1447 +Sizzle.uniqueSort = function( results ) { 179.1448 + var elem, 179.1449 + duplicates = [], 179.1450 + j = 0, 179.1451 + i = 0; 179.1452 + 179.1453 + // Unless we *know* we can detect duplicates, assume their presence 179.1454 + hasDuplicate = !support.detectDuplicates; 179.1455 + sortInput = !support.sortStable && results.slice( 0 ); 179.1456 + results.sort( sortOrder ); 179.1457 + 179.1458 + if ( hasDuplicate ) { 179.1459 + while ( (elem = results[i++]) ) { 179.1460 + if ( elem === results[ i ] ) { 179.1461 + j = duplicates.push( i ); 179.1462 + } 179.1463 + } 179.1464 + while ( j-- ) { 179.1465 + results.splice( duplicates[ j ], 1 ); 179.1466 + } 179.1467 + } 179.1468 + 179.1469 + // Clear input after sorting to release objects 179.1470 + // See https://github.com/jquery/sizzle/pull/225 179.1471 + sortInput = null; 179.1472 + 179.1473 + return results; 179.1474 +}; 179.1475 + 179.1476 +/** 179.1477 + * Utility function for retrieving the text value of an array of DOM nodes 179.1478 + * @param {Array|Element} elem 179.1479 + */ 179.1480 +getText = Sizzle.getText = function( elem ) { 179.1481 + var node, 179.1482 + ret = "", 179.1483 + i = 0, 179.1484 + nodeType = elem.nodeType; 179.1485 + 179.1486 + if ( !nodeType ) { 179.1487 + // If no nodeType, this is expected to be an array 179.1488 + while ( (node = elem[i++]) ) { 179.1489 + // Do not traverse comment nodes 179.1490 + ret += getText( node ); 179.1491 + } 179.1492 + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 179.1493 + // Use textContent for elements 179.1494 + // innerText usage removed for consistency of new lines (jQuery #11153) 179.1495 + if ( typeof elem.textContent === "string" ) { 179.1496 + return elem.textContent; 179.1497 + } else { 179.1498 + // Traverse its children 179.1499 + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 179.1500 + ret += getText( elem ); 179.1501 + } 179.1502 + } 179.1503 + } else if ( nodeType === 3 || nodeType === 4 ) { 179.1504 + return elem.nodeValue; 179.1505 + } 179.1506 + // Do not include comment or processing instruction nodes 179.1507 + 179.1508 + return ret; 179.1509 +}; 179.1510 + 179.1511 +Expr = Sizzle.selectors = { 179.1512 + 179.1513 + // Can be adjusted by the user 179.1514 + cacheLength: 50, 179.1515 + 179.1516 + createPseudo: markFunction, 179.1517 + 179.1518 + match: matchExpr, 179.1519 + 179.1520 + attrHandle: {}, 179.1521 + 179.1522 + find: {}, 179.1523 + 179.1524 + relative: { 179.1525 + ">": { dir: "parentNode", first: true }, 179.1526 + " ": { dir: "parentNode" }, 179.1527 + "+": { dir: "previousSibling", first: true }, 179.1528 + "~": { dir: "previousSibling" } 179.1529 + }, 179.1530 + 179.1531 + preFilter: { 179.1532 + "ATTR": function( match ) { 179.1533 + match[1] = match[1].replace( runescape, funescape ); 179.1534 + 179.1535 + // Move the given value to match[3] whether quoted or unquoted 179.1536 + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); 179.1537 + 179.1538 + if ( match[2] === "~=" ) { 179.1539 + match[3] = " " + match[3] + " "; 179.1540 + } 179.1541 + 179.1542 + return match.slice( 0, 4 ); 179.1543 + }, 179.1544 + 179.1545 + "CHILD": function( match ) { 179.1546 + /* matches from matchExpr["CHILD"] 179.1547 + 1 type (only|nth|...) 179.1548 + 2 what (child|of-type) 179.1549 + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 179.1550 + 4 xn-component of xn+y argument ([+-]?\d*n|) 179.1551 + 5 sign of xn-component 179.1552 + 6 x of xn-component 179.1553 + 7 sign of y-component 179.1554 + 8 y of y-component 179.1555 + */ 179.1556 + match[1] = match[1].toLowerCase(); 179.1557 + 179.1558 + if ( match[1].slice( 0, 3 ) === "nth" ) { 179.1559 + // nth-* requires argument 179.1560 + if ( !match[3] ) { 179.1561 + Sizzle.error( match[0] ); 179.1562 + } 179.1563 + 179.1564 + // numeric x and y parameters for Expr.filter.CHILD 179.1565 + // remember that false/true cast respectively to 0/1 179.1566 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); 179.1567 + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); 179.1568 + 179.1569 + // other types prohibit arguments 179.1570 + } else if ( match[3] ) { 179.1571 + Sizzle.error( match[0] ); 179.1572 + } 179.1573 + 179.1574 + return match; 179.1575 + }, 179.1576 + 179.1577 + "PSEUDO": function( match ) { 179.1578 + var excess, 179.1579 + unquoted = !match[6] && match[2]; 179.1580 + 179.1581 + if ( matchExpr["CHILD"].test( match[0] ) ) { 179.1582 + return null; 179.1583 + } 179.1584 + 179.1585 + // Accept quoted arguments as-is 179.1586 + if ( match[3] ) { 179.1587 + match[2] = match[4] || match[5] || ""; 179.1588 + 179.1589 + // Strip excess characters from unquoted arguments 179.1590 + } else if ( unquoted && rpseudo.test( unquoted ) && 179.1591 + // Get excess from tokenize (recursively) 179.1592 + (excess = tokenize( unquoted, true )) && 179.1593 + // advance to the next closing parenthesis 179.1594 + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { 179.1595 + 179.1596 + // excess is a negative index 179.1597 + match[0] = match[0].slice( 0, excess ); 179.1598 + match[2] = unquoted.slice( 0, excess ); 179.1599 + } 179.1600 + 179.1601 + // Return only captures needed by the pseudo filter method (type and argument) 179.1602 + return match.slice( 0, 3 ); 179.1603 + } 179.1604 + }, 179.1605 + 179.1606 + filter: { 179.1607 + 179.1608 + "TAG": function( nodeNameSelector ) { 179.1609 + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 179.1610 + return nodeNameSelector === "*" ? 179.1611 + function() { return true; } : 179.1612 + function( elem ) { 179.1613 + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 179.1614 + }; 179.1615 + }, 179.1616 + 179.1617 + "CLASS": function( className ) { 179.1618 + var pattern = classCache[ className + " " ]; 179.1619 + 179.1620 + return pattern || 179.1621 + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && 179.1622 + classCache( className, function( elem ) { 179.1623 + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); 179.1624 + }); 179.1625 + }, 179.1626 + 179.1627 + "ATTR": function( name, operator, check ) { 179.1628 + return function( elem ) { 179.1629 + var result = Sizzle.attr( elem, name ); 179.1630 + 179.1631 + if ( result == null ) { 179.1632 + return operator === "!="; 179.1633 + } 179.1634 + if ( !operator ) { 179.1635 + return true; 179.1636 + } 179.1637 + 179.1638 + result += ""; 179.1639 + 179.1640 + return operator === "=" ? result === check : 179.1641 + operator === "!=" ? result !== check : 179.1642 + operator === "^=" ? check && result.indexOf( check ) === 0 : 179.1643 + operator === "*=" ? check && result.indexOf( check ) > -1 : 179.1644 + operator === "$=" ? check && result.slice( -check.length ) === check : 179.1645 + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : 179.1646 + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : 179.1647 + false; 179.1648 + }; 179.1649 + }, 179.1650 + 179.1651 + "CHILD": function( type, what, argument, first, last ) { 179.1652 + var simple = type.slice( 0, 3 ) !== "nth", 179.1653 + forward = type.slice( -4 ) !== "last", 179.1654 + ofType = what === "of-type"; 179.1655 + 179.1656 + return first === 1 && last === 0 ? 179.1657 + 179.1658 + // Shortcut for :nth-*(n) 179.1659 + function( elem ) { 179.1660 + return !!elem.parentNode; 179.1661 + } : 179.1662 + 179.1663 + function( elem, context, xml ) { 179.1664 + var cache, outerCache, node, diff, nodeIndex, start, 179.1665 + dir = simple !== forward ? "nextSibling" : "previousSibling", 179.1666 + parent = elem.parentNode, 179.1667 + name = ofType && elem.nodeName.toLowerCase(), 179.1668 + useCache = !xml && !ofType; 179.1669 + 179.1670 + if ( parent ) { 179.1671 + 179.1672 + // :(first|last|only)-(child|of-type) 179.1673 + if ( simple ) { 179.1674 + while ( dir ) { 179.1675 + node = elem; 179.1676 + while ( (node = node[ dir ]) ) { 179.1677 + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { 179.1678 + return false; 179.1679 + } 179.1680 + } 179.1681 + // Reverse direction for :only-* (if we haven't yet done so) 179.1682 + start = dir = type === "only" && !start && "nextSibling"; 179.1683 + } 179.1684 + return true; 179.1685 + } 179.1686 + 179.1687 + start = [ forward ? parent.firstChild : parent.lastChild ]; 179.1688 + 179.1689 + // non-xml :nth-child(...) stores cache data on `parent` 179.1690 + if ( forward && useCache ) { 179.1691 + // Seek `elem` from a previously-cached index 179.1692 + outerCache = parent[ expando ] || (parent[ expando ] = {}); 179.1693 + cache = outerCache[ type ] || []; 179.1694 + nodeIndex = cache[0] === dirruns && cache[1]; 179.1695 + diff = cache[0] === dirruns && cache[2]; 179.1696 + node = nodeIndex && parent.childNodes[ nodeIndex ]; 179.1697 + 179.1698 + while ( (node = ++nodeIndex && node && node[ dir ] || 179.1699 + 179.1700 + // Fallback to seeking `elem` from the start 179.1701 + (diff = nodeIndex = 0) || start.pop()) ) { 179.1702 + 179.1703 + // When found, cache indexes on `parent` and break 179.1704 + if ( node.nodeType === 1 && ++diff && node === elem ) { 179.1705 + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 179.1706 + break; 179.1707 + } 179.1708 + } 179.1709 + 179.1710 + // Use previously-cached element index if available 179.1711 + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { 179.1712 + diff = cache[1]; 179.1713 + 179.1714 + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) 179.1715 + } else { 179.1716 + // Use the same loop as above to seek `elem` from the start 179.1717 + while ( (node = ++nodeIndex && node && node[ dir ] || 179.1718 + (diff = nodeIndex = 0) || start.pop()) ) { 179.1719 + 179.1720 + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { 179.1721 + // Cache the index of each encountered element 179.1722 + if ( useCache ) { 179.1723 + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; 179.1724 + } 179.1725 + 179.1726 + if ( node === elem ) { 179.1727 + break; 179.1728 + } 179.1729 + } 179.1730 + } 179.1731 + } 179.1732 + 179.1733 + // Incorporate the offset, then check against cycle size 179.1734 + diff -= last; 179.1735 + return diff === first || ( diff % first === 0 && diff / first >= 0 ); 179.1736 + } 179.1737 + }; 179.1738 + }, 179.1739 + 179.1740 + "PSEUDO": function( pseudo, argument ) { 179.1741 + // pseudo-class names are case-insensitive 179.1742 + // http://www.w3.org/TR/selectors/#pseudo-classes 179.1743 + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 179.1744 + // Remember that setFilters inherits from pseudos 179.1745 + var args, 179.1746 + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 179.1747 + Sizzle.error( "unsupported pseudo: " + pseudo ); 179.1748 + 179.1749 + // The user may use createPseudo to indicate that 179.1750 + // arguments are needed to create the filter function 179.1751 + // just as Sizzle does 179.1752 + if ( fn[ expando ] ) { 179.1753 + return fn( argument ); 179.1754 + } 179.1755 + 179.1756 + // But maintain support for old signatures 179.1757 + if ( fn.length > 1 ) { 179.1758 + args = [ pseudo, pseudo, "", argument ]; 179.1759 + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 179.1760 + markFunction(function( seed, matches ) { 179.1761 + var idx, 179.1762 + matched = fn( seed, argument ), 179.1763 + i = matched.length; 179.1764 + while ( i-- ) { 179.1765 + idx = indexOf.call( seed, matched[i] ); 179.1766 + seed[ idx ] = !( matches[ idx ] = matched[i] ); 179.1767 + } 179.1768 + }) : 179.1769 + function( elem ) { 179.1770 + return fn( elem, 0, args ); 179.1771 + }; 179.1772 + } 179.1773 + 179.1774 + return fn; 179.1775 + } 179.1776 + }, 179.1777 + 179.1778 + pseudos: { 179.1779 + // Potentially complex pseudos 179.1780 + "not": markFunction(function( selector ) { 179.1781 + // Trim the selector passed to compile 179.1782 + // to avoid treating leading and trailing 179.1783 + // spaces as combinators 179.1784 + var input = [], 179.1785 + results = [], 179.1786 + matcher = compile( selector.replace( rtrim, "$1" ) ); 179.1787 + 179.1788 + return matcher[ expando ] ? 179.1789 + markFunction(function( seed, matches, context, xml ) { 179.1790 + var elem, 179.1791 + unmatched = matcher( seed, null, xml, [] ), 179.1792 + i = seed.length; 179.1793 + 179.1794 + // Match elements unmatched by `matcher` 179.1795 + while ( i-- ) { 179.1796 + if ( (elem = unmatched[i]) ) { 179.1797 + seed[i] = !(matches[i] = elem); 179.1798 + } 179.1799 + } 179.1800 + }) : 179.1801 + function( elem, context, xml ) { 179.1802 + input[0] = elem; 179.1803 + matcher( input, null, xml, results ); 179.1804 + return !results.pop(); 179.1805 + }; 179.1806 + }), 179.1807 + 179.1808 + "has": markFunction(function( selector ) { 179.1809 + return function( elem ) { 179.1810 + return Sizzle( selector, elem ).length > 0; 179.1811 + }; 179.1812 + }), 179.1813 + 179.1814 + "contains": markFunction(function( text ) { 179.1815 + return function( elem ) { 179.1816 + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; 179.1817 + }; 179.1818 + }), 179.1819 + 179.1820 + // "Whether an element is represented by a :lang() selector 179.1821 + // is based solely on the element's language value 179.1822 + // being equal to the identifier C, 179.1823 + // or beginning with the identifier C immediately followed by "-". 179.1824 + // The matching of C against the element's language value is performed case-insensitively. 179.1825 + // The identifier C does not have to be a valid language name." 179.1826 + // http://www.w3.org/TR/selectors/#lang-pseudo 179.1827 + "lang": markFunction( function( lang ) { 179.1828 + // lang value must be a valid identifier 179.1829 + if ( !ridentifier.test(lang || "") ) { 179.1830 + Sizzle.error( "unsupported lang: " + lang ); 179.1831 + } 179.1832 + lang = lang.replace( runescape, funescape ).toLowerCase(); 179.1833 + return function( elem ) { 179.1834 + var elemLang; 179.1835 + do { 179.1836 + if ( (elemLang = documentIsHTML ? 179.1837 + elem.lang : 179.1838 + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { 179.1839 + 179.1840 + elemLang = elemLang.toLowerCase(); 179.1841 + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 179.1842 + } 179.1843 + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); 179.1844 + return false; 179.1845 + }; 179.1846 + }), 179.1847 + 179.1848 + // Miscellaneous 179.1849 + "target": function( elem ) { 179.1850 + var hash = window.location && window.location.hash; 179.1851 + return hash && hash.slice( 1 ) === elem.id; 179.1852 + }, 179.1853 + 179.1854 + "root": function( elem ) { 179.1855 + return elem === docElem; 179.1856 + }, 179.1857 + 179.1858 + "focus": function( elem ) { 179.1859 + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); 179.1860 + }, 179.1861 + 179.1862 + // Boolean properties 179.1863 + "enabled": function( elem ) { 179.1864 + return elem.disabled === false; 179.1865 + }, 179.1866 + 179.1867 + "disabled": function( elem ) { 179.1868 + return elem.disabled === true; 179.1869 + }, 179.1870 + 179.1871 + "checked": function( elem ) { 179.1872 + // In CSS3, :checked should return both checked and selected elements 179.1873 + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 179.1874 + var nodeName = elem.nodeName.toLowerCase(); 179.1875 + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); 179.1876 + }, 179.1877 + 179.1878 + "selected": function( elem ) { 179.1879 + // Accessing this property makes selected-by-default 179.1880 + // options in Safari work properly 179.1881 + if ( elem.parentNode ) { 179.1882 + elem.parentNode.selectedIndex; 179.1883 + } 179.1884 + 179.1885 + return elem.selected === true; 179.1886 + }, 179.1887 + 179.1888 + // Contents 179.1889 + "empty": function( elem ) { 179.1890 + // http://www.w3.org/TR/selectors/#empty-pseudo 179.1891 + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 179.1892 + // but not by others (comment: 8; processing instruction: 7; etc.) 179.1893 + // nodeType < 6 works because attributes (2) do not appear as children 179.1894 + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 179.1895 + if ( elem.nodeType < 6 ) { 179.1896 + return false; 179.1897 + } 179.1898 + } 179.1899 + return true; 179.1900 + }, 179.1901 + 179.1902 + "parent": function( elem ) { 179.1903 + return !Expr.pseudos["empty"]( elem ); 179.1904 + }, 179.1905 + 179.1906 + // Element/input types 179.1907 + "header": function( elem ) { 179.1908 + return rheader.test( elem.nodeName ); 179.1909 + }, 179.1910 + 179.1911 + "input": function( elem ) { 179.1912 + return rinputs.test( elem.nodeName ); 179.1913 + }, 179.1914 + 179.1915 + "button": function( elem ) { 179.1916 + var name = elem.nodeName.toLowerCase(); 179.1917 + return name === "input" && elem.type === "button" || name === "button"; 179.1918 + }, 179.1919 + 179.1920 + "text": function( elem ) { 179.1921 + var attr; 179.1922 + return elem.nodeName.toLowerCase() === "input" && 179.1923 + elem.type === "text" && 179.1924 + 179.1925 + // Support: IE<8 179.1926 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 179.1927 + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); 179.1928 + }, 179.1929 + 179.1930 + // Position-in-collection 179.1931 + "first": createPositionalPseudo(function() { 179.1932 + return [ 0 ]; 179.1933 + }), 179.1934 + 179.1935 + "last": createPositionalPseudo(function( matchIndexes, length ) { 179.1936 + return [ length - 1 ]; 179.1937 + }), 179.1938 + 179.1939 + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { 179.1940 + return [ argument < 0 ? argument + length : argument ]; 179.1941 + }), 179.1942 + 179.1943 + "even": createPositionalPseudo(function( matchIndexes, length ) { 179.1944 + var i = 0; 179.1945 + for ( ; i < length; i += 2 ) { 179.1946 + matchIndexes.push( i ); 179.1947 + } 179.1948 + return matchIndexes; 179.1949 + }), 179.1950 + 179.1951 + "odd": createPositionalPseudo(function( matchIndexes, length ) { 179.1952 + var i = 1; 179.1953 + for ( ; i < length; i += 2 ) { 179.1954 + matchIndexes.push( i ); 179.1955 + } 179.1956 + return matchIndexes; 179.1957 + }), 179.1958 + 179.1959 + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { 179.1960 + var i = argument < 0 ? argument + length : argument; 179.1961 + for ( ; --i >= 0; ) { 179.1962 + matchIndexes.push( i ); 179.1963 + } 179.1964 + return matchIndexes; 179.1965 + }), 179.1966 + 179.1967 + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { 179.1968 + var i = argument < 0 ? argument + length : argument; 179.1969 + for ( ; ++i < length; ) { 179.1970 + matchIndexes.push( i ); 179.1971 + } 179.1972 + return matchIndexes; 179.1973 + }) 179.1974 + } 179.1975 +}; 179.1976 + 179.1977 +Expr.pseudos["nth"] = Expr.pseudos["eq"]; 179.1978 + 179.1979 +// Add button/input type pseudos 179.1980 +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 179.1981 + Expr.pseudos[ i ] = createInputPseudo( i ); 179.1982 +} 179.1983 +for ( i in { submit: true, reset: true } ) { 179.1984 + Expr.pseudos[ i ] = createButtonPseudo( i ); 179.1985 +} 179.1986 + 179.1987 +// Easy API for creating new setFilters 179.1988 +function setFilters() {} 179.1989 +setFilters.prototype = Expr.filters = Expr.pseudos; 179.1990 +Expr.setFilters = new setFilters(); 179.1991 + 179.1992 +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { 179.1993 + var matched, match, tokens, type, 179.1994 + soFar, groups, preFilters, 179.1995 + cached = tokenCache[ selector + " " ]; 179.1996 + 179.1997 + if ( cached ) { 179.1998 + return parseOnly ? 0 : cached.slice( 0 ); 179.1999 + } 179.2000 + 179.2001 + soFar = selector; 179.2002 + groups = []; 179.2003 + preFilters = Expr.preFilter; 179.2004 + 179.2005 + while ( soFar ) { 179.2006 + 179.2007 + // Comma and first run 179.2008 + if ( !matched || (match = rcomma.exec( soFar )) ) { 179.2009 + if ( match ) { 179.2010 + // Don't consume trailing commas as valid 179.2011 + soFar = soFar.slice( match[0].length ) || soFar; 179.2012 + } 179.2013 + groups.push( (tokens = []) ); 179.2014 + } 179.2015 + 179.2016 + matched = false; 179.2017 + 179.2018 + // Combinators 179.2019 + if ( (match = rcombinators.exec( soFar )) ) { 179.2020 + matched = match.shift(); 179.2021 + tokens.push({ 179.2022 + value: matched, 179.2023 + // Cast descendant combinators to space 179.2024 + type: match[0].replace( rtrim, " " ) 179.2025 + }); 179.2026 + soFar = soFar.slice( matched.length ); 179.2027 + } 179.2028 + 179.2029 + // Filters 179.2030 + for ( type in Expr.filter ) { 179.2031 + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || 179.2032 + (match = preFilters[ type ]( match ))) ) { 179.2033 + matched = match.shift(); 179.2034 + tokens.push({ 179.2035 + value: matched, 179.2036 + type: type, 179.2037 + matches: match 179.2038 + }); 179.2039 + soFar = soFar.slice( matched.length ); 179.2040 + } 179.2041 + } 179.2042 + 179.2043 + if ( !matched ) { 179.2044 + break; 179.2045 + } 179.2046 + } 179.2047 + 179.2048 + // Return the length of the invalid excess 179.2049 + // if we're just parsing 179.2050 + // Otherwise, throw an error or return tokens 179.2051 + return parseOnly ? 179.2052 + soFar.length : 179.2053 + soFar ? 179.2054 + Sizzle.error( selector ) : 179.2055 + // Cache the tokens 179.2056 + tokenCache( selector, groups ).slice( 0 ); 179.2057 +}; 179.2058 + 179.2059 +function toSelector( tokens ) { 179.2060 + var i = 0, 179.2061 + len = tokens.length, 179.2062 + selector = ""; 179.2063 + for ( ; i < len; i++ ) { 179.2064 + selector += tokens[i].value; 179.2065 + } 179.2066 + return selector; 179.2067 +} 179.2068 + 179.2069 +function addCombinator( matcher, combinator, base ) { 179.2070 + var dir = combinator.dir, 179.2071 + checkNonElements = base && dir === "parentNode", 179.2072 + doneName = done++; 179.2073 + 179.2074 + return combinator.first ? 179.2075 + // Check against closest ancestor/preceding element 179.2076 + function( elem, context, xml ) { 179.2077 + while ( (elem = elem[ dir ]) ) { 179.2078 + if ( elem.nodeType === 1 || checkNonElements ) { 179.2079 + return matcher( elem, context, xml ); 179.2080 + } 179.2081 + } 179.2082 + } : 179.2083 + 179.2084 + // Check against all ancestor/preceding elements 179.2085 + function( elem, context, xml ) { 179.2086 + var oldCache, outerCache, 179.2087 + newCache = [ dirruns, doneName ]; 179.2088 + 179.2089 + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching 179.2090 + if ( xml ) { 179.2091 + while ( (elem = elem[ dir ]) ) { 179.2092 + if ( elem.nodeType === 1 || checkNonElements ) { 179.2093 + if ( matcher( elem, context, xml ) ) { 179.2094 + return true; 179.2095 + } 179.2096 + } 179.2097 + } 179.2098 + } else { 179.2099 + while ( (elem = elem[ dir ]) ) { 179.2100 + if ( elem.nodeType === 1 || checkNonElements ) { 179.2101 + outerCache = elem[ expando ] || (elem[ expando ] = {}); 179.2102 + if ( (oldCache = outerCache[ dir ]) && 179.2103 + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 179.2104 + 179.2105 + // Assign to newCache so results back-propagate to previous elements 179.2106 + return (newCache[ 2 ] = oldCache[ 2 ]); 179.2107 + } else { 179.2108 + // Reuse newcache so results back-propagate to previous elements 179.2109 + outerCache[ dir ] = newCache; 179.2110 + 179.2111 + // A match means we're done; a fail means we have to keep checking 179.2112 + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { 179.2113 + return true; 179.2114 + } 179.2115 + } 179.2116 + } 179.2117 + } 179.2118 + } 179.2119 + }; 179.2120 +} 179.2121 + 179.2122 +function elementMatcher( matchers ) { 179.2123 + return matchers.length > 1 ? 179.2124 + function( elem, context, xml ) { 179.2125 + var i = matchers.length; 179.2126 + while ( i-- ) { 179.2127 + if ( !matchers[i]( elem, context, xml ) ) { 179.2128 + return false; 179.2129 + } 179.2130 + } 179.2131 + return true; 179.2132 + } : 179.2133 + matchers[0]; 179.2134 +} 179.2135 + 179.2136 +function multipleContexts( selector, contexts, results ) { 179.2137 + var i = 0, 179.2138 + len = contexts.length; 179.2139 + for ( ; i < len; i++ ) { 179.2140 + Sizzle( selector, contexts[i], results ); 179.2141 + } 179.2142 + return results; 179.2143 +} 179.2144 + 179.2145 +function condense( unmatched, map, filter, context, xml ) { 179.2146 + var elem, 179.2147 + newUnmatched = [], 179.2148 + i = 0, 179.2149 + len = unmatched.length, 179.2150 + mapped = map != null; 179.2151 + 179.2152 + for ( ; i < len; i++ ) { 179.2153 + if ( (elem = unmatched[i]) ) { 179.2154 + if ( !filter || filter( elem, context, xml ) ) { 179.2155 + newUnmatched.push( elem ); 179.2156 + if ( mapped ) { 179.2157 + map.push( i ); 179.2158 + } 179.2159 + } 179.2160 + } 179.2161 + } 179.2162 + 179.2163 + return newUnmatched; 179.2164 +} 179.2165 + 179.2166 +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 179.2167 + if ( postFilter && !postFilter[ expando ] ) { 179.2168 + postFilter = setMatcher( postFilter ); 179.2169 + } 179.2170 + if ( postFinder && !postFinder[ expando ] ) { 179.2171 + postFinder = setMatcher( postFinder, postSelector ); 179.2172 + } 179.2173 + return markFunction(function( seed, results, context, xml ) { 179.2174 + var temp, i, elem, 179.2175 + preMap = [], 179.2176 + postMap = [], 179.2177 + preexisting = results.length, 179.2178 + 179.2179 + // Get initial elements from seed or context 179.2180 + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), 179.2181 + 179.2182 + // Prefilter to get matcher input, preserving a map for seed-results synchronization 179.2183 + matcherIn = preFilter && ( seed || !selector ) ? 179.2184 + condense( elems, preMap, preFilter, context, xml ) : 179.2185 + elems, 179.2186 + 179.2187 + matcherOut = matcher ? 179.2188 + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 179.2189 + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 179.2190 + 179.2191 + // ...intermediate processing is necessary 179.2192 + [] : 179.2193 + 179.2194 + // ...otherwise use results directly 179.2195 + results : 179.2196 + matcherIn; 179.2197 + 179.2198 + // Find primary matches 179.2199 + if ( matcher ) { 179.2200 + matcher( matcherIn, matcherOut, context, xml ); 179.2201 + } 179.2202 + 179.2203 + // Apply postFilter 179.2204 + if ( postFilter ) { 179.2205 + temp = condense( matcherOut, postMap ); 179.2206 + postFilter( temp, [], context, xml ); 179.2207 + 179.2208 + // Un-match failing elements by moving them back to matcherIn 179.2209 + i = temp.length; 179.2210 + while ( i-- ) { 179.2211 + if ( (elem = temp[i]) ) { 179.2212 + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); 179.2213 + } 179.2214 + } 179.2215 + } 179.2216 + 179.2217 + if ( seed ) { 179.2218 + if ( postFinder || preFilter ) { 179.2219 + if ( postFinder ) { 179.2220 + // Get the final matcherOut by condensing this intermediate into postFinder contexts 179.2221 + temp = []; 179.2222 + i = matcherOut.length; 179.2223 + while ( i-- ) { 179.2224 + if ( (elem = matcherOut[i]) ) { 179.2225 + // Restore matcherIn since elem is not yet a final match 179.2226 + temp.push( (matcherIn[i] = elem) ); 179.2227 + } 179.2228 + } 179.2229 + postFinder( null, (matcherOut = []), temp, xml ); 179.2230 + } 179.2231 + 179.2232 + // Move matched elements from seed to results to keep them synchronized 179.2233 + i = matcherOut.length; 179.2234 + while ( i-- ) { 179.2235 + if ( (elem = matcherOut[i]) && 179.2236 + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { 179.2237 + 179.2238 + seed[temp] = !(results[temp] = elem); 179.2239 + } 179.2240 + } 179.2241 + } 179.2242 + 179.2243 + // Add elements to results, through postFinder if defined 179.2244 + } else { 179.2245 + matcherOut = condense( 179.2246 + matcherOut === results ? 179.2247 + matcherOut.splice( preexisting, matcherOut.length ) : 179.2248 + matcherOut 179.2249 + ); 179.2250 + if ( postFinder ) { 179.2251 + postFinder( null, results, matcherOut, xml ); 179.2252 + } else { 179.2253 + push.apply( results, matcherOut ); 179.2254 + } 179.2255 + } 179.2256 + }); 179.2257 +} 179.2258 + 179.2259 +function matcherFromTokens( tokens ) { 179.2260 + var checkContext, matcher, j, 179.2261 + len = tokens.length, 179.2262 + leadingRelative = Expr.relative[ tokens[0].type ], 179.2263 + implicitRelative = leadingRelative || Expr.relative[" "], 179.2264 + i = leadingRelative ? 1 : 0, 179.2265 + 179.2266 + // The foundational matcher ensures that elements are reachable from top-level context(s) 179.2267 + matchContext = addCombinator( function( elem ) { 179.2268 + return elem === checkContext; 179.2269 + }, implicitRelative, true ), 179.2270 + matchAnyContext = addCombinator( function( elem ) { 179.2271 + return indexOf.call( checkContext, elem ) > -1; 179.2272 + }, implicitRelative, true ), 179.2273 + matchers = [ function( elem, context, xml ) { 179.2274 + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 179.2275 + (checkContext = context).nodeType ? 179.2276 + matchContext( elem, context, xml ) : 179.2277 + matchAnyContext( elem, context, xml ) ); 179.2278 + } ]; 179.2279 + 179.2280 + for ( ; i < len; i++ ) { 179.2281 + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { 179.2282 + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; 179.2283 + } else { 179.2284 + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); 179.2285 + 179.2286 + // Return special upon seeing a positional matcher 179.2287 + if ( matcher[ expando ] ) { 179.2288 + // Find the next relative operator (if any) for proper handling 179.2289 + j = ++i; 179.2290 + for ( ; j < len; j++ ) { 179.2291 + if ( Expr.relative[ tokens[j].type ] ) { 179.2292 + break; 179.2293 + } 179.2294 + } 179.2295 + return setMatcher( 179.2296 + i > 1 && elementMatcher( matchers ), 179.2297 + i > 1 && toSelector( 179.2298 + // If the preceding token was a descendant combinator, insert an implicit any-element `*` 179.2299 + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) 179.2300 + ).replace( rtrim, "$1" ), 179.2301 + matcher, 179.2302 + i < j && matcherFromTokens( tokens.slice( i, j ) ), 179.2303 + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), 179.2304 + j < len && toSelector( tokens ) 179.2305 + ); 179.2306 + } 179.2307 + matchers.push( matcher ); 179.2308 + } 179.2309 + } 179.2310 + 179.2311 + return elementMatcher( matchers ); 179.2312 +} 179.2313 + 179.2314 +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 179.2315 + var bySet = setMatchers.length > 0, 179.2316 + byElement = elementMatchers.length > 0, 179.2317 + superMatcher = function( seed, context, xml, results, outermost ) { 179.2318 + var elem, j, matcher, 179.2319 + matchedCount = 0, 179.2320 + i = "0", 179.2321 + unmatched = seed && [], 179.2322 + setMatched = [], 179.2323 + contextBackup = outermostContext, 179.2324 + // We must always have either seed elements or outermost context 179.2325 + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), 179.2326 + // Use integer dirruns iff this is the outermost matcher 179.2327 + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), 179.2328 + len = elems.length; 179.2329 + 179.2330 + if ( outermost ) { 179.2331 + outermostContext = context !== document && context; 179.2332 + } 179.2333 + 179.2334 + // Add elements passing elementMatchers directly to results 179.2335 + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below 179.2336 + // Support: IE<9, Safari 179.2337 + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 179.2338 + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { 179.2339 + if ( byElement && elem ) { 179.2340 + j = 0; 179.2341 + while ( (matcher = elementMatchers[j++]) ) { 179.2342 + if ( matcher( elem, context, xml ) ) { 179.2343 + results.push( elem ); 179.2344 + break; 179.2345 + } 179.2346 + } 179.2347 + if ( outermost ) { 179.2348 + dirruns = dirrunsUnique; 179.2349 + } 179.2350 + } 179.2351 + 179.2352 + // Track unmatched elements for set filters 179.2353 + if ( bySet ) { 179.2354 + // They will have gone through all possible matchers 179.2355 + if ( (elem = !matcher && elem) ) { 179.2356 + matchedCount--; 179.2357 + } 179.2358 + 179.2359 + // Lengthen the array for every element, matched or not 179.2360 + if ( seed ) { 179.2361 + unmatched.push( elem ); 179.2362 + } 179.2363 + } 179.2364 + } 179.2365 + 179.2366 + // Apply set filters to unmatched elements 179.2367 + matchedCount += i; 179.2368 + if ( bySet && i !== matchedCount ) { 179.2369 + j = 0; 179.2370 + while ( (matcher = setMatchers[j++]) ) { 179.2371 + matcher( unmatched, setMatched, context, xml ); 179.2372 + } 179.2373 + 179.2374 + if ( seed ) { 179.2375 + // Reintegrate element matches to eliminate the need for sorting 179.2376 + if ( matchedCount > 0 ) { 179.2377 + while ( i-- ) { 179.2378 + if ( !(unmatched[i] || setMatched[i]) ) { 179.2379 + setMatched[i] = pop.call( results ); 179.2380 + } 179.2381 + } 179.2382 + } 179.2383 + 179.2384 + // Discard index placeholder values to get only actual matches 179.2385 + setMatched = condense( setMatched ); 179.2386 + } 179.2387 + 179.2388 + // Add matches to results 179.2389 + push.apply( results, setMatched ); 179.2390 + 179.2391 + // Seedless set matches succeeding multiple successful matchers stipulate sorting 179.2392 + if ( outermost && !seed && setMatched.length > 0 && 179.2393 + ( matchedCount + setMatchers.length ) > 1 ) { 179.2394 + 179.2395 + Sizzle.uniqueSort( results ); 179.2396 + } 179.2397 + } 179.2398 + 179.2399 + // Override manipulation of globals by nested matchers 179.2400 + if ( outermost ) { 179.2401 + dirruns = dirrunsUnique; 179.2402 + outermostContext = contextBackup; 179.2403 + } 179.2404 + 179.2405 + return unmatched; 179.2406 + }; 179.2407 + 179.2408 + return bySet ? 179.2409 + markFunction( superMatcher ) : 179.2410 + superMatcher; 179.2411 +} 179.2412 + 179.2413 +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { 179.2414 + var i, 179.2415 + setMatchers = [], 179.2416 + elementMatchers = [], 179.2417 + cached = compilerCache[ selector + " " ]; 179.2418 + 179.2419 + if ( !cached ) { 179.2420 + // Generate a function of recursive functions that can be used to check each element 179.2421 + if ( !match ) { 179.2422 + match = tokenize( selector ); 179.2423 + } 179.2424 + i = match.length; 179.2425 + while ( i-- ) { 179.2426 + cached = matcherFromTokens( match[i] ); 179.2427 + if ( cached[ expando ] ) { 179.2428 + setMatchers.push( cached ); 179.2429 + } else { 179.2430 + elementMatchers.push( cached ); 179.2431 + } 179.2432 + } 179.2433 + 179.2434 + // Cache the compiled function 179.2435 + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 179.2436 + 179.2437 + // Save selector and tokenization 179.2438 + cached.selector = selector; 179.2439 + } 179.2440 + return cached; 179.2441 +}; 179.2442 + 179.2443 +/** 179.2444 + * A low-level selection function that works with Sizzle's compiled 179.2445 + * selector functions 179.2446 + * @param {String|Function} selector A selector or a pre-compiled 179.2447 + * selector function built with Sizzle.compile 179.2448 + * @param {Element} context 179.2449 + * @param {Array} [results] 179.2450 + * @param {Array} [seed] A set of elements to match against 179.2451 + */ 179.2452 +select = Sizzle.select = function( selector, context, results, seed ) { 179.2453 + var i, tokens, token, type, find, 179.2454 + compiled = typeof selector === "function" && selector, 179.2455 + match = !seed && tokenize( (selector = compiled.selector || selector) ); 179.2456 + 179.2457 + results = results || []; 179.2458 + 179.2459 + // Try to minimize operations if there is no seed and only one group 179.2460 + if ( match.length === 1 ) { 179.2461 + 179.2462 + // Take a shortcut and set the context if the root selector is an ID 179.2463 + tokens = match[0] = match[0].slice( 0 ); 179.2464 + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && 179.2465 + support.getById && context.nodeType === 9 && documentIsHTML && 179.2466 + Expr.relative[ tokens[1].type ] ) { 179.2467 + 179.2468 + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; 179.2469 + if ( !context ) { 179.2470 + return results; 179.2471 + 179.2472 + // Precompiled matchers will still verify ancestry, so step up a level 179.2473 + } else if ( compiled ) { 179.2474 + context = context.parentNode; 179.2475 + } 179.2476 + 179.2477 + selector = selector.slice( tokens.shift().value.length ); 179.2478 + } 179.2479 + 179.2480 + // Fetch a seed set for right-to-left matching 179.2481 + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; 179.2482 + while ( i-- ) { 179.2483 + token = tokens[i]; 179.2484 + 179.2485 + // Abort if we hit a combinator 179.2486 + if ( Expr.relative[ (type = token.type) ] ) { 179.2487 + break; 179.2488 + } 179.2489 + if ( (find = Expr.find[ type ]) ) { 179.2490 + // Search, expanding context for leading sibling combinators 179.2491 + if ( (seed = find( 179.2492 + token.matches[0].replace( runescape, funescape ), 179.2493 + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context 179.2494 + )) ) { 179.2495 + 179.2496 + // If seed is empty or no tokens remain, we can return early 179.2497 + tokens.splice( i, 1 ); 179.2498 + selector = seed.length && toSelector( tokens ); 179.2499 + if ( !selector ) { 179.2500 + push.apply( results, seed ); 179.2501 + return results; 179.2502 + } 179.2503 + 179.2504 + break; 179.2505 + } 179.2506 + } 179.2507 + } 179.2508 + } 179.2509 + 179.2510 + // Compile and execute a filtering function if one is not provided 179.2511 + // Provide `match` to avoid retokenization if we modified the selector above 179.2512 + ( compiled || compile( selector, match ) )( 179.2513 + seed, 179.2514 + context, 179.2515 + !documentIsHTML, 179.2516 + results, 179.2517 + rsibling.test( selector ) && testContext( context.parentNode ) || context 179.2518 + ); 179.2519 + return results; 179.2520 +}; 179.2521 + 179.2522 +// One-time assignments 179.2523 + 179.2524 +// Sort stability 179.2525 +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; 179.2526 + 179.2527 +// Support: Chrome<14 179.2528 +// Always assume duplicates if they aren't passed to the comparison function 179.2529 +support.detectDuplicates = !!hasDuplicate; 179.2530 + 179.2531 +// Initialize against the default document 179.2532 +setDocument(); 179.2533 + 179.2534 +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 179.2535 +// Detached nodes confoundingly follow *each other* 179.2536 +support.sortDetached = assert(function( div1 ) { 179.2537 + // Should return 1, but returns 4 (following) 179.2538 + return div1.compareDocumentPosition( document.createElement("div") ) & 1; 179.2539 +}); 179.2540 + 179.2541 +// Support: IE<8 179.2542 +// Prevent attribute/property "interpolation" 179.2543 +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 179.2544 +if ( !assert(function( div ) { 179.2545 + div.innerHTML = "<a href='#'></a>"; 179.2546 + return div.firstChild.getAttribute("href") === "#" ; 179.2547 +}) ) { 179.2548 + addHandle( "type|href|height|width", function( elem, name, isXML ) { 179.2549 + if ( !isXML ) { 179.2550 + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); 179.2551 + } 179.2552 + }); 179.2553 +} 179.2554 + 179.2555 +// Support: IE<9 179.2556 +// Use defaultValue in place of getAttribute("value") 179.2557 +if ( !support.attributes || !assert(function( div ) { 179.2558 + div.innerHTML = "<input/>"; 179.2559 + div.firstChild.setAttribute( "value", "" ); 179.2560 + return div.firstChild.getAttribute( "value" ) === ""; 179.2561 +}) ) { 179.2562 + addHandle( "value", function( elem, name, isXML ) { 179.2563 + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { 179.2564 + return elem.defaultValue; 179.2565 + } 179.2566 + }); 179.2567 +} 179.2568 + 179.2569 +// Support: IE<9 179.2570 +// Use getAttributeNode to fetch booleans when getAttribute lies 179.2571 +if ( !assert(function( div ) { 179.2572 + return div.getAttribute("disabled") == null; 179.2573 +}) ) { 179.2574 + addHandle( booleans, function( elem, name, isXML ) { 179.2575 + var val; 179.2576 + if ( !isXML ) { 179.2577 + return elem[ name ] === true ? name.toLowerCase() : 179.2578 + (val = elem.getAttributeNode( name )) && val.specified ? 179.2579 + val.value : 179.2580 + null; 179.2581 + } 179.2582 + }); 179.2583 +} 179.2584 + 179.2585 +return Sizzle; 179.2586 + 179.2587 +})( window ); 179.2588 + 179.2589 + 179.2590 + 179.2591 +jQuery.find = Sizzle; 179.2592 +jQuery.expr = Sizzle.selectors; 179.2593 +jQuery.expr[":"] = jQuery.expr.pseudos; 179.2594 +jQuery.unique = Sizzle.uniqueSort; 179.2595 +jQuery.text = Sizzle.getText; 179.2596 +jQuery.isXMLDoc = Sizzle.isXML; 179.2597 +jQuery.contains = Sizzle.contains; 179.2598 + 179.2599 + 179.2600 + 179.2601 +var rneedsContext = jQuery.expr.match.needsContext; 179.2602 + 179.2603 +var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); 179.2604 + 179.2605 + 179.2606 + 179.2607 +var risSimple = /^.[^:#\[\.,]*$/; 179.2608 + 179.2609 +// Implement the identical functionality for filter and not 179.2610 +function winnow( elements, qualifier, not ) { 179.2611 + if ( jQuery.isFunction( qualifier ) ) { 179.2612 + return jQuery.grep( elements, function( elem, i ) { 179.2613 + /* jshint -W018 */ 179.2614 + return !!qualifier.call( elem, i, elem ) !== not; 179.2615 + }); 179.2616 + 179.2617 + } 179.2618 + 179.2619 + if ( qualifier.nodeType ) { 179.2620 + return jQuery.grep( elements, function( elem ) { 179.2621 + return ( elem === qualifier ) !== not; 179.2622 + }); 179.2623 + 179.2624 + } 179.2625 + 179.2626 + if ( typeof qualifier === "string" ) { 179.2627 + if ( risSimple.test( qualifier ) ) { 179.2628 + return jQuery.filter( qualifier, elements, not ); 179.2629 + } 179.2630 + 179.2631 + qualifier = jQuery.filter( qualifier, elements ); 179.2632 + } 179.2633 + 179.2634 + return jQuery.grep( elements, function( elem ) { 179.2635 + return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; 179.2636 + }); 179.2637 +} 179.2638 + 179.2639 +jQuery.filter = function( expr, elems, not ) { 179.2640 + var elem = elems[ 0 ]; 179.2641 + 179.2642 + if ( not ) { 179.2643 + expr = ":not(" + expr + ")"; 179.2644 + } 179.2645 + 179.2646 + return elems.length === 1 && elem.nodeType === 1 ? 179.2647 + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : 179.2648 + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 179.2649 + return elem.nodeType === 1; 179.2650 + })); 179.2651 +}; 179.2652 + 179.2653 +jQuery.fn.extend({ 179.2654 + find: function( selector ) { 179.2655 + var i, 179.2656 + len = this.length, 179.2657 + ret = [], 179.2658 + self = this; 179.2659 + 179.2660 + if ( typeof selector !== "string" ) { 179.2661 + return this.pushStack( jQuery( selector ).filter(function() { 179.2662 + for ( i = 0; i < len; i++ ) { 179.2663 + if ( jQuery.contains( self[ i ], this ) ) { 179.2664 + return true; 179.2665 + } 179.2666 + } 179.2667 + }) ); 179.2668 + } 179.2669 + 179.2670 + for ( i = 0; i < len; i++ ) { 179.2671 + jQuery.find( selector, self[ i ], ret ); 179.2672 + } 179.2673 + 179.2674 + // Needed because $( selector, context ) becomes $( context ).find( selector ) 179.2675 + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); 179.2676 + ret.selector = this.selector ? this.selector + " " + selector : selector; 179.2677 + return ret; 179.2678 + }, 179.2679 + filter: function( selector ) { 179.2680 + return this.pushStack( winnow(this, selector || [], false) ); 179.2681 + }, 179.2682 + not: function( selector ) { 179.2683 + return this.pushStack( winnow(this, selector || [], true) ); 179.2684 + }, 179.2685 + is: function( selector ) { 179.2686 + return !!winnow( 179.2687 + this, 179.2688 + 179.2689 + // If this is a positional/relative selector, check membership in the returned set 179.2690 + // so $("p:first").is("p:last") won't return true for a doc with two "p". 179.2691 + typeof selector === "string" && rneedsContext.test( selector ) ? 179.2692 + jQuery( selector ) : 179.2693 + selector || [], 179.2694 + false 179.2695 + ).length; 179.2696 + } 179.2697 +}); 179.2698 + 179.2699 + 179.2700 +// Initialize a jQuery object 179.2701 + 179.2702 + 179.2703 +// A central reference to the root jQuery(document) 179.2704 +var rootjQuery, 179.2705 + 179.2706 + // A simple way to check for HTML strings 179.2707 + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 179.2708 + // Strict HTML recognition (#11290: must start with <) 179.2709 + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, 179.2710 + 179.2711 + init = jQuery.fn.init = function( selector, context ) { 179.2712 + var match, elem; 179.2713 + 179.2714 + // HANDLE: $(""), $(null), $(undefined), $(false) 179.2715 + if ( !selector ) { 179.2716 + return this; 179.2717 + } 179.2718 + 179.2719 + // Handle HTML strings 179.2720 + if ( typeof selector === "string" ) { 179.2721 + if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { 179.2722 + // Assume that strings that start and end with <> are HTML and skip the regex check 179.2723 + match = [ null, selector, null ]; 179.2724 + 179.2725 + } else { 179.2726 + match = rquickExpr.exec( selector ); 179.2727 + } 179.2728 + 179.2729 + // Match html or make sure no context is specified for #id 179.2730 + if ( match && (match[1] || !context) ) { 179.2731 + 179.2732 + // HANDLE: $(html) -> $(array) 179.2733 + if ( match[1] ) { 179.2734 + context = context instanceof jQuery ? context[0] : context; 179.2735 + 179.2736 + // scripts is true for back-compat 179.2737 + // Intentionally let the error be thrown if parseHTML is not present 179.2738 + jQuery.merge( this, jQuery.parseHTML( 179.2739 + match[1], 179.2740 + context && context.nodeType ? context.ownerDocument || context : document, 179.2741 + true 179.2742 + ) ); 179.2743 + 179.2744 + // HANDLE: $(html, props) 179.2745 + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { 179.2746 + for ( match in context ) { 179.2747 + // Properties of context are called as methods if possible 179.2748 + if ( jQuery.isFunction( this[ match ] ) ) { 179.2749 + this[ match ]( context[ match ] ); 179.2750 + 179.2751 + // ...and otherwise set as attributes 179.2752 + } else { 179.2753 + this.attr( match, context[ match ] ); 179.2754 + } 179.2755 + } 179.2756 + } 179.2757 + 179.2758 + return this; 179.2759 + 179.2760 + // HANDLE: $(#id) 179.2761 + } else { 179.2762 + elem = document.getElementById( match[2] ); 179.2763 + 179.2764 + // Check parentNode to catch when Blackberry 4.6 returns 179.2765 + // nodes that are no longer in the document #6963 179.2766 + if ( elem && elem.parentNode ) { 179.2767 + // Inject the element directly into the jQuery object 179.2768 + this.length = 1; 179.2769 + this[0] = elem; 179.2770 + } 179.2771 + 179.2772 + this.context = document; 179.2773 + this.selector = selector; 179.2774 + return this; 179.2775 + } 179.2776 + 179.2777 + // HANDLE: $(expr, $(...)) 179.2778 + } else if ( !context || context.jquery ) { 179.2779 + return ( context || rootjQuery ).find( selector ); 179.2780 + 179.2781 + // HANDLE: $(expr, context) 179.2782 + // (which is just equivalent to: $(context).find(expr) 179.2783 + } else { 179.2784 + return this.constructor( context ).find( selector ); 179.2785 + } 179.2786 + 179.2787 + // HANDLE: $(DOMElement) 179.2788 + } else if ( selector.nodeType ) { 179.2789 + this.context = this[0] = selector; 179.2790 + this.length = 1; 179.2791 + return this; 179.2792 + 179.2793 + // HANDLE: $(function) 179.2794 + // Shortcut for document ready 179.2795 + } else if ( jQuery.isFunction( selector ) ) { 179.2796 + return typeof rootjQuery.ready !== "undefined" ? 179.2797 + rootjQuery.ready( selector ) : 179.2798 + // Execute immediately if ready is not present 179.2799 + selector( jQuery ); 179.2800 + } 179.2801 + 179.2802 + if ( selector.selector !== undefined ) { 179.2803 + this.selector = selector.selector; 179.2804 + this.context = selector.context; 179.2805 + } 179.2806 + 179.2807 + return jQuery.makeArray( selector, this ); 179.2808 + }; 179.2809 + 179.2810 +// Give the init function the jQuery prototype for later instantiation 179.2811 +init.prototype = jQuery.fn; 179.2812 + 179.2813 +// Initialize central reference 179.2814 +rootjQuery = jQuery( document ); 179.2815 + 179.2816 + 179.2817 +var rparentsprev = /^(?:parents|prev(?:Until|All))/, 179.2818 + // methods guaranteed to produce a unique set when starting from a unique set 179.2819 + guaranteedUnique = { 179.2820 + children: true, 179.2821 + contents: true, 179.2822 + next: true, 179.2823 + prev: true 179.2824 + }; 179.2825 + 179.2826 +jQuery.extend({ 179.2827 + dir: function( elem, dir, until ) { 179.2828 + var matched = [], 179.2829 + truncate = until !== undefined; 179.2830 + 179.2831 + while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { 179.2832 + if ( elem.nodeType === 1 ) { 179.2833 + if ( truncate && jQuery( elem ).is( until ) ) { 179.2834 + break; 179.2835 + } 179.2836 + matched.push( elem ); 179.2837 + } 179.2838 + } 179.2839 + return matched; 179.2840 + }, 179.2841 + 179.2842 + sibling: function( n, elem ) { 179.2843 + var matched = []; 179.2844 + 179.2845 + for ( ; n; n = n.nextSibling ) { 179.2846 + if ( n.nodeType === 1 && n !== elem ) { 179.2847 + matched.push( n ); 179.2848 + } 179.2849 + } 179.2850 + 179.2851 + return matched; 179.2852 + } 179.2853 +}); 179.2854 + 179.2855 +jQuery.fn.extend({ 179.2856 + has: function( target ) { 179.2857 + var targets = jQuery( target, this ), 179.2858 + l = targets.length; 179.2859 + 179.2860 + return this.filter(function() { 179.2861 + var i = 0; 179.2862 + for ( ; i < l; i++ ) { 179.2863 + if ( jQuery.contains( this, targets[i] ) ) { 179.2864 + return true; 179.2865 + } 179.2866 + } 179.2867 + }); 179.2868 + }, 179.2869 + 179.2870 + closest: function( selectors, context ) { 179.2871 + var cur, 179.2872 + i = 0, 179.2873 + l = this.length, 179.2874 + matched = [], 179.2875 + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? 179.2876 + jQuery( selectors, context || this.context ) : 179.2877 + 0; 179.2878 + 179.2879 + for ( ; i < l; i++ ) { 179.2880 + for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { 179.2881 + // Always skip document fragments 179.2882 + if ( cur.nodeType < 11 && (pos ? 179.2883 + pos.index(cur) > -1 : 179.2884 + 179.2885 + // Don't pass non-elements to Sizzle 179.2886 + cur.nodeType === 1 && 179.2887 + jQuery.find.matchesSelector(cur, selectors)) ) { 179.2888 + 179.2889 + matched.push( cur ); 179.2890 + break; 179.2891 + } 179.2892 + } 179.2893 + } 179.2894 + 179.2895 + return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); 179.2896 + }, 179.2897 + 179.2898 + // Determine the position of an element within 179.2899 + // the matched set of elements 179.2900 + index: function( elem ) { 179.2901 + 179.2902 + // No argument, return index in parent 179.2903 + if ( !elem ) { 179.2904 + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 179.2905 + } 179.2906 + 179.2907 + // index in selector 179.2908 + if ( typeof elem === "string" ) { 179.2909 + return indexOf.call( jQuery( elem ), this[ 0 ] ); 179.2910 + } 179.2911 + 179.2912 + // Locate the position of the desired element 179.2913 + return indexOf.call( this, 179.2914 + 179.2915 + // If it receives a jQuery object, the first element is used 179.2916 + elem.jquery ? elem[ 0 ] : elem 179.2917 + ); 179.2918 + }, 179.2919 + 179.2920 + add: function( selector, context ) { 179.2921 + return this.pushStack( 179.2922 + jQuery.unique( 179.2923 + jQuery.merge( this.get(), jQuery( selector, context ) ) 179.2924 + ) 179.2925 + ); 179.2926 + }, 179.2927 + 179.2928 + addBack: function( selector ) { 179.2929 + return this.add( selector == null ? 179.2930 + this.prevObject : this.prevObject.filter(selector) 179.2931 + ); 179.2932 + } 179.2933 +}); 179.2934 + 179.2935 +function sibling( cur, dir ) { 179.2936 + while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} 179.2937 + return cur; 179.2938 +} 179.2939 + 179.2940 +jQuery.each({ 179.2941 + parent: function( elem ) { 179.2942 + var parent = elem.parentNode; 179.2943 + return parent && parent.nodeType !== 11 ? parent : null; 179.2944 + }, 179.2945 + parents: function( elem ) { 179.2946 + return jQuery.dir( elem, "parentNode" ); 179.2947 + }, 179.2948 + parentsUntil: function( elem, i, until ) { 179.2949 + return jQuery.dir( elem, "parentNode", until ); 179.2950 + }, 179.2951 + next: function( elem ) { 179.2952 + return sibling( elem, "nextSibling" ); 179.2953 + }, 179.2954 + prev: function( elem ) { 179.2955 + return sibling( elem, "previousSibling" ); 179.2956 + }, 179.2957 + nextAll: function( elem ) { 179.2958 + return jQuery.dir( elem, "nextSibling" ); 179.2959 + }, 179.2960 + prevAll: function( elem ) { 179.2961 + return jQuery.dir( elem, "previousSibling" ); 179.2962 + }, 179.2963 + nextUntil: function( elem, i, until ) { 179.2964 + return jQuery.dir( elem, "nextSibling", until ); 179.2965 + }, 179.2966 + prevUntil: function( elem, i, until ) { 179.2967 + return jQuery.dir( elem, "previousSibling", until ); 179.2968 + }, 179.2969 + siblings: function( elem ) { 179.2970 + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); 179.2971 + }, 179.2972 + children: function( elem ) { 179.2973 + return jQuery.sibling( elem.firstChild ); 179.2974 + }, 179.2975 + contents: function( elem ) { 179.2976 + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); 179.2977 + } 179.2978 +}, function( name, fn ) { 179.2979 + jQuery.fn[ name ] = function( until, selector ) { 179.2980 + var matched = jQuery.map( this, fn, until ); 179.2981 + 179.2982 + if ( name.slice( -5 ) !== "Until" ) { 179.2983 + selector = until; 179.2984 + } 179.2985 + 179.2986 + if ( selector && typeof selector === "string" ) { 179.2987 + matched = jQuery.filter( selector, matched ); 179.2988 + } 179.2989 + 179.2990 + if ( this.length > 1 ) { 179.2991 + // Remove duplicates 179.2992 + if ( !guaranteedUnique[ name ] ) { 179.2993 + jQuery.unique( matched ); 179.2994 + } 179.2995 + 179.2996 + // Reverse order for parents* and prev-derivatives 179.2997 + if ( rparentsprev.test( name ) ) { 179.2998 + matched.reverse(); 179.2999 + } 179.3000 + } 179.3001 + 179.3002 + return this.pushStack( matched ); 179.3003 + }; 179.3004 +}); 179.3005 +var rnotwhite = (/\S+/g); 179.3006 + 179.3007 + 179.3008 + 179.3009 +// String to Object options format cache 179.3010 +var optionsCache = {}; 179.3011 + 179.3012 +// Convert String-formatted options into Object-formatted ones and store in cache 179.3013 +function createOptions( options ) { 179.3014 + var object = optionsCache[ options ] = {}; 179.3015 + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { 179.3016 + object[ flag ] = true; 179.3017 + }); 179.3018 + return object; 179.3019 +} 179.3020 + 179.3021 +/* 179.3022 + * Create a callback list using the following parameters: 179.3023 + * 179.3024 + * options: an optional list of space-separated options that will change how 179.3025 + * the callback list behaves or a more traditional option object 179.3026 + * 179.3027 + * By default a callback list will act like an event callback list and can be 179.3028 + * "fired" multiple times. 179.3029 + * 179.3030 + * Possible options: 179.3031 + * 179.3032 + * once: will ensure the callback list can only be fired once (like a Deferred) 179.3033 + * 179.3034 + * memory: will keep track of previous values and will call any callback added 179.3035 + * after the list has been fired right away with the latest "memorized" 179.3036 + * values (like a Deferred) 179.3037 + * 179.3038 + * unique: will ensure a callback can only be added once (no duplicate in the list) 179.3039 + * 179.3040 + * stopOnFalse: interrupt callings when a callback returns false 179.3041 + * 179.3042 + */ 179.3043 +jQuery.Callbacks = function( options ) { 179.3044 + 179.3045 + // Convert options from String-formatted to Object-formatted if needed 179.3046 + // (we check in cache first) 179.3047 + options = typeof options === "string" ? 179.3048 + ( optionsCache[ options ] || createOptions( options ) ) : 179.3049 + jQuery.extend( {}, options ); 179.3050 + 179.3051 + var // Last fire value (for non-forgettable lists) 179.3052 + memory, 179.3053 + // Flag to know if list was already fired 179.3054 + fired, 179.3055 + // Flag to know if list is currently firing 179.3056 + firing, 179.3057 + // First callback to fire (used internally by add and fireWith) 179.3058 + firingStart, 179.3059 + // End of the loop when firing 179.3060 + firingLength, 179.3061 + // Index of currently firing callback (modified by remove if needed) 179.3062 + firingIndex, 179.3063 + // Actual callback list 179.3064 + list = [], 179.3065 + // Stack of fire calls for repeatable lists 179.3066 + stack = !options.once && [], 179.3067 + // Fire callbacks 179.3068 + fire = function( data ) { 179.3069 + memory = options.memory && data; 179.3070 + fired = true; 179.3071 + firingIndex = firingStart || 0; 179.3072 + firingStart = 0; 179.3073 + firingLength = list.length; 179.3074 + firing = true; 179.3075 + for ( ; list && firingIndex < firingLength; firingIndex++ ) { 179.3076 + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { 179.3077 + memory = false; // To prevent further calls using add 179.3078 + break; 179.3079 + } 179.3080 + } 179.3081 + firing = false; 179.3082 + if ( list ) { 179.3083 + if ( stack ) { 179.3084 + if ( stack.length ) { 179.3085 + fire( stack.shift() ); 179.3086 + } 179.3087 + } else if ( memory ) { 179.3088 + list = []; 179.3089 + } else { 179.3090 + self.disable(); 179.3091 + } 179.3092 + } 179.3093 + }, 179.3094 + // Actual Callbacks object 179.3095 + self = { 179.3096 + // Add a callback or a collection of callbacks to the list 179.3097 + add: function() { 179.3098 + if ( list ) { 179.3099 + // First, we save the current length 179.3100 + var start = list.length; 179.3101 + (function add( args ) { 179.3102 + jQuery.each( args, function( _, arg ) { 179.3103 + var type = jQuery.type( arg ); 179.3104 + if ( type === "function" ) { 179.3105 + if ( !options.unique || !self.has( arg ) ) { 179.3106 + list.push( arg ); 179.3107 + } 179.3108 + } else if ( arg && arg.length && type !== "string" ) { 179.3109 + // Inspect recursively 179.3110 + add( arg ); 179.3111 + } 179.3112 + }); 179.3113 + })( arguments ); 179.3114 + // Do we need to add the callbacks to the 179.3115 + // current firing batch? 179.3116 + if ( firing ) { 179.3117 + firingLength = list.length; 179.3118 + // With memory, if we're not firing then 179.3119 + // we should call right away 179.3120 + } else if ( memory ) { 179.3121 + firingStart = start; 179.3122 + fire( memory ); 179.3123 + } 179.3124 + } 179.3125 + return this; 179.3126 + }, 179.3127 + // Remove a callback from the list 179.3128 + remove: function() { 179.3129 + if ( list ) { 179.3130 + jQuery.each( arguments, function( _, arg ) { 179.3131 + var index; 179.3132 + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 179.3133 + list.splice( index, 1 ); 179.3134 + // Handle firing indexes 179.3135 + if ( firing ) { 179.3136 + if ( index <= firingLength ) { 179.3137 + firingLength--; 179.3138 + } 179.3139 + if ( index <= firingIndex ) { 179.3140 + firingIndex--; 179.3141 + } 179.3142 + } 179.3143 + } 179.3144 + }); 179.3145 + } 179.3146 + return this; 179.3147 + }, 179.3148 + // Check if a given callback is in the list. 179.3149 + // If no argument is given, return whether or not list has callbacks attached. 179.3150 + has: function( fn ) { 179.3151 + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); 179.3152 + }, 179.3153 + // Remove all callbacks from the list 179.3154 + empty: function() { 179.3155 + list = []; 179.3156 + firingLength = 0; 179.3157 + return this; 179.3158 + }, 179.3159 + // Have the list do nothing anymore 179.3160 + disable: function() { 179.3161 + list = stack = memory = undefined; 179.3162 + return this; 179.3163 + }, 179.3164 + // Is it disabled? 179.3165 + disabled: function() { 179.3166 + return !list; 179.3167 + }, 179.3168 + // Lock the list in its current state 179.3169 + lock: function() { 179.3170 + stack = undefined; 179.3171 + if ( !memory ) { 179.3172 + self.disable(); 179.3173 + } 179.3174 + return this; 179.3175 + }, 179.3176 + // Is it locked? 179.3177 + locked: function() { 179.3178 + return !stack; 179.3179 + }, 179.3180 + // Call all callbacks with the given context and arguments 179.3181 + fireWith: function( context, args ) { 179.3182 + if ( list && ( !fired || stack ) ) { 179.3183 + args = args || []; 179.3184 + args = [ context, args.slice ? args.slice() : args ]; 179.3185 + if ( firing ) { 179.3186 + stack.push( args ); 179.3187 + } else { 179.3188 + fire( args ); 179.3189 + } 179.3190 + } 179.3191 + return this; 179.3192 + }, 179.3193 + // Call all the callbacks with the given arguments 179.3194 + fire: function() { 179.3195 + self.fireWith( this, arguments ); 179.3196 + return this; 179.3197 + }, 179.3198 + // To know if the callbacks have already been called at least once 179.3199 + fired: function() { 179.3200 + return !!fired; 179.3201 + } 179.3202 + }; 179.3203 + 179.3204 + return self; 179.3205 +}; 179.3206 + 179.3207 + 179.3208 +jQuery.extend({ 179.3209 + 179.3210 + Deferred: function( func ) { 179.3211 + var tuples = [ 179.3212 + // action, add listener, listener list, final state 179.3213 + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], 179.3214 + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], 179.3215 + [ "notify", "progress", jQuery.Callbacks("memory") ] 179.3216 + ], 179.3217 + state = "pending", 179.3218 + promise = { 179.3219 + state: function() { 179.3220 + return state; 179.3221 + }, 179.3222 + always: function() { 179.3223 + deferred.done( arguments ).fail( arguments ); 179.3224 + return this; 179.3225 + }, 179.3226 + then: function( /* fnDone, fnFail, fnProgress */ ) { 179.3227 + var fns = arguments; 179.3228 + return jQuery.Deferred(function( newDefer ) { 179.3229 + jQuery.each( tuples, function( i, tuple ) { 179.3230 + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; 179.3231 + // deferred[ done | fail | progress ] for forwarding actions to newDefer 179.3232 + deferred[ tuple[1] ](function() { 179.3233 + var returned = fn && fn.apply( this, arguments ); 179.3234 + if ( returned && jQuery.isFunction( returned.promise ) ) { 179.3235 + returned.promise() 179.3236 + .done( newDefer.resolve ) 179.3237 + .fail( newDefer.reject ) 179.3238 + .progress( newDefer.notify ); 179.3239 + } else { 179.3240 + newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); 179.3241 + } 179.3242 + }); 179.3243 + }); 179.3244 + fns = null; 179.3245 + }).promise(); 179.3246 + }, 179.3247 + // Get a promise for this deferred 179.3248 + // If obj is provided, the promise aspect is added to the object 179.3249 + promise: function( obj ) { 179.3250 + return obj != null ? jQuery.extend( obj, promise ) : promise; 179.3251 + } 179.3252 + }, 179.3253 + deferred = {}; 179.3254 + 179.3255 + // Keep pipe for back-compat 179.3256 + promise.pipe = promise.then; 179.3257 + 179.3258 + // Add list-specific methods 179.3259 + jQuery.each( tuples, function( i, tuple ) { 179.3260 + var list = tuple[ 2 ], 179.3261 + stateString = tuple[ 3 ]; 179.3262 + 179.3263 + // promise[ done | fail | progress ] = list.add 179.3264 + promise[ tuple[1] ] = list.add; 179.3265 + 179.3266 + // Handle state 179.3267 + if ( stateString ) { 179.3268 + list.add(function() { 179.3269 + // state = [ resolved | rejected ] 179.3270 + state = stateString; 179.3271 + 179.3272 + // [ reject_list | resolve_list ].disable; progress_list.lock 179.3273 + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); 179.3274 + } 179.3275 + 179.3276 + // deferred[ resolve | reject | notify ] 179.3277 + deferred[ tuple[0] ] = function() { 179.3278 + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); 179.3279 + return this; 179.3280 + }; 179.3281 + deferred[ tuple[0] + "With" ] = list.fireWith; 179.3282 + }); 179.3283 + 179.3284 + // Make the deferred a promise 179.3285 + promise.promise( deferred ); 179.3286 + 179.3287 + // Call given func if any 179.3288 + if ( func ) { 179.3289 + func.call( deferred, deferred ); 179.3290 + } 179.3291 + 179.3292 + // All done! 179.3293 + return deferred; 179.3294 + }, 179.3295 + 179.3296 + // Deferred helper 179.3297 + when: function( subordinate /* , ..., subordinateN */ ) { 179.3298 + var i = 0, 179.3299 + resolveValues = slice.call( arguments ), 179.3300 + length = resolveValues.length, 179.3301 + 179.3302 + // the count of uncompleted subordinates 179.3303 + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, 179.3304 + 179.3305 + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. 179.3306 + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), 179.3307 + 179.3308 + // Update function for both resolve and progress values 179.3309 + updateFunc = function( i, contexts, values ) { 179.3310 + return function( value ) { 179.3311 + contexts[ i ] = this; 179.3312 + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 179.3313 + if ( values === progressValues ) { 179.3314 + deferred.notifyWith( contexts, values ); 179.3315 + } else if ( !( --remaining ) ) { 179.3316 + deferred.resolveWith( contexts, values ); 179.3317 + } 179.3318 + }; 179.3319 + }, 179.3320 + 179.3321 + progressValues, progressContexts, resolveContexts; 179.3322 + 179.3323 + // add listeners to Deferred subordinates; treat others as resolved 179.3324 + if ( length > 1 ) { 179.3325 + progressValues = new Array( length ); 179.3326 + progressContexts = new Array( length ); 179.3327 + resolveContexts = new Array( length ); 179.3328 + for ( ; i < length; i++ ) { 179.3329 + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { 179.3330 + resolveValues[ i ].promise() 179.3331 + .done( updateFunc( i, resolveContexts, resolveValues ) ) 179.3332 + .fail( deferred.reject ) 179.3333 + .progress( updateFunc( i, progressContexts, progressValues ) ); 179.3334 + } else { 179.3335 + --remaining; 179.3336 + } 179.3337 + } 179.3338 + } 179.3339 + 179.3340 + // if we're not waiting on anything, resolve the master 179.3341 + if ( !remaining ) { 179.3342 + deferred.resolveWith( resolveContexts, resolveValues ); 179.3343 + } 179.3344 + 179.3345 + return deferred.promise(); 179.3346 + } 179.3347 +}); 179.3348 + 179.3349 + 179.3350 +// The deferred used on DOM ready 179.3351 +var readyList; 179.3352 + 179.3353 +jQuery.fn.ready = function( fn ) { 179.3354 + // Add the callback 179.3355 + jQuery.ready.promise().done( fn ); 179.3356 + 179.3357 + return this; 179.3358 +}; 179.3359 + 179.3360 +jQuery.extend({ 179.3361 + // Is the DOM ready to be used? Set to true once it occurs. 179.3362 + isReady: false, 179.3363 + 179.3364 + // A counter to track how many items to wait for before 179.3365 + // the ready event fires. See #6781 179.3366 + readyWait: 1, 179.3367 + 179.3368 + // Hold (or release) the ready event 179.3369 + holdReady: function( hold ) { 179.3370 + if ( hold ) { 179.3371 + jQuery.readyWait++; 179.3372 + } else { 179.3373 + jQuery.ready( true ); 179.3374 + } 179.3375 + }, 179.3376 + 179.3377 + // Handle when the DOM is ready 179.3378 + ready: function( wait ) { 179.3379 + 179.3380 + // Abort if there are pending holds or we're already ready 179.3381 + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 179.3382 + return; 179.3383 + } 179.3384 + 179.3385 + // Remember that the DOM is ready 179.3386 + jQuery.isReady = true; 179.3387 + 179.3388 + // If a normal DOM Ready event fired, decrement, and wait if need be 179.3389 + if ( wait !== true && --jQuery.readyWait > 0 ) { 179.3390 + return; 179.3391 + } 179.3392 + 179.3393 + // If there are functions bound, to execute 179.3394 + readyList.resolveWith( document, [ jQuery ] ); 179.3395 + 179.3396 + // Trigger any bound ready events 179.3397 + if ( jQuery.fn.triggerHandler ) { 179.3398 + jQuery( document ).triggerHandler( "ready" ); 179.3399 + jQuery( document ).off( "ready" ); 179.3400 + } 179.3401 + } 179.3402 +}); 179.3403 + 179.3404 +/** 179.3405 + * The ready event handler and self cleanup method 179.3406 + */ 179.3407 +function completed() { 179.3408 + document.removeEventListener( "DOMContentLoaded", completed, false ); 179.3409 + window.removeEventListener( "load", completed, false ); 179.3410 + jQuery.ready(); 179.3411 +} 179.3412 + 179.3413 +jQuery.ready.promise = function( obj ) { 179.3414 + if ( !readyList ) { 179.3415 + 179.3416 + readyList = jQuery.Deferred(); 179.3417 + 179.3418 + // Catch cases where $(document).ready() is called after the browser event has already occurred. 179.3419 + // we once tried to use readyState "interactive" here, but it caused issues like the one 179.3420 + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 179.3421 + if ( document.readyState === "complete" ) { 179.3422 + // Handle it asynchronously to allow scripts the opportunity to delay ready 179.3423 + setTimeout( jQuery.ready ); 179.3424 + 179.3425 + } else { 179.3426 + 179.3427 + // Use the handy event callback 179.3428 + document.addEventListener( "DOMContentLoaded", completed, false ); 179.3429 + 179.3430 + // A fallback to window.onload, that will always work 179.3431 + window.addEventListener( "load", completed, false ); 179.3432 + } 179.3433 + } 179.3434 + return readyList.promise( obj ); 179.3435 +}; 179.3436 + 179.3437 +// Kick off the DOM ready check even if the user does not 179.3438 +jQuery.ready.promise(); 179.3439 + 179.3440 + 179.3441 + 179.3442 + 179.3443 +// Multifunctional method to get and set values of a collection 179.3444 +// The value/s can optionally be executed if it's a function 179.3445 +var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 179.3446 + var i = 0, 179.3447 + len = elems.length, 179.3448 + bulk = key == null; 179.3449 + 179.3450 + // Sets many values 179.3451 + if ( jQuery.type( key ) === "object" ) { 179.3452 + chainable = true; 179.3453 + for ( i in key ) { 179.3454 + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); 179.3455 + } 179.3456 + 179.3457 + // Sets one value 179.3458 + } else if ( value !== undefined ) { 179.3459 + chainable = true; 179.3460 + 179.3461 + if ( !jQuery.isFunction( value ) ) { 179.3462 + raw = true; 179.3463 + } 179.3464 + 179.3465 + if ( bulk ) { 179.3466 + // Bulk operations run against the entire set 179.3467 + if ( raw ) { 179.3468 + fn.call( elems, value ); 179.3469 + fn = null; 179.3470 + 179.3471 + // ...except when executing function values 179.3472 + } else { 179.3473 + bulk = fn; 179.3474 + fn = function( elem, key, value ) { 179.3475 + return bulk.call( jQuery( elem ), value ); 179.3476 + }; 179.3477 + } 179.3478 + } 179.3479 + 179.3480 + if ( fn ) { 179.3481 + for ( ; i < len; i++ ) { 179.3482 + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); 179.3483 + } 179.3484 + } 179.3485 + } 179.3486 + 179.3487 + return chainable ? 179.3488 + elems : 179.3489 + 179.3490 + // Gets 179.3491 + bulk ? 179.3492 + fn.call( elems ) : 179.3493 + len ? fn( elems[0], key ) : emptyGet; 179.3494 +}; 179.3495 + 179.3496 + 179.3497 +/** 179.3498 + * Determines whether an object can have data 179.3499 + */ 179.3500 +jQuery.acceptData = function( owner ) { 179.3501 + // Accepts only: 179.3502 + // - Node 179.3503 + // - Node.ELEMENT_NODE 179.3504 + // - Node.DOCUMENT_NODE 179.3505 + // - Object 179.3506 + // - Any 179.3507 + /* jshint -W018 */ 179.3508 + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 179.3509 +}; 179.3510 + 179.3511 + 179.3512 +function Data() { 179.3513 + // Support: Android < 4, 179.3514 + // Old WebKit does not have Object.preventExtensions/freeze method, 179.3515 + // return new empty object instead with no [[set]] accessor 179.3516 + Object.defineProperty( this.cache = {}, 0, { 179.3517 + get: function() { 179.3518 + return {}; 179.3519 + } 179.3520 + }); 179.3521 + 179.3522 + this.expando = jQuery.expando + Math.random(); 179.3523 +} 179.3524 + 179.3525 +Data.uid = 1; 179.3526 +Data.accepts = jQuery.acceptData; 179.3527 + 179.3528 +Data.prototype = { 179.3529 + key: function( owner ) { 179.3530 + // We can accept data for non-element nodes in modern browsers, 179.3531 + // but we should not, see #8335. 179.3532 + // Always return the key for a frozen object. 179.3533 + if ( !Data.accepts( owner ) ) { 179.3534 + return 0; 179.3535 + } 179.3536 + 179.3537 + var descriptor = {}, 179.3538 + // Check if the owner object already has a cache key 179.3539 + unlock = owner[ this.expando ]; 179.3540 + 179.3541 + // If not, create one 179.3542 + if ( !unlock ) { 179.3543 + unlock = Data.uid++; 179.3544 + 179.3545 + // Secure it in a non-enumerable, non-writable property 179.3546 + try { 179.3547 + descriptor[ this.expando ] = { value: unlock }; 179.3548 + Object.defineProperties( owner, descriptor ); 179.3549 + 179.3550 + // Support: Android < 4 179.3551 + // Fallback to a less secure definition 179.3552 + } catch ( e ) { 179.3553 + descriptor[ this.expando ] = unlock; 179.3554 + jQuery.extend( owner, descriptor ); 179.3555 + } 179.3556 + } 179.3557 + 179.3558 + // Ensure the cache object 179.3559 + if ( !this.cache[ unlock ] ) { 179.3560 + this.cache[ unlock ] = {}; 179.3561 + } 179.3562 + 179.3563 + return unlock; 179.3564 + }, 179.3565 + set: function( owner, data, value ) { 179.3566 + var prop, 179.3567 + // There may be an unlock assigned to this node, 179.3568 + // if there is no entry for this "owner", create one inline 179.3569 + // and set the unlock as though an owner entry had always existed 179.3570 + unlock = this.key( owner ), 179.3571 + cache = this.cache[ unlock ]; 179.3572 + 179.3573 + // Handle: [ owner, key, value ] args 179.3574 + if ( typeof data === "string" ) { 179.3575 + cache[ data ] = value; 179.3576 + 179.3577 + // Handle: [ owner, { properties } ] args 179.3578 + } else { 179.3579 + // Fresh assignments by object are shallow copied 179.3580 + if ( jQuery.isEmptyObject( cache ) ) { 179.3581 + jQuery.extend( this.cache[ unlock ], data ); 179.3582 + // Otherwise, copy the properties one-by-one to the cache object 179.3583 + } else { 179.3584 + for ( prop in data ) { 179.3585 + cache[ prop ] = data[ prop ]; 179.3586 + } 179.3587 + } 179.3588 + } 179.3589 + return cache; 179.3590 + }, 179.3591 + get: function( owner, key ) { 179.3592 + // Either a valid cache is found, or will be created. 179.3593 + // New caches will be created and the unlock returned, 179.3594 + // allowing direct access to the newly created 179.3595 + // empty data object. A valid owner object must be provided. 179.3596 + var cache = this.cache[ this.key( owner ) ]; 179.3597 + 179.3598 + return key === undefined ? 179.3599 + cache : cache[ key ]; 179.3600 + }, 179.3601 + access: function( owner, key, value ) { 179.3602 + var stored; 179.3603 + // In cases where either: 179.3604 + // 179.3605 + // 1. No key was specified 179.3606 + // 2. A string key was specified, but no value provided 179.3607 + // 179.3608 + // Take the "read" path and allow the get method to determine 179.3609 + // which value to return, respectively either: 179.3610 + // 179.3611 + // 1. The entire cache object 179.3612 + // 2. The data stored at the key 179.3613 + // 179.3614 + if ( key === undefined || 179.3615 + ((key && typeof key === "string") && value === undefined) ) { 179.3616 + 179.3617 + stored = this.get( owner, key ); 179.3618 + 179.3619 + return stored !== undefined ? 179.3620 + stored : this.get( owner, jQuery.camelCase(key) ); 179.3621 + } 179.3622 + 179.3623 + // [*]When the key is not a string, or both a key and value 179.3624 + // are specified, set or extend (existing objects) with either: 179.3625 + // 179.3626 + // 1. An object of properties 179.3627 + // 2. A key and value 179.3628 + // 179.3629 + this.set( owner, key, value ); 179.3630 + 179.3631 + // Since the "set" path can have two possible entry points 179.3632 + // return the expected data based on which path was taken[*] 179.3633 + return value !== undefined ? value : key; 179.3634 + }, 179.3635 + remove: function( owner, key ) { 179.3636 + var i, name, camel, 179.3637 + unlock = this.key( owner ), 179.3638 + cache = this.cache[ unlock ]; 179.3639 + 179.3640 + if ( key === undefined ) { 179.3641 + this.cache[ unlock ] = {}; 179.3642 + 179.3643 + } else { 179.3644 + // Support array or space separated string of keys 179.3645 + if ( jQuery.isArray( key ) ) { 179.3646 + // If "name" is an array of keys... 179.3647 + // When data is initially created, via ("key", "val") signature, 179.3648 + // keys will be converted to camelCase. 179.3649 + // Since there is no way to tell _how_ a key was added, remove 179.3650 + // both plain key and camelCase key. #12786 179.3651 + // This will only penalize the array argument path. 179.3652 + name = key.concat( key.map( jQuery.camelCase ) ); 179.3653 + } else { 179.3654 + camel = jQuery.camelCase( key ); 179.3655 + // Try the string as a key before any manipulation 179.3656 + if ( key in cache ) { 179.3657 + name = [ key, camel ]; 179.3658 + } else { 179.3659 + // If a key with the spaces exists, use it. 179.3660 + // Otherwise, create an array by matching non-whitespace 179.3661 + name = camel; 179.3662 + name = name in cache ? 179.3663 + [ name ] : ( name.match( rnotwhite ) || [] ); 179.3664 + } 179.3665 + } 179.3666 + 179.3667 + i = name.length; 179.3668 + while ( i-- ) { 179.3669 + delete cache[ name[ i ] ]; 179.3670 + } 179.3671 + } 179.3672 + }, 179.3673 + hasData: function( owner ) { 179.3674 + return !jQuery.isEmptyObject( 179.3675 + this.cache[ owner[ this.expando ] ] || {} 179.3676 + ); 179.3677 + }, 179.3678 + discard: function( owner ) { 179.3679 + if ( owner[ this.expando ] ) { 179.3680 + delete this.cache[ owner[ this.expando ] ]; 179.3681 + } 179.3682 + } 179.3683 +}; 179.3684 +var data_priv = new Data(); 179.3685 + 179.3686 +var data_user = new Data(); 179.3687 + 179.3688 + 179.3689 + 179.3690 +/* 179.3691 + Implementation Summary 179.3692 + 179.3693 + 1. Enforce API surface and semantic compatibility with 1.9.x branch 179.3694 + 2. Improve the module's maintainability by reducing the storage 179.3695 + paths to a single mechanism. 179.3696 + 3. Use the same single mechanism to support "private" and "user" data. 179.3697 + 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 179.3698 + 5. Avoid exposing implementation details on user objects (eg. expando properties) 179.3699 + 6. Provide a clear path for implementation upgrade to WeakMap in 2014 179.3700 +*/ 179.3701 +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 179.3702 + rmultiDash = /([A-Z])/g; 179.3703 + 179.3704 +function dataAttr( elem, key, data ) { 179.3705 + var name; 179.3706 + 179.3707 + // If nothing was found internally, try to fetch any 179.3708 + // data from the HTML5 data-* attribute 179.3709 + if ( data === undefined && elem.nodeType === 1 ) { 179.3710 + name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); 179.3711 + data = elem.getAttribute( name ); 179.3712 + 179.3713 + if ( typeof data === "string" ) { 179.3714 + try { 179.3715 + data = data === "true" ? true : 179.3716 + data === "false" ? false : 179.3717 + data === "null" ? null : 179.3718 + // Only convert to a number if it doesn't change the string 179.3719 + +data + "" === data ? +data : 179.3720 + rbrace.test( data ) ? jQuery.parseJSON( data ) : 179.3721 + data; 179.3722 + } catch( e ) {} 179.3723 + 179.3724 + // Make sure we set the data so it isn't changed later 179.3725 + data_user.set( elem, key, data ); 179.3726 + } else { 179.3727 + data = undefined; 179.3728 + } 179.3729 + } 179.3730 + return data; 179.3731 +} 179.3732 + 179.3733 +jQuery.extend({ 179.3734 + hasData: function( elem ) { 179.3735 + return data_user.hasData( elem ) || data_priv.hasData( elem ); 179.3736 + }, 179.3737 + 179.3738 + data: function( elem, name, data ) { 179.3739 + return data_user.access( elem, name, data ); 179.3740 + }, 179.3741 + 179.3742 + removeData: function( elem, name ) { 179.3743 + data_user.remove( elem, name ); 179.3744 + }, 179.3745 + 179.3746 + // TODO: Now that all calls to _data and _removeData have been replaced 179.3747 + // with direct calls to data_priv methods, these can be deprecated. 179.3748 + _data: function( elem, name, data ) { 179.3749 + return data_priv.access( elem, name, data ); 179.3750 + }, 179.3751 + 179.3752 + _removeData: function( elem, name ) { 179.3753 + data_priv.remove( elem, name ); 179.3754 + } 179.3755 +}); 179.3756 + 179.3757 +jQuery.fn.extend({ 179.3758 + data: function( key, value ) { 179.3759 + var i, name, data, 179.3760 + elem = this[ 0 ], 179.3761 + attrs = elem && elem.attributes; 179.3762 + 179.3763 + // Gets all values 179.3764 + if ( key === undefined ) { 179.3765 + if ( this.length ) { 179.3766 + data = data_user.get( elem ); 179.3767 + 179.3768 + if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { 179.3769 + i = attrs.length; 179.3770 + while ( i-- ) { 179.3771 + 179.3772 + // Support: IE11+ 179.3773 + // The attrs elements can be null (#14894) 179.3774 + if ( attrs[ i ] ) { 179.3775 + name = attrs[ i ].name; 179.3776 + if ( name.indexOf( "data-" ) === 0 ) { 179.3777 + name = jQuery.camelCase( name.slice(5) ); 179.3778 + dataAttr( elem, name, data[ name ] ); 179.3779 + } 179.3780 + } 179.3781 + } 179.3782 + data_priv.set( elem, "hasDataAttrs", true ); 179.3783 + } 179.3784 + } 179.3785 + 179.3786 + return data; 179.3787 + } 179.3788 + 179.3789 + // Sets multiple values 179.3790 + if ( typeof key === "object" ) { 179.3791 + return this.each(function() { 179.3792 + data_user.set( this, key ); 179.3793 + }); 179.3794 + } 179.3795 + 179.3796 + return access( this, function( value ) { 179.3797 + var data, 179.3798 + camelKey = jQuery.camelCase( key ); 179.3799 + 179.3800 + // The calling jQuery object (element matches) is not empty 179.3801 + // (and therefore has an element appears at this[ 0 ]) and the 179.3802 + // `value` parameter was not undefined. An empty jQuery object 179.3803 + // will result in `undefined` for elem = this[ 0 ] which will 179.3804 + // throw an exception if an attempt to read a data cache is made. 179.3805 + if ( elem && value === undefined ) { 179.3806 + // Attempt to get data from the cache 179.3807 + // with the key as-is 179.3808 + data = data_user.get( elem, key ); 179.3809 + if ( data !== undefined ) { 179.3810 + return data; 179.3811 + } 179.3812 + 179.3813 + // Attempt to get data from the cache 179.3814 + // with the key camelized 179.3815 + data = data_user.get( elem, camelKey ); 179.3816 + if ( data !== undefined ) { 179.3817 + return data; 179.3818 + } 179.3819 + 179.3820 + // Attempt to "discover" the data in 179.3821 + // HTML5 custom data-* attrs 179.3822 + data = dataAttr( elem, camelKey, undefined ); 179.3823 + if ( data !== undefined ) { 179.3824 + return data; 179.3825 + } 179.3826 + 179.3827 + // We tried really hard, but the data doesn't exist. 179.3828 + return; 179.3829 + } 179.3830 + 179.3831 + // Set the data... 179.3832 + this.each(function() { 179.3833 + // First, attempt to store a copy or reference of any 179.3834 + // data that might've been store with a camelCased key. 179.3835 + var data = data_user.get( this, camelKey ); 179.3836 + 179.3837 + // For HTML5 data-* attribute interop, we have to 179.3838 + // store property names with dashes in a camelCase form. 179.3839 + // This might not apply to all properties...* 179.3840 + data_user.set( this, camelKey, value ); 179.3841 + 179.3842 + // *... In the case of properties that might _actually_ 179.3843 + // have dashes, we need to also store a copy of that 179.3844 + // unchanged property. 179.3845 + if ( key.indexOf("-") !== -1 && data !== undefined ) { 179.3846 + data_user.set( this, key, value ); 179.3847 + } 179.3848 + }); 179.3849 + }, null, value, arguments.length > 1, null, true ); 179.3850 + }, 179.3851 + 179.3852 + removeData: function( key ) { 179.3853 + return this.each(function() { 179.3854 + data_user.remove( this, key ); 179.3855 + }); 179.3856 + } 179.3857 +}); 179.3858 + 179.3859 + 179.3860 +jQuery.extend({ 179.3861 + queue: function( elem, type, data ) { 179.3862 + var queue; 179.3863 + 179.3864 + if ( elem ) { 179.3865 + type = ( type || "fx" ) + "queue"; 179.3866 + queue = data_priv.get( elem, type ); 179.3867 + 179.3868 + // Speed up dequeue by getting out quickly if this is just a lookup 179.3869 + if ( data ) { 179.3870 + if ( !queue || jQuery.isArray( data ) ) { 179.3871 + queue = data_priv.access( elem, type, jQuery.makeArray(data) ); 179.3872 + } else { 179.3873 + queue.push( data ); 179.3874 + } 179.3875 + } 179.3876 + return queue || []; 179.3877 + } 179.3878 + }, 179.3879 + 179.3880 + dequeue: function( elem, type ) { 179.3881 + type = type || "fx"; 179.3882 + 179.3883 + var queue = jQuery.queue( elem, type ), 179.3884 + startLength = queue.length, 179.3885 + fn = queue.shift(), 179.3886 + hooks = jQuery._queueHooks( elem, type ), 179.3887 + next = function() { 179.3888 + jQuery.dequeue( elem, type ); 179.3889 + }; 179.3890 + 179.3891 + // If the fx queue is dequeued, always remove the progress sentinel 179.3892 + if ( fn === "inprogress" ) { 179.3893 + fn = queue.shift(); 179.3894 + startLength--; 179.3895 + } 179.3896 + 179.3897 + if ( fn ) { 179.3898 + 179.3899 + // Add a progress sentinel to prevent the fx queue from being 179.3900 + // automatically dequeued 179.3901 + if ( type === "fx" ) { 179.3902 + queue.unshift( "inprogress" ); 179.3903 + } 179.3904 + 179.3905 + // clear up the last queue stop function 179.3906 + delete hooks.stop; 179.3907 + fn.call( elem, next, hooks ); 179.3908 + } 179.3909 + 179.3910 + if ( !startLength && hooks ) { 179.3911 + hooks.empty.fire(); 179.3912 + } 179.3913 + }, 179.3914 + 179.3915 + // not intended for public consumption - generates a queueHooks object, or returns the current one 179.3916 + _queueHooks: function( elem, type ) { 179.3917 + var key = type + "queueHooks"; 179.3918 + return data_priv.get( elem, key ) || data_priv.access( elem, key, { 179.3919 + empty: jQuery.Callbacks("once memory").add(function() { 179.3920 + data_priv.remove( elem, [ type + "queue", key ] ); 179.3921 + }) 179.3922 + }); 179.3923 + } 179.3924 +}); 179.3925 + 179.3926 +jQuery.fn.extend({ 179.3927 + queue: function( type, data ) { 179.3928 + var setter = 2; 179.3929 + 179.3930 + if ( typeof type !== "string" ) { 179.3931 + data = type; 179.3932 + type = "fx"; 179.3933 + setter--; 179.3934 + } 179.3935 + 179.3936 + if ( arguments.length < setter ) { 179.3937 + return jQuery.queue( this[0], type ); 179.3938 + } 179.3939 + 179.3940 + return data === undefined ? 179.3941 + this : 179.3942 + this.each(function() { 179.3943 + var queue = jQuery.queue( this, type, data ); 179.3944 + 179.3945 + // ensure a hooks for this queue 179.3946 + jQuery._queueHooks( this, type ); 179.3947 + 179.3948 + if ( type === "fx" && queue[0] !== "inprogress" ) { 179.3949 + jQuery.dequeue( this, type ); 179.3950 + } 179.3951 + }); 179.3952 + }, 179.3953 + dequeue: function( type ) { 179.3954 + return this.each(function() { 179.3955 + jQuery.dequeue( this, type ); 179.3956 + }); 179.3957 + }, 179.3958 + clearQueue: function( type ) { 179.3959 + return this.queue( type || "fx", [] ); 179.3960 + }, 179.3961 + // Get a promise resolved when queues of a certain type 179.3962 + // are emptied (fx is the type by default) 179.3963 + promise: function( type, obj ) { 179.3964 + var tmp, 179.3965 + count = 1, 179.3966 + defer = jQuery.Deferred(), 179.3967 + elements = this, 179.3968 + i = this.length, 179.3969 + resolve = function() { 179.3970 + if ( !( --count ) ) { 179.3971 + defer.resolveWith( elements, [ elements ] ); 179.3972 + } 179.3973 + }; 179.3974 + 179.3975 + if ( typeof type !== "string" ) { 179.3976 + obj = type; 179.3977 + type = undefined; 179.3978 + } 179.3979 + type = type || "fx"; 179.3980 + 179.3981 + while ( i-- ) { 179.3982 + tmp = data_priv.get( elements[ i ], type + "queueHooks" ); 179.3983 + if ( tmp && tmp.empty ) { 179.3984 + count++; 179.3985 + tmp.empty.add( resolve ); 179.3986 + } 179.3987 + } 179.3988 + resolve(); 179.3989 + return defer.promise( obj ); 179.3990 + } 179.3991 +}); 179.3992 +var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; 179.3993 + 179.3994 +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 179.3995 + 179.3996 +var isHidden = function( elem, el ) { 179.3997 + // isHidden might be called from jQuery#filter function; 179.3998 + // in that case, element will be second argument 179.3999 + elem = el || elem; 179.4000 + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); 179.4001 + }; 179.4002 + 179.4003 +var rcheckableType = (/^(?:checkbox|radio)$/i); 179.4004 + 179.4005 + 179.4006 + 179.4007 +(function() { 179.4008 + var fragment = document.createDocumentFragment(), 179.4009 + div = fragment.appendChild( document.createElement( "div" ) ), 179.4010 + input = document.createElement( "input" ); 179.4011 + 179.4012 + // #11217 - WebKit loses check when the name is after the checked attribute 179.4013 + // Support: Windows Web Apps (WWA) 179.4014 + // `name` and `type` need .setAttribute for WWA 179.4015 + input.setAttribute( "type", "radio" ); 179.4016 + input.setAttribute( "checked", "checked" ); 179.4017 + input.setAttribute( "name", "t" ); 179.4018 + 179.4019 + div.appendChild( input ); 179.4020 + 179.4021 + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 179.4022 + // old WebKit doesn't clone checked state correctly in fragments 179.4023 + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 179.4024 + 179.4025 + // Make sure textarea (and checkbox) defaultValue is properly cloned 179.4026 + // Support: IE9-IE11+ 179.4027 + div.innerHTML = "<textarea>x</textarea>"; 179.4028 + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 179.4029 +})(); 179.4030 +var strundefined = typeof undefined; 179.4031 + 179.4032 + 179.4033 + 179.4034 +support.focusinBubbles = "onfocusin" in window; 179.4035 + 179.4036 + 179.4037 +var 179.4038 + rkeyEvent = /^key/, 179.4039 + rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, 179.4040 + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 179.4041 + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; 179.4042 + 179.4043 +function returnTrue() { 179.4044 + return true; 179.4045 +} 179.4046 + 179.4047 +function returnFalse() { 179.4048 + return false; 179.4049 +} 179.4050 + 179.4051 +function safeActiveElement() { 179.4052 + try { 179.4053 + return document.activeElement; 179.4054 + } catch ( err ) { } 179.4055 +} 179.4056 + 179.4057 +/* 179.4058 + * Helper functions for managing events -- not part of the public interface. 179.4059 + * Props to Dean Edwards' addEvent library for many of the ideas. 179.4060 + */ 179.4061 +jQuery.event = { 179.4062 + 179.4063 + global: {}, 179.4064 + 179.4065 + add: function( elem, types, handler, data, selector ) { 179.4066 + 179.4067 + var handleObjIn, eventHandle, tmp, 179.4068 + events, t, handleObj, 179.4069 + special, handlers, type, namespaces, origType, 179.4070 + elemData = data_priv.get( elem ); 179.4071 + 179.4072 + // Don't attach events to noData or text/comment nodes (but allow plain objects) 179.4073 + if ( !elemData ) { 179.4074 + return; 179.4075 + } 179.4076 + 179.4077 + // Caller can pass in an object of custom data in lieu of the handler 179.4078 + if ( handler.handler ) { 179.4079 + handleObjIn = handler; 179.4080 + handler = handleObjIn.handler; 179.4081 + selector = handleObjIn.selector; 179.4082 + } 179.4083 + 179.4084 + // Make sure that the handler has a unique ID, used to find/remove it later 179.4085 + if ( !handler.guid ) { 179.4086 + handler.guid = jQuery.guid++; 179.4087 + } 179.4088 + 179.4089 + // Init the element's event structure and main handler, if this is the first 179.4090 + if ( !(events = elemData.events) ) { 179.4091 + events = elemData.events = {}; 179.4092 + } 179.4093 + if ( !(eventHandle = elemData.handle) ) { 179.4094 + eventHandle = elemData.handle = function( e ) { 179.4095 + // Discard the second event of a jQuery.event.trigger() and 179.4096 + // when an event is called after a page has unloaded 179.4097 + return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? 179.4098 + jQuery.event.dispatch.apply( elem, arguments ) : undefined; 179.4099 + }; 179.4100 + } 179.4101 + 179.4102 + // Handle multiple events separated by a space 179.4103 + types = ( types || "" ).match( rnotwhite ) || [ "" ]; 179.4104 + t = types.length; 179.4105 + while ( t-- ) { 179.4106 + tmp = rtypenamespace.exec( types[t] ) || []; 179.4107 + type = origType = tmp[1]; 179.4108 + namespaces = ( tmp[2] || "" ).split( "." ).sort(); 179.4109 + 179.4110 + // There *must* be a type, no attaching namespace-only handlers 179.4111 + if ( !type ) { 179.4112 + continue; 179.4113 + } 179.4114 + 179.4115 + // If event changes its type, use the special event handlers for the changed type 179.4116 + special = jQuery.event.special[ type ] || {}; 179.4117 + 179.4118 + // If selector defined, determine special event api type, otherwise given type 179.4119 + type = ( selector ? special.delegateType : special.bindType ) || type; 179.4120 + 179.4121 + // Update special based on newly reset type 179.4122 + special = jQuery.event.special[ type ] || {}; 179.4123 + 179.4124 + // handleObj is passed to all event handlers 179.4125 + handleObj = jQuery.extend({ 179.4126 + type: type, 179.4127 + origType: origType, 179.4128 + data: data, 179.4129 + handler: handler, 179.4130 + guid: handler.guid, 179.4131 + selector: selector, 179.4132 + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 179.4133 + namespace: namespaces.join(".") 179.4134 + }, handleObjIn ); 179.4135 + 179.4136 + // Init the event handler queue if we're the first 179.4137 + if ( !(handlers = events[ type ]) ) { 179.4138 + handlers = events[ type ] = []; 179.4139 + handlers.delegateCount = 0; 179.4140 + 179.4141 + // Only use addEventListener if the special events handler returns false 179.4142 + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 179.4143 + if ( elem.addEventListener ) { 179.4144 + elem.addEventListener( type, eventHandle, false ); 179.4145 + } 179.4146 + } 179.4147 + } 179.4148 + 179.4149 + if ( special.add ) { 179.4150 + special.add.call( elem, handleObj ); 179.4151 + 179.4152 + if ( !handleObj.handler.guid ) { 179.4153 + handleObj.handler.guid = handler.guid; 179.4154 + } 179.4155 + } 179.4156 + 179.4157 + // Add to the element's handler list, delegates in front 179.4158 + if ( selector ) { 179.4159 + handlers.splice( handlers.delegateCount++, 0, handleObj ); 179.4160 + } else { 179.4161 + handlers.push( handleObj ); 179.4162 + } 179.4163 + 179.4164 + // Keep track of which events have ever been used, for event optimization 179.4165 + jQuery.event.global[ type ] = true; 179.4166 + } 179.4167 + 179.4168 + }, 179.4169 + 179.4170 + // Detach an event or set of events from an element 179.4171 + remove: function( elem, types, handler, selector, mappedTypes ) { 179.4172 + 179.4173 + var j, origCount, tmp, 179.4174 + events, t, handleObj, 179.4175 + special, handlers, type, namespaces, origType, 179.4176 + elemData = data_priv.hasData( elem ) && data_priv.get( elem ); 179.4177 + 179.4178 + if ( !elemData || !(events = elemData.events) ) { 179.4179 + return; 179.4180 + } 179.4181 + 179.4182 + // Once for each type.namespace in types; type may be omitted 179.4183 + types = ( types || "" ).match( rnotwhite ) || [ "" ]; 179.4184 + t = types.length; 179.4185 + while ( t-- ) { 179.4186 + tmp = rtypenamespace.exec( types[t] ) || []; 179.4187 + type = origType = tmp[1]; 179.4188 + namespaces = ( tmp[2] || "" ).split( "." ).sort(); 179.4189 + 179.4190 + // Unbind all events (on this namespace, if provided) for the element 179.4191 + if ( !type ) { 179.4192 + for ( type in events ) { 179.4193 + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 179.4194 + } 179.4195 + continue; 179.4196 + } 179.4197 + 179.4198 + special = jQuery.event.special[ type ] || {}; 179.4199 + type = ( selector ? special.delegateType : special.bindType ) || type; 179.4200 + handlers = events[ type ] || []; 179.4201 + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); 179.4202 + 179.4203 + // Remove matching events 179.4204 + origCount = j = handlers.length; 179.4205 + while ( j-- ) { 179.4206 + handleObj = handlers[ j ]; 179.4207 + 179.4208 + if ( ( mappedTypes || origType === handleObj.origType ) && 179.4209 + ( !handler || handler.guid === handleObj.guid ) && 179.4210 + ( !tmp || tmp.test( handleObj.namespace ) ) && 179.4211 + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { 179.4212 + handlers.splice( j, 1 ); 179.4213 + 179.4214 + if ( handleObj.selector ) { 179.4215 + handlers.delegateCount--; 179.4216 + } 179.4217 + if ( special.remove ) { 179.4218 + special.remove.call( elem, handleObj ); 179.4219 + } 179.4220 + } 179.4221 + } 179.4222 + 179.4223 + // Remove generic event handler if we removed something and no more handlers exist 179.4224 + // (avoids potential for endless recursion during removal of special event handlers) 179.4225 + if ( origCount && !handlers.length ) { 179.4226 + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 179.4227 + jQuery.removeEvent( elem, type, elemData.handle ); 179.4228 + } 179.4229 + 179.4230 + delete events[ type ]; 179.4231 + } 179.4232 + } 179.4233 + 179.4234 + // Remove the expando if it's no longer used 179.4235 + if ( jQuery.isEmptyObject( events ) ) { 179.4236 + delete elemData.handle; 179.4237 + data_priv.remove( elem, "events" ); 179.4238 + } 179.4239 + }, 179.4240 + 179.4241 + trigger: function( event, data, elem, onlyHandlers ) { 179.4242 + 179.4243 + var i, cur, tmp, bubbleType, ontype, handle, special, 179.4244 + eventPath = [ elem || document ], 179.4245 + type = hasOwn.call( event, "type" ) ? event.type : event, 179.4246 + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; 179.4247 + 179.4248 + cur = tmp = elem = elem || document; 179.4249 + 179.4250 + // Don't do events on text and comment nodes 179.4251 + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 179.4252 + return; 179.4253 + } 179.4254 + 179.4255 + // focus/blur morphs to focusin/out; ensure we're not firing them right now 179.4256 + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 179.4257 + return; 179.4258 + } 179.4259 + 179.4260 + if ( type.indexOf(".") >= 0 ) { 179.4261 + // Namespaced trigger; create a regexp to match event type in handle() 179.4262 + namespaces = type.split("."); 179.4263 + type = namespaces.shift(); 179.4264 + namespaces.sort(); 179.4265 + } 179.4266 + ontype = type.indexOf(":") < 0 && "on" + type; 179.4267 + 179.4268 + // Caller can pass in a jQuery.Event object, Object, or just an event type string 179.4269 + event = event[ jQuery.expando ] ? 179.4270 + event : 179.4271 + new jQuery.Event( type, typeof event === "object" && event ); 179.4272 + 179.4273 + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 179.4274 + event.isTrigger = onlyHandlers ? 2 : 3; 179.4275 + event.namespace = namespaces.join("."); 179.4276 + event.namespace_re = event.namespace ? 179.4277 + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : 179.4278 + null; 179.4279 + 179.4280 + // Clean up the event in case it is being reused 179.4281 + event.result = undefined; 179.4282 + if ( !event.target ) { 179.4283 + event.target = elem; 179.4284 + } 179.4285 + 179.4286 + // Clone any incoming data and prepend the event, creating the handler arg list 179.4287 + data = data == null ? 179.4288 + [ event ] : 179.4289 + jQuery.makeArray( data, [ event ] ); 179.4290 + 179.4291 + // Allow special events to draw outside the lines 179.4292 + special = jQuery.event.special[ type ] || {}; 179.4293 + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 179.4294 + return; 179.4295 + } 179.4296 + 179.4297 + // Determine event propagation path in advance, per W3C events spec (#9951) 179.4298 + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 179.4299 + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { 179.4300 + 179.4301 + bubbleType = special.delegateType || type; 179.4302 + if ( !rfocusMorph.test( bubbleType + type ) ) { 179.4303 + cur = cur.parentNode; 179.4304 + } 179.4305 + for ( ; cur; cur = cur.parentNode ) { 179.4306 + eventPath.push( cur ); 179.4307 + tmp = cur; 179.4308 + } 179.4309 + 179.4310 + // Only add window if we got to document (e.g., not plain obj or detached DOM) 179.4311 + if ( tmp === (elem.ownerDocument || document) ) { 179.4312 + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 179.4313 + } 179.4314 + } 179.4315 + 179.4316 + // Fire handlers on the event path 179.4317 + i = 0; 179.4318 + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { 179.4319 + 179.4320 + event.type = i > 1 ? 179.4321 + bubbleType : 179.4322 + special.bindType || type; 179.4323 + 179.4324 + // jQuery handler 179.4325 + handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); 179.4326 + if ( handle ) { 179.4327 + handle.apply( cur, data ); 179.4328 + } 179.4329 + 179.4330 + // Native handler 179.4331 + handle = ontype && cur[ ontype ]; 179.4332 + if ( handle && handle.apply && jQuery.acceptData( cur ) ) { 179.4333 + event.result = handle.apply( cur, data ); 179.4334 + if ( event.result === false ) { 179.4335 + event.preventDefault(); 179.4336 + } 179.4337 + } 179.4338 + } 179.4339 + event.type = type; 179.4340 + 179.4341 + // If nobody prevented the default action, do it now 179.4342 + if ( !onlyHandlers && !event.isDefaultPrevented() ) { 179.4343 + 179.4344 + if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && 179.4345 + jQuery.acceptData( elem ) ) { 179.4346 + 179.4347 + // Call a native DOM method on the target with the same name name as the event. 179.4348 + // Don't do default actions on window, that's where global variables be (#6170) 179.4349 + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { 179.4350 + 179.4351 + // Don't re-trigger an onFOO event when we call its FOO() method 179.4352 + tmp = elem[ ontype ]; 179.4353 + 179.4354 + if ( tmp ) { 179.4355 + elem[ ontype ] = null; 179.4356 + } 179.4357 + 179.4358 + // Prevent re-triggering of the same event, since we already bubbled it above 179.4359 + jQuery.event.triggered = type; 179.4360 + elem[ type ](); 179.4361 + jQuery.event.triggered = undefined; 179.4362 + 179.4363 + if ( tmp ) { 179.4364 + elem[ ontype ] = tmp; 179.4365 + } 179.4366 + } 179.4367 + } 179.4368 + } 179.4369 + 179.4370 + return event.result; 179.4371 + }, 179.4372 + 179.4373 + dispatch: function( event ) { 179.4374 + 179.4375 + // Make a writable jQuery.Event from the native event object 179.4376 + event = jQuery.event.fix( event ); 179.4377 + 179.4378 + var i, j, ret, matched, handleObj, 179.4379 + handlerQueue = [], 179.4380 + args = slice.call( arguments ), 179.4381 + handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [], 179.4382 + special = jQuery.event.special[ event.type ] || {}; 179.4383 + 179.4384 + // Use the fix-ed jQuery.Event rather than the (read-only) native event 179.4385 + args[0] = event; 179.4386 + event.delegateTarget = this; 179.4387 + 179.4388 + // Call the preDispatch hook for the mapped type, and let it bail if desired 179.4389 + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 179.4390 + return; 179.4391 + } 179.4392 + 179.4393 + // Determine handlers 179.4394 + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 179.4395 + 179.4396 + // Run delegates first; they may want to stop propagation beneath us 179.4397 + i = 0; 179.4398 + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { 179.4399 + event.currentTarget = matched.elem; 179.4400 + 179.4401 + j = 0; 179.4402 + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { 179.4403 + 179.4404 + // Triggered event must either 1) have no namespace, or 179.4405 + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). 179.4406 + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { 179.4407 + 179.4408 + event.handleObj = handleObj; 179.4409 + event.data = handleObj.data; 179.4410 + 179.4411 + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) 179.4412 + .apply( matched.elem, args ); 179.4413 + 179.4414 + if ( ret !== undefined ) { 179.4415 + if ( (event.result = ret) === false ) { 179.4416 + event.preventDefault(); 179.4417 + event.stopPropagation(); 179.4418 + } 179.4419 + } 179.4420 + } 179.4421 + } 179.4422 + } 179.4423 + 179.4424 + // Call the postDispatch hook for the mapped type 179.4425 + if ( special.postDispatch ) { 179.4426 + special.postDispatch.call( this, event ); 179.4427 + } 179.4428 + 179.4429 + return event.result; 179.4430 + }, 179.4431 + 179.4432 + handlers: function( event, handlers ) { 179.4433 + var i, matches, sel, handleObj, 179.4434 + handlerQueue = [], 179.4435 + delegateCount = handlers.delegateCount, 179.4436 + cur = event.target; 179.4437 + 179.4438 + // Find delegate handlers 179.4439 + // Black-hole SVG <use> instance trees (#13180) 179.4440 + // Avoid non-left-click bubbling in Firefox (#3861) 179.4441 + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { 179.4442 + 179.4443 + for ( ; cur !== this; cur = cur.parentNode || this ) { 179.4444 + 179.4445 + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) 179.4446 + if ( cur.disabled !== true || event.type !== "click" ) { 179.4447 + matches = []; 179.4448 + for ( i = 0; i < delegateCount; i++ ) { 179.4449 + handleObj = handlers[ i ]; 179.4450 + 179.4451 + // Don't conflict with Object.prototype properties (#13203) 179.4452 + sel = handleObj.selector + " "; 179.4453 + 179.4454 + if ( matches[ sel ] === undefined ) { 179.4455 + matches[ sel ] = handleObj.needsContext ? 179.4456 + jQuery( sel, this ).index( cur ) >= 0 : 179.4457 + jQuery.find( sel, this, null, [ cur ] ).length; 179.4458 + } 179.4459 + if ( matches[ sel ] ) { 179.4460 + matches.push( handleObj ); 179.4461 + } 179.4462 + } 179.4463 + if ( matches.length ) { 179.4464 + handlerQueue.push({ elem: cur, handlers: matches }); 179.4465 + } 179.4466 + } 179.4467 + } 179.4468 + } 179.4469 + 179.4470 + // Add the remaining (directly-bound) handlers 179.4471 + if ( delegateCount < handlers.length ) { 179.4472 + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); 179.4473 + } 179.4474 + 179.4475 + return handlerQueue; 179.4476 + }, 179.4477 + 179.4478 + // Includes some event props shared by KeyEvent and MouseEvent 179.4479 + props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), 179.4480 + 179.4481 + fixHooks: {}, 179.4482 + 179.4483 + keyHooks: { 179.4484 + props: "char charCode key keyCode".split(" "), 179.4485 + filter: function( event, original ) { 179.4486 + 179.4487 + // Add which for key events 179.4488 + if ( event.which == null ) { 179.4489 + event.which = original.charCode != null ? original.charCode : original.keyCode; 179.4490 + } 179.4491 + 179.4492 + return event; 179.4493 + } 179.4494 + }, 179.4495 + 179.4496 + mouseHooks: { 179.4497 + props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), 179.4498 + filter: function( event, original ) { 179.4499 + var eventDoc, doc, body, 179.4500 + button = original.button; 179.4501 + 179.4502 + // Calculate pageX/Y if missing and clientX/Y available 179.4503 + if ( event.pageX == null && original.clientX != null ) { 179.4504 + eventDoc = event.target.ownerDocument || document; 179.4505 + doc = eventDoc.documentElement; 179.4506 + body = eventDoc.body; 179.4507 + 179.4508 + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); 179.4509 + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); 179.4510 + } 179.4511 + 179.4512 + // Add which for click: 1 === left; 2 === middle; 3 === right 179.4513 + // Note: button is not normalized, so don't use it 179.4514 + if ( !event.which && button !== undefined ) { 179.4515 + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); 179.4516 + } 179.4517 + 179.4518 + return event; 179.4519 + } 179.4520 + }, 179.4521 + 179.4522 + fix: function( event ) { 179.4523 + if ( event[ jQuery.expando ] ) { 179.4524 + return event; 179.4525 + } 179.4526 + 179.4527 + // Create a writable copy of the event object and normalize some properties 179.4528 + var i, prop, copy, 179.4529 + type = event.type, 179.4530 + originalEvent = event, 179.4531 + fixHook = this.fixHooks[ type ]; 179.4532 + 179.4533 + if ( !fixHook ) { 179.4534 + this.fixHooks[ type ] = fixHook = 179.4535 + rmouseEvent.test( type ) ? this.mouseHooks : 179.4536 + rkeyEvent.test( type ) ? this.keyHooks : 179.4537 + {}; 179.4538 + } 179.4539 + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; 179.4540 + 179.4541 + event = new jQuery.Event( originalEvent ); 179.4542 + 179.4543 + i = copy.length; 179.4544 + while ( i-- ) { 179.4545 + prop = copy[ i ]; 179.4546 + event[ prop ] = originalEvent[ prop ]; 179.4547 + } 179.4548 + 179.4549 + // Support: Cordova 2.5 (WebKit) (#13255) 179.4550 + // All events should have a target; Cordova deviceready doesn't 179.4551 + if ( !event.target ) { 179.4552 + event.target = document; 179.4553 + } 179.4554 + 179.4555 + // Support: Safari 6.0+, Chrome < 28 179.4556 + // Target should not be a text node (#504, #13143) 179.4557 + if ( event.target.nodeType === 3 ) { 179.4558 + event.target = event.target.parentNode; 179.4559 + } 179.4560 + 179.4561 + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; 179.4562 + }, 179.4563 + 179.4564 + special: { 179.4565 + load: { 179.4566 + // Prevent triggered image.load events from bubbling to window.load 179.4567 + noBubble: true 179.4568 + }, 179.4569 + focus: { 179.4570 + // Fire native event if possible so blur/focus sequence is correct 179.4571 + trigger: function() { 179.4572 + if ( this !== safeActiveElement() && this.focus ) { 179.4573 + this.focus(); 179.4574 + return false; 179.4575 + } 179.4576 + }, 179.4577 + delegateType: "focusin" 179.4578 + }, 179.4579 + blur: { 179.4580 + trigger: function() { 179.4581 + if ( this === safeActiveElement() && this.blur ) { 179.4582 + this.blur(); 179.4583 + return false; 179.4584 + } 179.4585 + }, 179.4586 + delegateType: "focusout" 179.4587 + }, 179.4588 + click: { 179.4589 + // For checkbox, fire native event so checked state will be right 179.4590 + trigger: function() { 179.4591 + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { 179.4592 + this.click(); 179.4593 + return false; 179.4594 + } 179.4595 + }, 179.4596 + 179.4597 + // For cross-browser consistency, don't fire native .click() on links 179.4598 + _default: function( event ) { 179.4599 + return jQuery.nodeName( event.target, "a" ); 179.4600 + } 179.4601 + }, 179.4602 + 179.4603 + beforeunload: { 179.4604 + postDispatch: function( event ) { 179.4605 + 179.4606 + // Support: Firefox 20+ 179.4607 + // Firefox doesn't alert if the returnValue field is not set. 179.4608 + if ( event.result !== undefined && event.originalEvent ) { 179.4609 + event.originalEvent.returnValue = event.result; 179.4610 + } 179.4611 + } 179.4612 + } 179.4613 + }, 179.4614 + 179.4615 + simulate: function( type, elem, event, bubble ) { 179.4616 + // Piggyback on a donor event to simulate a different one. 179.4617 + // Fake originalEvent to avoid donor's stopPropagation, but if the 179.4618 + // simulated event prevents default then we do the same on the donor. 179.4619 + var e = jQuery.extend( 179.4620 + new jQuery.Event(), 179.4621 + event, 179.4622 + { 179.4623 + type: type, 179.4624 + isSimulated: true, 179.4625 + originalEvent: {} 179.4626 + } 179.4627 + ); 179.4628 + if ( bubble ) { 179.4629 + jQuery.event.trigger( e, null, elem ); 179.4630 + } else { 179.4631 + jQuery.event.dispatch.call( elem, e ); 179.4632 + } 179.4633 + if ( e.isDefaultPrevented() ) { 179.4634 + event.preventDefault(); 179.4635 + } 179.4636 + } 179.4637 +}; 179.4638 + 179.4639 +jQuery.removeEvent = function( elem, type, handle ) { 179.4640 + if ( elem.removeEventListener ) { 179.4641 + elem.removeEventListener( type, handle, false ); 179.4642 + } 179.4643 +}; 179.4644 + 179.4645 +jQuery.Event = function( src, props ) { 179.4646 + // Allow instantiation without the 'new' keyword 179.4647 + if ( !(this instanceof jQuery.Event) ) { 179.4648 + return new jQuery.Event( src, props ); 179.4649 + } 179.4650 + 179.4651 + // Event object 179.4652 + if ( src && src.type ) { 179.4653 + this.originalEvent = src; 179.4654 + this.type = src.type; 179.4655 + 179.4656 + // Events bubbling up the document may have been marked as prevented 179.4657 + // by a handler lower down the tree; reflect the correct value. 179.4658 + this.isDefaultPrevented = src.defaultPrevented || 179.4659 + src.defaultPrevented === undefined && 179.4660 + // Support: Android < 4.0 179.4661 + src.returnValue === false ? 179.4662 + returnTrue : 179.4663 + returnFalse; 179.4664 + 179.4665 + // Event type 179.4666 + } else { 179.4667 + this.type = src; 179.4668 + } 179.4669 + 179.4670 + // Put explicitly provided properties onto the event object 179.4671 + if ( props ) { 179.4672 + jQuery.extend( this, props ); 179.4673 + } 179.4674 + 179.4675 + // Create a timestamp if incoming event doesn't have one 179.4676 + this.timeStamp = src && src.timeStamp || jQuery.now(); 179.4677 + 179.4678 + // Mark it as fixed 179.4679 + this[ jQuery.expando ] = true; 179.4680 +}; 179.4681 + 179.4682 +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 179.4683 +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 179.4684 +jQuery.Event.prototype = { 179.4685 + isDefaultPrevented: returnFalse, 179.4686 + isPropagationStopped: returnFalse, 179.4687 + isImmediatePropagationStopped: returnFalse, 179.4688 + 179.4689 + preventDefault: function() { 179.4690 + var e = this.originalEvent; 179.4691 + 179.4692 + this.isDefaultPrevented = returnTrue; 179.4693 + 179.4694 + if ( e && e.preventDefault ) { 179.4695 + e.preventDefault(); 179.4696 + } 179.4697 + }, 179.4698 + stopPropagation: function() { 179.4699 + var e = this.originalEvent; 179.4700 + 179.4701 + this.isPropagationStopped = returnTrue; 179.4702 + 179.4703 + if ( e && e.stopPropagation ) { 179.4704 + e.stopPropagation(); 179.4705 + } 179.4706 + }, 179.4707 + stopImmediatePropagation: function() { 179.4708 + var e = this.originalEvent; 179.4709 + 179.4710 + this.isImmediatePropagationStopped = returnTrue; 179.4711 + 179.4712 + if ( e && e.stopImmediatePropagation ) { 179.4713 + e.stopImmediatePropagation(); 179.4714 + } 179.4715 + 179.4716 + this.stopPropagation(); 179.4717 + } 179.4718 +}; 179.4719 + 179.4720 +// Create mouseenter/leave events using mouseover/out and event-time checks 179.4721 +// Support: Chrome 15+ 179.4722 +jQuery.each({ 179.4723 + mouseenter: "mouseover", 179.4724 + mouseleave: "mouseout", 179.4725 + pointerenter: "pointerover", 179.4726 + pointerleave: "pointerout" 179.4727 +}, function( orig, fix ) { 179.4728 + jQuery.event.special[ orig ] = { 179.4729 + delegateType: fix, 179.4730 + bindType: fix, 179.4731 + 179.4732 + handle: function( event ) { 179.4733 + var ret, 179.4734 + target = this, 179.4735 + related = event.relatedTarget, 179.4736 + handleObj = event.handleObj; 179.4737 + 179.4738 + // For mousenter/leave call the handler if related is outside the target. 179.4739 + // NB: No relatedTarget if the mouse left/entered the browser window 179.4740 + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { 179.4741 + event.type = handleObj.origType; 179.4742 + ret = handleObj.handler.apply( this, arguments ); 179.4743 + event.type = fix; 179.4744 + } 179.4745 + return ret; 179.4746 + } 179.4747 + }; 179.4748 +}); 179.4749 + 179.4750 +// Create "bubbling" focus and blur events 179.4751 +// Support: Firefox, Chrome, Safari 179.4752 +if ( !support.focusinBubbles ) { 179.4753 + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { 179.4754 + 179.4755 + // Attach a single capturing handler on the document while someone wants focusin/focusout 179.4756 + var handler = function( event ) { 179.4757 + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); 179.4758 + }; 179.4759 + 179.4760 + jQuery.event.special[ fix ] = { 179.4761 + setup: function() { 179.4762 + var doc = this.ownerDocument || this, 179.4763 + attaches = data_priv.access( doc, fix ); 179.4764 + 179.4765 + if ( !attaches ) { 179.4766 + doc.addEventListener( orig, handler, true ); 179.4767 + } 179.4768 + data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); 179.4769 + }, 179.4770 + teardown: function() { 179.4771 + var doc = this.ownerDocument || this, 179.4772 + attaches = data_priv.access( doc, fix ) - 1; 179.4773 + 179.4774 + if ( !attaches ) { 179.4775 + doc.removeEventListener( orig, handler, true ); 179.4776 + data_priv.remove( doc, fix ); 179.4777 + 179.4778 + } else { 179.4779 + data_priv.access( doc, fix, attaches ); 179.4780 + } 179.4781 + } 179.4782 + }; 179.4783 + }); 179.4784 +} 179.4785 + 179.4786 +jQuery.fn.extend({ 179.4787 + 179.4788 + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { 179.4789 + var origFn, type; 179.4790 + 179.4791 + // Types can be a map of types/handlers 179.4792 + if ( typeof types === "object" ) { 179.4793 + // ( types-Object, selector, data ) 179.4794 + if ( typeof selector !== "string" ) { 179.4795 + // ( types-Object, data ) 179.4796 + data = data || selector; 179.4797 + selector = undefined; 179.4798 + } 179.4799 + for ( type in types ) { 179.4800 + this.on( type, selector, data, types[ type ], one ); 179.4801 + } 179.4802 + return this; 179.4803 + } 179.4804 + 179.4805 + if ( data == null && fn == null ) { 179.4806 + // ( types, fn ) 179.4807 + fn = selector; 179.4808 + data = selector = undefined; 179.4809 + } else if ( fn == null ) { 179.4810 + if ( typeof selector === "string" ) { 179.4811 + // ( types, selector, fn ) 179.4812 + fn = data; 179.4813 + data = undefined; 179.4814 + } else { 179.4815 + // ( types, data, fn ) 179.4816 + fn = data; 179.4817 + data = selector; 179.4818 + selector = undefined; 179.4819 + } 179.4820 + } 179.4821 + if ( fn === false ) { 179.4822 + fn = returnFalse; 179.4823 + } else if ( !fn ) { 179.4824 + return this; 179.4825 + } 179.4826 + 179.4827 + if ( one === 1 ) { 179.4828 + origFn = fn; 179.4829 + fn = function( event ) { 179.4830 + // Can use an empty set, since event contains the info 179.4831 + jQuery().off( event ); 179.4832 + return origFn.apply( this, arguments ); 179.4833 + }; 179.4834 + // Use same guid so caller can remove using origFn 179.4835 + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 179.4836 + } 179.4837 + return this.each( function() { 179.4838 + jQuery.event.add( this, types, fn, data, selector ); 179.4839 + }); 179.4840 + }, 179.4841 + one: function( types, selector, data, fn ) { 179.4842 + return this.on( types, selector, data, fn, 1 ); 179.4843 + }, 179.4844 + off: function( types, selector, fn ) { 179.4845 + var handleObj, type; 179.4846 + if ( types && types.preventDefault && types.handleObj ) { 179.4847 + // ( event ) dispatched jQuery.Event 179.4848 + handleObj = types.handleObj; 179.4849 + jQuery( types.delegateTarget ).off( 179.4850 + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, 179.4851 + handleObj.selector, 179.4852 + handleObj.handler 179.4853 + ); 179.4854 + return this; 179.4855 + } 179.4856 + if ( typeof types === "object" ) { 179.4857 + // ( types-object [, selector] ) 179.4858 + for ( type in types ) { 179.4859 + this.off( type, selector, types[ type ] ); 179.4860 + } 179.4861 + return this; 179.4862 + } 179.4863 + if ( selector === false || typeof selector === "function" ) { 179.4864 + // ( types [, fn] ) 179.4865 + fn = selector; 179.4866 + selector = undefined; 179.4867 + } 179.4868 + if ( fn === false ) { 179.4869 + fn = returnFalse; 179.4870 + } 179.4871 + return this.each(function() { 179.4872 + jQuery.event.remove( this, types, fn, selector ); 179.4873 + }); 179.4874 + }, 179.4875 + 179.4876 + trigger: function( type, data ) { 179.4877 + return this.each(function() { 179.4878 + jQuery.event.trigger( type, data, this ); 179.4879 + }); 179.4880 + }, 179.4881 + triggerHandler: function( type, data ) { 179.4882 + var elem = this[0]; 179.4883 + if ( elem ) { 179.4884 + return jQuery.event.trigger( type, data, elem, true ); 179.4885 + } 179.4886 + } 179.4887 +}); 179.4888 + 179.4889 + 179.4890 +var 179.4891 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, 179.4892 + rtagName = /<([\w:]+)/, 179.4893 + rhtml = /<|&#?\w+;/, 179.4894 + rnoInnerhtml = /<(?:script|style|link)/i, 179.4895 + // checked="checked" or checked 179.4896 + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 179.4897 + rscriptType = /^$|\/(?:java|ecma)script/i, 179.4898 + rscriptTypeMasked = /^true\/(.*)/, 179.4899 + rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, 179.4900 + 179.4901 + // We have to close these tags to support XHTML (#13200) 179.4902 + wrapMap = { 179.4903 + 179.4904 + // Support: IE 9 179.4905 + option: [ 1, "<select multiple='multiple'>", "</select>" ], 179.4906 + 179.4907 + thead: [ 1, "<table>", "</table>" ], 179.4908 + col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 179.4909 + tr: [ 2, "<table><tbody>", "</tbody></table>" ], 179.4910 + td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 179.4911 + 179.4912 + _default: [ 0, "", "" ] 179.4913 + }; 179.4914 + 179.4915 +// Support: IE 9 179.4916 +wrapMap.optgroup = wrapMap.option; 179.4917 + 179.4918 +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 179.4919 +wrapMap.th = wrapMap.td; 179.4920 + 179.4921 +// Support: 1.x compatibility 179.4922 +// Manipulating tables requires a tbody 179.4923 +function manipulationTarget( elem, content ) { 179.4924 + return jQuery.nodeName( elem, "table" ) && 179.4925 + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? 179.4926 + 179.4927 + elem.getElementsByTagName("tbody")[0] || 179.4928 + elem.appendChild( elem.ownerDocument.createElement("tbody") ) : 179.4929 + elem; 179.4930 +} 179.4931 + 179.4932 +// Replace/restore the type attribute of script elements for safe DOM manipulation 179.4933 +function disableScript( elem ) { 179.4934 + elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; 179.4935 + return elem; 179.4936 +} 179.4937 +function restoreScript( elem ) { 179.4938 + var match = rscriptTypeMasked.exec( elem.type ); 179.4939 + 179.4940 + if ( match ) { 179.4941 + elem.type = match[ 1 ]; 179.4942 + } else { 179.4943 + elem.removeAttribute("type"); 179.4944 + } 179.4945 + 179.4946 + return elem; 179.4947 +} 179.4948 + 179.4949 +// Mark scripts as having already been evaluated 179.4950 +function setGlobalEval( elems, refElements ) { 179.4951 + var i = 0, 179.4952 + l = elems.length; 179.4953 + 179.4954 + for ( ; i < l; i++ ) { 179.4955 + data_priv.set( 179.4956 + elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) 179.4957 + ); 179.4958 + } 179.4959 +} 179.4960 + 179.4961 +function cloneCopyEvent( src, dest ) { 179.4962 + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; 179.4963 + 179.4964 + if ( dest.nodeType !== 1 ) { 179.4965 + return; 179.4966 + } 179.4967 + 179.4968 + // 1. Copy private data: events, handlers, etc. 179.4969 + if ( data_priv.hasData( src ) ) { 179.4970 + pdataOld = data_priv.access( src ); 179.4971 + pdataCur = data_priv.set( dest, pdataOld ); 179.4972 + events = pdataOld.events; 179.4973 + 179.4974 + if ( events ) { 179.4975 + delete pdataCur.handle; 179.4976 + pdataCur.events = {}; 179.4977 + 179.4978 + for ( type in events ) { 179.4979 + for ( i = 0, l = events[ type ].length; i < l; i++ ) { 179.4980 + jQuery.event.add( dest, type, events[ type ][ i ] ); 179.4981 + } 179.4982 + } 179.4983 + } 179.4984 + } 179.4985 + 179.4986 + // 2. Copy user data 179.4987 + if ( data_user.hasData( src ) ) { 179.4988 + udataOld = data_user.access( src ); 179.4989 + udataCur = jQuery.extend( {}, udataOld ); 179.4990 + 179.4991 + data_user.set( dest, udataCur ); 179.4992 + } 179.4993 +} 179.4994 + 179.4995 +function getAll( context, tag ) { 179.4996 + var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : 179.4997 + context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : 179.4998 + []; 179.4999 + 179.5000 + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? 179.5001 + jQuery.merge( [ context ], ret ) : 179.5002 + ret; 179.5003 +} 179.5004 + 179.5005 +// Support: IE >= 9 179.5006 +function fixInput( src, dest ) { 179.5007 + var nodeName = dest.nodeName.toLowerCase(); 179.5008 + 179.5009 + // Fails to persist the checked state of a cloned checkbox or radio button. 179.5010 + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 179.5011 + dest.checked = src.checked; 179.5012 + 179.5013 + // Fails to return the selected option to the default selected state when cloning options 179.5014 + } else if ( nodeName === "input" || nodeName === "textarea" ) { 179.5015 + dest.defaultValue = src.defaultValue; 179.5016 + } 179.5017 +} 179.5018 + 179.5019 +jQuery.extend({ 179.5020 + clone: function( elem, dataAndEvents, deepDataAndEvents ) { 179.5021 + var i, l, srcElements, destElements, 179.5022 + clone = elem.cloneNode( true ), 179.5023 + inPage = jQuery.contains( elem.ownerDocument, elem ); 179.5024 + 179.5025 + // Support: IE >= 9 179.5026 + // Fix Cloning issues 179.5027 + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 179.5028 + !jQuery.isXMLDoc( elem ) ) { 179.5029 + 179.5030 + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 179.5031 + destElements = getAll( clone ); 179.5032 + srcElements = getAll( elem ); 179.5033 + 179.5034 + for ( i = 0, l = srcElements.length; i < l; i++ ) { 179.5035 + fixInput( srcElements[ i ], destElements[ i ] ); 179.5036 + } 179.5037 + } 179.5038 + 179.5039 + // Copy the events from the original to the clone 179.5040 + if ( dataAndEvents ) { 179.5041 + if ( deepDataAndEvents ) { 179.5042 + srcElements = srcElements || getAll( elem ); 179.5043 + destElements = destElements || getAll( clone ); 179.5044 + 179.5045 + for ( i = 0, l = srcElements.length; i < l; i++ ) { 179.5046 + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 179.5047 + } 179.5048 + } else { 179.5049 + cloneCopyEvent( elem, clone ); 179.5050 + } 179.5051 + } 179.5052 + 179.5053 + // Preserve script evaluation history 179.5054 + destElements = getAll( clone, "script" ); 179.5055 + if ( destElements.length > 0 ) { 179.5056 + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 179.5057 + } 179.5058 + 179.5059 + // Return the cloned set 179.5060 + return clone; 179.5061 + }, 179.5062 + 179.5063 + buildFragment: function( elems, context, scripts, selection ) { 179.5064 + var elem, tmp, tag, wrap, contains, j, 179.5065 + fragment = context.createDocumentFragment(), 179.5066 + nodes = [], 179.5067 + i = 0, 179.5068 + l = elems.length; 179.5069 + 179.5070 + for ( ; i < l; i++ ) { 179.5071 + elem = elems[ i ]; 179.5072 + 179.5073 + if ( elem || elem === 0 ) { 179.5074 + 179.5075 + // Add nodes directly 179.5076 + if ( jQuery.type( elem ) === "object" ) { 179.5077 + // Support: QtWebKit 179.5078 + // jQuery.merge because push.apply(_, arraylike) throws 179.5079 + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 179.5080 + 179.5081 + // Convert non-html into a text node 179.5082 + } else if ( !rhtml.test( elem ) ) { 179.5083 + nodes.push( context.createTextNode( elem ) ); 179.5084 + 179.5085 + // Convert html into DOM nodes 179.5086 + } else { 179.5087 + tmp = tmp || fragment.appendChild( context.createElement("div") ); 179.5088 + 179.5089 + // Deserialize a standard representation 179.5090 + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 179.5091 + wrap = wrapMap[ tag ] || wrapMap._default; 179.5092 + tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ]; 179.5093 + 179.5094 + // Descend through wrappers to the right content 179.5095 + j = wrap[ 0 ]; 179.5096 + while ( j-- ) { 179.5097 + tmp = tmp.lastChild; 179.5098 + } 179.5099 + 179.5100 + // Support: QtWebKit 179.5101 + // jQuery.merge because push.apply(_, arraylike) throws 179.5102 + jQuery.merge( nodes, tmp.childNodes ); 179.5103 + 179.5104 + // Remember the top-level container 179.5105 + tmp = fragment.firstChild; 179.5106 + 179.5107 + // Fixes #12346 179.5108 + // Support: Webkit, IE 179.5109 + tmp.textContent = ""; 179.5110 + } 179.5111 + } 179.5112 + } 179.5113 + 179.5114 + // Remove wrapper from fragment 179.5115 + fragment.textContent = ""; 179.5116 + 179.5117 + i = 0; 179.5118 + while ( (elem = nodes[ i++ ]) ) { 179.5119 + 179.5120 + // #4087 - If origin and destination elements are the same, and this is 179.5121 + // that element, do not do anything 179.5122 + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { 179.5123 + continue; 179.5124 + } 179.5125 + 179.5126 + contains = jQuery.contains( elem.ownerDocument, elem ); 179.5127 + 179.5128 + // Append to fragment 179.5129 + tmp = getAll( fragment.appendChild( elem ), "script" ); 179.5130 + 179.5131 + // Preserve script evaluation history 179.5132 + if ( contains ) { 179.5133 + setGlobalEval( tmp ); 179.5134 + } 179.5135 + 179.5136 + // Capture executables 179.5137 + if ( scripts ) { 179.5138 + j = 0; 179.5139 + while ( (elem = tmp[ j++ ]) ) { 179.5140 + if ( rscriptType.test( elem.type || "" ) ) { 179.5141 + scripts.push( elem ); 179.5142 + } 179.5143 + } 179.5144 + } 179.5145 + } 179.5146 + 179.5147 + return fragment; 179.5148 + }, 179.5149 + 179.5150 + cleanData: function( elems ) { 179.5151 + var data, elem, type, key, 179.5152 + special = jQuery.event.special, 179.5153 + i = 0; 179.5154 + 179.5155 + for ( ; (elem = elems[ i ]) !== undefined; i++ ) { 179.5156 + if ( jQuery.acceptData( elem ) ) { 179.5157 + key = elem[ data_priv.expando ]; 179.5158 + 179.5159 + if ( key && (data = data_priv.cache[ key ]) ) { 179.5160 + if ( data.events ) { 179.5161 + for ( type in data.events ) { 179.5162 + if ( special[ type ] ) { 179.5163 + jQuery.event.remove( elem, type ); 179.5164 + 179.5165 + // This is a shortcut to avoid jQuery.event.remove's overhead 179.5166 + } else { 179.5167 + jQuery.removeEvent( elem, type, data.handle ); 179.5168 + } 179.5169 + } 179.5170 + } 179.5171 + if ( data_priv.cache[ key ] ) { 179.5172 + // Discard any remaining `private` data 179.5173 + delete data_priv.cache[ key ]; 179.5174 + } 179.5175 + } 179.5176 + } 179.5177 + // Discard any remaining `user` data 179.5178 + delete data_user.cache[ elem[ data_user.expando ] ]; 179.5179 + } 179.5180 + } 179.5181 +}); 179.5182 + 179.5183 +jQuery.fn.extend({ 179.5184 + text: function( value ) { 179.5185 + return access( this, function( value ) { 179.5186 + return value === undefined ? 179.5187 + jQuery.text( this ) : 179.5188 + this.empty().each(function() { 179.5189 + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 179.5190 + this.textContent = value; 179.5191 + } 179.5192 + }); 179.5193 + }, null, value, arguments.length ); 179.5194 + }, 179.5195 + 179.5196 + append: function() { 179.5197 + return this.domManip( arguments, function( elem ) { 179.5198 + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 179.5199 + var target = manipulationTarget( this, elem ); 179.5200 + target.appendChild( elem ); 179.5201 + } 179.5202 + }); 179.5203 + }, 179.5204 + 179.5205 + prepend: function() { 179.5206 + return this.domManip( arguments, function( elem ) { 179.5207 + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 179.5208 + var target = manipulationTarget( this, elem ); 179.5209 + target.insertBefore( elem, target.firstChild ); 179.5210 + } 179.5211 + }); 179.5212 + }, 179.5213 + 179.5214 + before: function() { 179.5215 + return this.domManip( arguments, function( elem ) { 179.5216 + if ( this.parentNode ) { 179.5217 + this.parentNode.insertBefore( elem, this ); 179.5218 + } 179.5219 + }); 179.5220 + }, 179.5221 + 179.5222 + after: function() { 179.5223 + return this.domManip( arguments, function( elem ) { 179.5224 + if ( this.parentNode ) { 179.5225 + this.parentNode.insertBefore( elem, this.nextSibling ); 179.5226 + } 179.5227 + }); 179.5228 + }, 179.5229 + 179.5230 + remove: function( selector, keepData /* Internal Use Only */ ) { 179.5231 + var elem, 179.5232 + elems = selector ? jQuery.filter( selector, this ) : this, 179.5233 + i = 0; 179.5234 + 179.5235 + for ( ; (elem = elems[i]) != null; i++ ) { 179.5236 + if ( !keepData && elem.nodeType === 1 ) { 179.5237 + jQuery.cleanData( getAll( elem ) ); 179.5238 + } 179.5239 + 179.5240 + if ( elem.parentNode ) { 179.5241 + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { 179.5242 + setGlobalEval( getAll( elem, "script" ) ); 179.5243 + } 179.5244 + elem.parentNode.removeChild( elem ); 179.5245 + } 179.5246 + } 179.5247 + 179.5248 + return this; 179.5249 + }, 179.5250 + 179.5251 + empty: function() { 179.5252 + var elem, 179.5253 + i = 0; 179.5254 + 179.5255 + for ( ; (elem = this[i]) != null; i++ ) { 179.5256 + if ( elem.nodeType === 1 ) { 179.5257 + 179.5258 + // Prevent memory leaks 179.5259 + jQuery.cleanData( getAll( elem, false ) ); 179.5260 + 179.5261 + // Remove any remaining nodes 179.5262 + elem.textContent = ""; 179.5263 + } 179.5264 + } 179.5265 + 179.5266 + return this; 179.5267 + }, 179.5268 + 179.5269 + clone: function( dataAndEvents, deepDataAndEvents ) { 179.5270 + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 179.5271 + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 179.5272 + 179.5273 + return this.map(function() { 179.5274 + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 179.5275 + }); 179.5276 + }, 179.5277 + 179.5278 + html: function( value ) { 179.5279 + return access( this, function( value ) { 179.5280 + var elem = this[ 0 ] || {}, 179.5281 + i = 0, 179.5282 + l = this.length; 179.5283 + 179.5284 + if ( value === undefined && elem.nodeType === 1 ) { 179.5285 + return elem.innerHTML; 179.5286 + } 179.5287 + 179.5288 + // See if we can take a shortcut and just use innerHTML 179.5289 + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 179.5290 + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 179.5291 + 179.5292 + value = value.replace( rxhtmlTag, "<$1></$2>" ); 179.5293 + 179.5294 + try { 179.5295 + for ( ; i < l; i++ ) { 179.5296 + elem = this[ i ] || {}; 179.5297 + 179.5298 + // Remove element nodes and prevent memory leaks 179.5299 + if ( elem.nodeType === 1 ) { 179.5300 + jQuery.cleanData( getAll( elem, false ) ); 179.5301 + elem.innerHTML = value; 179.5302 + } 179.5303 + } 179.5304 + 179.5305 + elem = 0; 179.5306 + 179.5307 + // If using innerHTML throws an exception, use the fallback method 179.5308 + } catch( e ) {} 179.5309 + } 179.5310 + 179.5311 + if ( elem ) { 179.5312 + this.empty().append( value ); 179.5313 + } 179.5314 + }, null, value, arguments.length ); 179.5315 + }, 179.5316 + 179.5317 + replaceWith: function() { 179.5318 + var arg = arguments[ 0 ]; 179.5319 + 179.5320 + // Make the changes, replacing each context element with the new content 179.5321 + this.domManip( arguments, function( elem ) { 179.5322 + arg = this.parentNode; 179.5323 + 179.5324 + jQuery.cleanData( getAll( this ) ); 179.5325 + 179.5326 + if ( arg ) { 179.5327 + arg.replaceChild( elem, this ); 179.5328 + } 179.5329 + }); 179.5330 + 179.5331 + // Force removal if there was no new content (e.g., from empty arguments) 179.5332 + return arg && (arg.length || arg.nodeType) ? this : this.remove(); 179.5333 + }, 179.5334 + 179.5335 + detach: function( selector ) { 179.5336 + return this.remove( selector, true ); 179.5337 + }, 179.5338 + 179.5339 + domManip: function( args, callback ) { 179.5340 + 179.5341 + // Flatten any nested arrays 179.5342 + args = concat.apply( [], args ); 179.5343 + 179.5344 + var fragment, first, scripts, hasScripts, node, doc, 179.5345 + i = 0, 179.5346 + l = this.length, 179.5347 + set = this, 179.5348 + iNoClone = l - 1, 179.5349 + value = args[ 0 ], 179.5350 + isFunction = jQuery.isFunction( value ); 179.5351 + 179.5352 + // We can't cloneNode fragments that contain checked, in WebKit 179.5353 + if ( isFunction || 179.5354 + ( l > 1 && typeof value === "string" && 179.5355 + !support.checkClone && rchecked.test( value ) ) ) { 179.5356 + return this.each(function( index ) { 179.5357 + var self = set.eq( index ); 179.5358 + if ( isFunction ) { 179.5359 + args[ 0 ] = value.call( this, index, self.html() ); 179.5360 + } 179.5361 + self.domManip( args, callback ); 179.5362 + }); 179.5363 + } 179.5364 + 179.5365 + if ( l ) { 179.5366 + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); 179.5367 + first = fragment.firstChild; 179.5368 + 179.5369 + if ( fragment.childNodes.length === 1 ) { 179.5370 + fragment = first; 179.5371 + } 179.5372 + 179.5373 + if ( first ) { 179.5374 + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 179.5375 + hasScripts = scripts.length; 179.5376 + 179.5377 + // Use the original fragment for the last item instead of the first because it can end up 179.5378 + // being emptied incorrectly in certain situations (#8070). 179.5379 + for ( ; i < l; i++ ) { 179.5380 + node = fragment; 179.5381 + 179.5382 + if ( i !== iNoClone ) { 179.5383 + node = jQuery.clone( node, true, true ); 179.5384 + 179.5385 + // Keep references to cloned scripts for later restoration 179.5386 + if ( hasScripts ) { 179.5387 + // Support: QtWebKit 179.5388 + // jQuery.merge because push.apply(_, arraylike) throws 179.5389 + jQuery.merge( scripts, getAll( node, "script" ) ); 179.5390 + } 179.5391 + } 179.5392 + 179.5393 + callback.call( this[ i ], node, i ); 179.5394 + } 179.5395 + 179.5396 + if ( hasScripts ) { 179.5397 + doc = scripts[ scripts.length - 1 ].ownerDocument; 179.5398 + 179.5399 + // Reenable scripts 179.5400 + jQuery.map( scripts, restoreScript ); 179.5401 + 179.5402 + // Evaluate executable scripts on first document insertion 179.5403 + for ( i = 0; i < hasScripts; i++ ) { 179.5404 + node = scripts[ i ]; 179.5405 + if ( rscriptType.test( node.type || "" ) && 179.5406 + !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { 179.5407 + 179.5408 + if ( node.src ) { 179.5409 + // Optional AJAX dependency, but won't run scripts if not present 179.5410 + if ( jQuery._evalUrl ) { 179.5411 + jQuery._evalUrl( node.src ); 179.5412 + } 179.5413 + } else { 179.5414 + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); 179.5415 + } 179.5416 + } 179.5417 + } 179.5418 + } 179.5419 + } 179.5420 + } 179.5421 + 179.5422 + return this; 179.5423 + } 179.5424 +}); 179.5425 + 179.5426 +jQuery.each({ 179.5427 + appendTo: "append", 179.5428 + prependTo: "prepend", 179.5429 + insertBefore: "before", 179.5430 + insertAfter: "after", 179.5431 + replaceAll: "replaceWith" 179.5432 +}, function( name, original ) { 179.5433 + jQuery.fn[ name ] = function( selector ) { 179.5434 + var elems, 179.5435 + ret = [], 179.5436 + insert = jQuery( selector ), 179.5437 + last = insert.length - 1, 179.5438 + i = 0; 179.5439 + 179.5440 + for ( ; i <= last; i++ ) { 179.5441 + elems = i === last ? this : this.clone( true ); 179.5442 + jQuery( insert[ i ] )[ original ]( elems ); 179.5443 + 179.5444 + // Support: QtWebKit 179.5445 + // .get() because push.apply(_, arraylike) throws 179.5446 + push.apply( ret, elems.get() ); 179.5447 + } 179.5448 + 179.5449 + return this.pushStack( ret ); 179.5450 + }; 179.5451 +}); 179.5452 + 179.5453 + 179.5454 +var iframe, 179.5455 + elemdisplay = {}; 179.5456 + 179.5457 +/** 179.5458 + * Retrieve the actual display of a element 179.5459 + * @param {String} name nodeName of the element 179.5460 + * @param {Object} doc Document object 179.5461 + */ 179.5462 +// Called only from within defaultDisplay 179.5463 +function actualDisplay( name, doc ) { 179.5464 + var style, 179.5465 + elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), 179.5466 + 179.5467 + // getDefaultComputedStyle might be reliably used only on attached element 179.5468 + display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? 179.5469 + 179.5470 + // Use of this method is a temporary fix (more like optmization) until something better comes along, 179.5471 + // since it was removed from specification and supported only in FF 179.5472 + style.display : jQuery.css( elem[ 0 ], "display" ); 179.5473 + 179.5474 + // We don't have any data stored on the element, 179.5475 + // so use "detach" method as fast way to get rid of the element 179.5476 + elem.detach(); 179.5477 + 179.5478 + return display; 179.5479 +} 179.5480 + 179.5481 +/** 179.5482 + * Try to determine the default display value of an element 179.5483 + * @param {String} nodeName 179.5484 + */ 179.5485 +function defaultDisplay( nodeName ) { 179.5486 + var doc = document, 179.5487 + display = elemdisplay[ nodeName ]; 179.5488 + 179.5489 + if ( !display ) { 179.5490 + display = actualDisplay( nodeName, doc ); 179.5491 + 179.5492 + // If the simple way fails, read from inside an iframe 179.5493 + if ( display === "none" || !display ) { 179.5494 + 179.5495 + // Use the already-created iframe if possible 179.5496 + iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); 179.5497 + 179.5498 + // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse 179.5499 + doc = iframe[ 0 ].contentDocument; 179.5500 + 179.5501 + // Support: IE 179.5502 + doc.write(); 179.5503 + doc.close(); 179.5504 + 179.5505 + display = actualDisplay( nodeName, doc ); 179.5506 + iframe.detach(); 179.5507 + } 179.5508 + 179.5509 + // Store the correct default display 179.5510 + elemdisplay[ nodeName ] = display; 179.5511 + } 179.5512 + 179.5513 + return display; 179.5514 +} 179.5515 +var rmargin = (/^margin/); 179.5516 + 179.5517 +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 179.5518 + 179.5519 +var getStyles = function( elem ) { 179.5520 + return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); 179.5521 + }; 179.5522 + 179.5523 + 179.5524 + 179.5525 +function curCSS( elem, name, computed ) { 179.5526 + var width, minWidth, maxWidth, ret, 179.5527 + style = elem.style; 179.5528 + 179.5529 + computed = computed || getStyles( elem ); 179.5530 + 179.5531 + // Support: IE9 179.5532 + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 179.5533 + if ( computed ) { 179.5534 + ret = computed.getPropertyValue( name ) || computed[ name ]; 179.5535 + } 179.5536 + 179.5537 + if ( computed ) { 179.5538 + 179.5539 + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { 179.5540 + ret = jQuery.style( elem, name ); 179.5541 + } 179.5542 + 179.5543 + // Support: iOS < 6 179.5544 + // A tribute to the "awesome hack by Dean Edwards" 179.5545 + // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels 179.5546 + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values 179.5547 + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { 179.5548 + 179.5549 + // Remember the original values 179.5550 + width = style.width; 179.5551 + minWidth = style.minWidth; 179.5552 + maxWidth = style.maxWidth; 179.5553 + 179.5554 + // Put in the new values to get a computed value out 179.5555 + style.minWidth = style.maxWidth = style.width = ret; 179.5556 + ret = computed.width; 179.5557 + 179.5558 + // Revert the changed values 179.5559 + style.width = width; 179.5560 + style.minWidth = minWidth; 179.5561 + style.maxWidth = maxWidth; 179.5562 + } 179.5563 + } 179.5564 + 179.5565 + return ret !== undefined ? 179.5566 + // Support: IE 179.5567 + // IE returns zIndex value as an integer. 179.5568 + ret + "" : 179.5569 + ret; 179.5570 +} 179.5571 + 179.5572 + 179.5573 +function addGetHookIf( conditionFn, hookFn ) { 179.5574 + // Define the hook, we'll check on the first run if it's really needed. 179.5575 + return { 179.5576 + get: function() { 179.5577 + if ( conditionFn() ) { 179.5578 + // Hook not needed (or it's not possible to use it due to missing dependency), 179.5579 + // remove it. 179.5580 + // Since there are no other hooks for marginRight, remove the whole object. 179.5581 + delete this.get; 179.5582 + return; 179.5583 + } 179.5584 + 179.5585 + // Hook needed; redefine it so that the support test is not executed again. 179.5586 + 179.5587 + return (this.get = hookFn).apply( this, arguments ); 179.5588 + } 179.5589 + }; 179.5590 +} 179.5591 + 179.5592 + 179.5593 +(function() { 179.5594 + var pixelPositionVal, boxSizingReliableVal, 179.5595 + docElem = document.documentElement, 179.5596 + container = document.createElement( "div" ), 179.5597 + div = document.createElement( "div" ); 179.5598 + 179.5599 + if ( !div.style ) { 179.5600 + return; 179.5601 + } 179.5602 + 179.5603 + div.style.backgroundClip = "content-box"; 179.5604 + div.cloneNode( true ).style.backgroundClip = ""; 179.5605 + support.clearCloneStyle = div.style.backgroundClip === "content-box"; 179.5606 + 179.5607 + container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + 179.5608 + "position:absolute"; 179.5609 + container.appendChild( div ); 179.5610 + 179.5611 + // Executing both pixelPosition & boxSizingReliable tests require only one layout 179.5612 + // so they're executed at the same time to save the second computation. 179.5613 + function computePixelPositionAndBoxSizingReliable() { 179.5614 + div.style.cssText = 179.5615 + // Support: Firefox<29, Android 2.3 179.5616 + // Vendor-prefix box-sizing 179.5617 + "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + 179.5618 + "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + 179.5619 + "border:1px;padding:1px;width:4px;position:absolute"; 179.5620 + div.innerHTML = ""; 179.5621 + docElem.appendChild( container ); 179.5622 + 179.5623 + var divStyle = window.getComputedStyle( div, null ); 179.5624 + pixelPositionVal = divStyle.top !== "1%"; 179.5625 + boxSizingReliableVal = divStyle.width === "4px"; 179.5626 + 179.5627 + docElem.removeChild( container ); 179.5628 + } 179.5629 + 179.5630 + // Support: node.js jsdom 179.5631 + // Don't assume that getComputedStyle is a property of the global object 179.5632 + if ( window.getComputedStyle ) { 179.5633 + jQuery.extend( support, { 179.5634 + pixelPosition: function() { 179.5635 + // This test is executed only once but we still do memoizing 179.5636 + // since we can use the boxSizingReliable pre-computing. 179.5637 + // No need to check if the test was already performed, though. 179.5638 + computePixelPositionAndBoxSizingReliable(); 179.5639 + return pixelPositionVal; 179.5640 + }, 179.5641 + boxSizingReliable: function() { 179.5642 + if ( boxSizingReliableVal == null ) { 179.5643 + computePixelPositionAndBoxSizingReliable(); 179.5644 + } 179.5645 + return boxSizingReliableVal; 179.5646 + }, 179.5647 + reliableMarginRight: function() { 179.5648 + // Support: Android 2.3 179.5649 + // Check if div with explicit width and no margin-right incorrectly 179.5650 + // gets computed margin-right based on width of container. (#3333) 179.5651 + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right 179.5652 + // This support function is only executed once so no memoizing is needed. 179.5653 + var ret, 179.5654 + marginDiv = div.appendChild( document.createElement( "div" ) ); 179.5655 + 179.5656 + // Reset CSS: box-sizing; display; margin; border; padding 179.5657 + marginDiv.style.cssText = div.style.cssText = 179.5658 + // Support: Firefox<29, Android 2.3 179.5659 + // Vendor-prefix box-sizing 179.5660 + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + 179.5661 + "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; 179.5662 + marginDiv.style.marginRight = marginDiv.style.width = "0"; 179.5663 + div.style.width = "1px"; 179.5664 + docElem.appendChild( container ); 179.5665 + 179.5666 + ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); 179.5667 + 179.5668 + docElem.removeChild( container ); 179.5669 + 179.5670 + return ret; 179.5671 + } 179.5672 + }); 179.5673 + } 179.5674 +})(); 179.5675 + 179.5676 + 179.5677 +// A method for quickly swapping in/out CSS properties to get correct calculations. 179.5678 +jQuery.swap = function( elem, options, callback, args ) { 179.5679 + var ret, name, 179.5680 + old = {}; 179.5681 + 179.5682 + // Remember the old values, and insert the new ones 179.5683 + for ( name in options ) { 179.5684 + old[ name ] = elem.style[ name ]; 179.5685 + elem.style[ name ] = options[ name ]; 179.5686 + } 179.5687 + 179.5688 + ret = callback.apply( elem, args || [] ); 179.5689 + 179.5690 + // Revert the old values 179.5691 + for ( name in options ) { 179.5692 + elem.style[ name ] = old[ name ]; 179.5693 + } 179.5694 + 179.5695 + return ret; 179.5696 +}; 179.5697 + 179.5698 + 179.5699 +var 179.5700 + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" 179.5701 + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 179.5702 + rdisplayswap = /^(none|table(?!-c[ea]).+)/, 179.5703 + rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), 179.5704 + rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), 179.5705 + 179.5706 + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 179.5707 + cssNormalTransform = { 179.5708 + letterSpacing: "0", 179.5709 + fontWeight: "400" 179.5710 + }, 179.5711 + 179.5712 + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; 179.5713 + 179.5714 +// return a css property mapped to a potentially vendor prefixed property 179.5715 +function vendorPropName( style, name ) { 179.5716 + 179.5717 + // shortcut for names that are not vendor prefixed 179.5718 + if ( name in style ) { 179.5719 + return name; 179.5720 + } 179.5721 + 179.5722 + // check for vendor prefixed names 179.5723 + var capName = name[0].toUpperCase() + name.slice(1), 179.5724 + origName = name, 179.5725 + i = cssPrefixes.length; 179.5726 + 179.5727 + while ( i-- ) { 179.5728 + name = cssPrefixes[ i ] + capName; 179.5729 + if ( name in style ) { 179.5730 + return name; 179.5731 + } 179.5732 + } 179.5733 + 179.5734 + return origName; 179.5735 +} 179.5736 + 179.5737 +function setPositiveNumber( elem, value, subtract ) { 179.5738 + var matches = rnumsplit.exec( value ); 179.5739 + return matches ? 179.5740 + // Guard against undefined "subtract", e.g., when used as in cssHooks 179.5741 + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : 179.5742 + value; 179.5743 +} 179.5744 + 179.5745 +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { 179.5746 + var i = extra === ( isBorderBox ? "border" : "content" ) ? 179.5747 + // If we already have the right measurement, avoid augmentation 179.5748 + 4 : 179.5749 + // Otherwise initialize for horizontal or vertical properties 179.5750 + name === "width" ? 1 : 0, 179.5751 + 179.5752 + val = 0; 179.5753 + 179.5754 + for ( ; i < 4; i += 2 ) { 179.5755 + // both box models exclude margin, so add it if we want it 179.5756 + if ( extra === "margin" ) { 179.5757 + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); 179.5758 + } 179.5759 + 179.5760 + if ( isBorderBox ) { 179.5761 + // border-box includes padding, so remove it if we want content 179.5762 + if ( extra === "content" ) { 179.5763 + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 179.5764 + } 179.5765 + 179.5766 + // at this point, extra isn't border nor margin, so remove border 179.5767 + if ( extra !== "margin" ) { 179.5768 + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 179.5769 + } 179.5770 + } else { 179.5771 + // at this point, extra isn't content, so add padding 179.5772 + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 179.5773 + 179.5774 + // at this point, extra isn't content nor padding, so add border 179.5775 + if ( extra !== "padding" ) { 179.5776 + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 179.5777 + } 179.5778 + } 179.5779 + } 179.5780 + 179.5781 + return val; 179.5782 +} 179.5783 + 179.5784 +function getWidthOrHeight( elem, name, extra ) { 179.5785 + 179.5786 + // Start with offset property, which is equivalent to the border-box value 179.5787 + var valueIsBorderBox = true, 179.5788 + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, 179.5789 + styles = getStyles( elem ), 179.5790 + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 179.5791 + 179.5792 + // some non-html elements return undefined for offsetWidth, so check for null/undefined 179.5793 + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 179.5794 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 179.5795 + if ( val <= 0 || val == null ) { 179.5796 + // Fall back to computed then uncomputed css if necessary 179.5797 + val = curCSS( elem, name, styles ); 179.5798 + if ( val < 0 || val == null ) { 179.5799 + val = elem.style[ name ]; 179.5800 + } 179.5801 + 179.5802 + // Computed unit is not pixels. Stop here and return. 179.5803 + if ( rnumnonpx.test(val) ) { 179.5804 + return val; 179.5805 + } 179.5806 + 179.5807 + // we need the check for style in case a browser which returns unreliable values 179.5808 + // for getComputedStyle silently falls back to the reliable elem.style 179.5809 + valueIsBorderBox = isBorderBox && 179.5810 + ( support.boxSizingReliable() || val === elem.style[ name ] ); 179.5811 + 179.5812 + // Normalize "", auto, and prepare for extra 179.5813 + val = parseFloat( val ) || 0; 179.5814 + } 179.5815 + 179.5816 + // use the active box-sizing model to add/subtract irrelevant styles 179.5817 + return ( val + 179.5818 + augmentWidthOrHeight( 179.5819 + elem, 179.5820 + name, 179.5821 + extra || ( isBorderBox ? "border" : "content" ), 179.5822 + valueIsBorderBox, 179.5823 + styles 179.5824 + ) 179.5825 + ) + "px"; 179.5826 +} 179.5827 + 179.5828 +function showHide( elements, show ) { 179.5829 + var display, elem, hidden, 179.5830 + values = [], 179.5831 + index = 0, 179.5832 + length = elements.length; 179.5833 + 179.5834 + for ( ; index < length; index++ ) { 179.5835 + elem = elements[ index ]; 179.5836 + if ( !elem.style ) { 179.5837 + continue; 179.5838 + } 179.5839 + 179.5840 + values[ index ] = data_priv.get( elem, "olddisplay" ); 179.5841 + display = elem.style.display; 179.5842 + if ( show ) { 179.5843 + // Reset the inline display of this element to learn if it is 179.5844 + // being hidden by cascaded rules or not 179.5845 + if ( !values[ index ] && display === "none" ) { 179.5846 + elem.style.display = ""; 179.5847 + } 179.5848 + 179.5849 + // Set elements which have been overridden with display: none 179.5850 + // in a stylesheet to whatever the default browser style is 179.5851 + // for such an element 179.5852 + if ( elem.style.display === "" && isHidden( elem ) ) { 179.5853 + values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); 179.5854 + } 179.5855 + } else { 179.5856 + hidden = isHidden( elem ); 179.5857 + 179.5858 + if ( display !== "none" || !hidden ) { 179.5859 + data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); 179.5860 + } 179.5861 + } 179.5862 + } 179.5863 + 179.5864 + // Set the display of most of the elements in a second loop 179.5865 + // to avoid the constant reflow 179.5866 + for ( index = 0; index < length; index++ ) { 179.5867 + elem = elements[ index ]; 179.5868 + if ( !elem.style ) { 179.5869 + continue; 179.5870 + } 179.5871 + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { 179.5872 + elem.style.display = show ? values[ index ] || "" : "none"; 179.5873 + } 179.5874 + } 179.5875 + 179.5876 + return elements; 179.5877 +} 179.5878 + 179.5879 +jQuery.extend({ 179.5880 + // Add in style property hooks for overriding the default 179.5881 + // behavior of getting and setting a style property 179.5882 + cssHooks: { 179.5883 + opacity: { 179.5884 + get: function( elem, computed ) { 179.5885 + if ( computed ) { 179.5886 + // We should always get a number back from opacity 179.5887 + var ret = curCSS( elem, "opacity" ); 179.5888 + return ret === "" ? "1" : ret; 179.5889 + } 179.5890 + } 179.5891 + } 179.5892 + }, 179.5893 + 179.5894 + // Don't automatically add "px" to these possibly-unitless properties 179.5895 + cssNumber: { 179.5896 + "columnCount": true, 179.5897 + "fillOpacity": true, 179.5898 + "flexGrow": true, 179.5899 + "flexShrink": true, 179.5900 + "fontWeight": true, 179.5901 + "lineHeight": true, 179.5902 + "opacity": true, 179.5903 + "order": true, 179.5904 + "orphans": true, 179.5905 + "widows": true, 179.5906 + "zIndex": true, 179.5907 + "zoom": true 179.5908 + }, 179.5909 + 179.5910 + // Add in properties whose names you wish to fix before 179.5911 + // setting or getting the value 179.5912 + cssProps: { 179.5913 + // normalize float css property 179.5914 + "float": "cssFloat" 179.5915 + }, 179.5916 + 179.5917 + // Get and set the style property on a DOM Node 179.5918 + style: function( elem, name, value, extra ) { 179.5919 + // Don't set styles on text and comment nodes 179.5920 + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 179.5921 + return; 179.5922 + } 179.5923 + 179.5924 + // Make sure that we're working with the right name 179.5925 + var ret, type, hooks, 179.5926 + origName = jQuery.camelCase( name ), 179.5927 + style = elem.style; 179.5928 + 179.5929 + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); 179.5930 + 179.5931 + // gets hook for the prefixed version 179.5932 + // followed by the unprefixed version 179.5933 + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 179.5934 + 179.5935 + // Check if we're setting a value 179.5936 + if ( value !== undefined ) { 179.5937 + type = typeof value; 179.5938 + 179.5939 + // convert relative number strings (+= or -=) to relative numbers. #7345 179.5940 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { 179.5941 + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); 179.5942 + // Fixes bug #9237 179.5943 + type = "number"; 179.5944 + } 179.5945 + 179.5946 + // Make sure that null and NaN values aren't set. See: #7116 179.5947 + if ( value == null || value !== value ) { 179.5948 + return; 179.5949 + } 179.5950 + 179.5951 + // If a number was passed in, add 'px' to the (except for certain CSS properties) 179.5952 + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { 179.5953 + value += "px"; 179.5954 + } 179.5955 + 179.5956 + // Fixes #8908, it can be done more correctly by specifying setters in cssHooks, 179.5957 + // but it would mean to define eight (for every problematic property) identical functions 179.5958 + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 179.5959 + style[ name ] = "inherit"; 179.5960 + } 179.5961 + 179.5962 + // If a hook was provided, use that value, otherwise just set the specified value 179.5963 + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { 179.5964 + style[ name ] = value; 179.5965 + } 179.5966 + 179.5967 + } else { 179.5968 + // If a hook was provided get the non-computed value from there 179.5969 + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { 179.5970 + return ret; 179.5971 + } 179.5972 + 179.5973 + // Otherwise just get the value from the style object 179.5974 + return style[ name ]; 179.5975 + } 179.5976 + }, 179.5977 + 179.5978 + css: function( elem, name, extra, styles ) { 179.5979 + var val, num, hooks, 179.5980 + origName = jQuery.camelCase( name ); 179.5981 + 179.5982 + // Make sure that we're working with the right name 179.5983 + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); 179.5984 + 179.5985 + // gets hook for the prefixed version 179.5986 + // followed by the unprefixed version 179.5987 + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 179.5988 + 179.5989 + // If a hook was provided get the computed value from there 179.5990 + if ( hooks && "get" in hooks ) { 179.5991 + val = hooks.get( elem, true, extra ); 179.5992 + } 179.5993 + 179.5994 + // Otherwise, if a way to get the computed value exists, use that 179.5995 + if ( val === undefined ) { 179.5996 + val = curCSS( elem, name, styles ); 179.5997 + } 179.5998 + 179.5999 + //convert "normal" to computed value 179.6000 + if ( val === "normal" && name in cssNormalTransform ) { 179.6001 + val = cssNormalTransform[ name ]; 179.6002 + } 179.6003 + 179.6004 + // Return, converting to number if forced or a qualifier was provided and val looks numeric 179.6005 + if ( extra === "" || extra ) { 179.6006 + num = parseFloat( val ); 179.6007 + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; 179.6008 + } 179.6009 + return val; 179.6010 + } 179.6011 +}); 179.6012 + 179.6013 +jQuery.each([ "height", "width" ], function( i, name ) { 179.6014 + jQuery.cssHooks[ name ] = { 179.6015 + get: function( elem, computed, extra ) { 179.6016 + if ( computed ) { 179.6017 + // certain elements can have dimension info if we invisibly show them 179.6018 + // however, it must have a current display style that would benefit from this 179.6019 + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? 179.6020 + jQuery.swap( elem, cssShow, function() { 179.6021 + return getWidthOrHeight( elem, name, extra ); 179.6022 + }) : 179.6023 + getWidthOrHeight( elem, name, extra ); 179.6024 + } 179.6025 + }, 179.6026 + 179.6027 + set: function( elem, value, extra ) { 179.6028 + var styles = extra && getStyles( elem ); 179.6029 + return setPositiveNumber( elem, value, extra ? 179.6030 + augmentWidthOrHeight( 179.6031 + elem, 179.6032 + name, 179.6033 + extra, 179.6034 + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 179.6035 + styles 179.6036 + ) : 0 179.6037 + ); 179.6038 + } 179.6039 + }; 179.6040 +}); 179.6041 + 179.6042 +// Support: Android 2.3 179.6043 +jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, 179.6044 + function( elem, computed ) { 179.6045 + if ( computed ) { 179.6046 + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right 179.6047 + // Work around by temporarily setting element display to inline-block 179.6048 + return jQuery.swap( elem, { "display": "inline-block" }, 179.6049 + curCSS, [ elem, "marginRight" ] ); 179.6050 + } 179.6051 + } 179.6052 +); 179.6053 + 179.6054 +// These hooks are used by animate to expand properties 179.6055 +jQuery.each({ 179.6056 + margin: "", 179.6057 + padding: "", 179.6058 + border: "Width" 179.6059 +}, function( prefix, suffix ) { 179.6060 + jQuery.cssHooks[ prefix + suffix ] = { 179.6061 + expand: function( value ) { 179.6062 + var i = 0, 179.6063 + expanded = {}, 179.6064 + 179.6065 + // assumes a single number if not a string 179.6066 + parts = typeof value === "string" ? value.split(" ") : [ value ]; 179.6067 + 179.6068 + for ( ; i < 4; i++ ) { 179.6069 + expanded[ prefix + cssExpand[ i ] + suffix ] = 179.6070 + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 179.6071 + } 179.6072 + 179.6073 + return expanded; 179.6074 + } 179.6075 + }; 179.6076 + 179.6077 + if ( !rmargin.test( prefix ) ) { 179.6078 + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 179.6079 + } 179.6080 +}); 179.6081 + 179.6082 +jQuery.fn.extend({ 179.6083 + css: function( name, value ) { 179.6084 + return access( this, function( elem, name, value ) { 179.6085 + var styles, len, 179.6086 + map = {}, 179.6087 + i = 0; 179.6088 + 179.6089 + if ( jQuery.isArray( name ) ) { 179.6090 + styles = getStyles( elem ); 179.6091 + len = name.length; 179.6092 + 179.6093 + for ( ; i < len; i++ ) { 179.6094 + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 179.6095 + } 179.6096 + 179.6097 + return map; 179.6098 + } 179.6099 + 179.6100 + return value !== undefined ? 179.6101 + jQuery.style( elem, name, value ) : 179.6102 + jQuery.css( elem, name ); 179.6103 + }, name, value, arguments.length > 1 ); 179.6104 + }, 179.6105 + show: function() { 179.6106 + return showHide( this, true ); 179.6107 + }, 179.6108 + hide: function() { 179.6109 + return showHide( this ); 179.6110 + }, 179.6111 + toggle: function( state ) { 179.6112 + if ( typeof state === "boolean" ) { 179.6113 + return state ? this.show() : this.hide(); 179.6114 + } 179.6115 + 179.6116 + return this.each(function() { 179.6117 + if ( isHidden( this ) ) { 179.6118 + jQuery( this ).show(); 179.6119 + } else { 179.6120 + jQuery( this ).hide(); 179.6121 + } 179.6122 + }); 179.6123 + } 179.6124 +}); 179.6125 + 179.6126 + 179.6127 +function Tween( elem, options, prop, end, easing ) { 179.6128 + return new Tween.prototype.init( elem, options, prop, end, easing ); 179.6129 +} 179.6130 +jQuery.Tween = Tween; 179.6131 + 179.6132 +Tween.prototype = { 179.6133 + constructor: Tween, 179.6134 + init: function( elem, options, prop, end, easing, unit ) { 179.6135 + this.elem = elem; 179.6136 + this.prop = prop; 179.6137 + this.easing = easing || "swing"; 179.6138 + this.options = options; 179.6139 + this.start = this.now = this.cur(); 179.6140 + this.end = end; 179.6141 + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 179.6142 + }, 179.6143 + cur: function() { 179.6144 + var hooks = Tween.propHooks[ this.prop ]; 179.6145 + 179.6146 + return hooks && hooks.get ? 179.6147 + hooks.get( this ) : 179.6148 + Tween.propHooks._default.get( this ); 179.6149 + }, 179.6150 + run: function( percent ) { 179.6151 + var eased, 179.6152 + hooks = Tween.propHooks[ this.prop ]; 179.6153 + 179.6154 + if ( this.options.duration ) { 179.6155 + this.pos = eased = jQuery.easing[ this.easing ]( 179.6156 + percent, this.options.duration * percent, 0, 1, this.options.duration 179.6157 + ); 179.6158 + } else { 179.6159 + this.pos = eased = percent; 179.6160 + } 179.6161 + this.now = ( this.end - this.start ) * eased + this.start; 179.6162 + 179.6163 + if ( this.options.step ) { 179.6164 + this.options.step.call( this.elem, this.now, this ); 179.6165 + } 179.6166 + 179.6167 + if ( hooks && hooks.set ) { 179.6168 + hooks.set( this ); 179.6169 + } else { 179.6170 + Tween.propHooks._default.set( this ); 179.6171 + } 179.6172 + return this; 179.6173 + } 179.6174 +}; 179.6175 + 179.6176 +Tween.prototype.init.prototype = Tween.prototype; 179.6177 + 179.6178 +Tween.propHooks = { 179.6179 + _default: { 179.6180 + get: function( tween ) { 179.6181 + var result; 179.6182 + 179.6183 + if ( tween.elem[ tween.prop ] != null && 179.6184 + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { 179.6185 + return tween.elem[ tween.prop ]; 179.6186 + } 179.6187 + 179.6188 + // passing an empty string as a 3rd parameter to .css will automatically 179.6189 + // attempt a parseFloat and fallback to a string if the parse fails 179.6190 + // so, simple values such as "10px" are parsed to Float. 179.6191 + // complex values such as "rotate(1rad)" are returned as is. 179.6192 + result = jQuery.css( tween.elem, tween.prop, "" ); 179.6193 + // Empty strings, null, undefined and "auto" are converted to 0. 179.6194 + return !result || result === "auto" ? 0 : result; 179.6195 + }, 179.6196 + set: function( tween ) { 179.6197 + // use step hook for back compat - use cssHook if its there - use .style if its 179.6198 + // available and use plain properties where available 179.6199 + if ( jQuery.fx.step[ tween.prop ] ) { 179.6200 + jQuery.fx.step[ tween.prop ]( tween ); 179.6201 + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { 179.6202 + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 179.6203 + } else { 179.6204 + tween.elem[ tween.prop ] = tween.now; 179.6205 + } 179.6206 + } 179.6207 + } 179.6208 +}; 179.6209 + 179.6210 +// Support: IE9 179.6211 +// Panic based approach to setting things on disconnected nodes 179.6212 + 179.6213 +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 179.6214 + set: function( tween ) { 179.6215 + if ( tween.elem.nodeType && tween.elem.parentNode ) { 179.6216 + tween.elem[ tween.prop ] = tween.now; 179.6217 + } 179.6218 + } 179.6219 +}; 179.6220 + 179.6221 +jQuery.easing = { 179.6222 + linear: function( p ) { 179.6223 + return p; 179.6224 + }, 179.6225 + swing: function( p ) { 179.6226 + return 0.5 - Math.cos( p * Math.PI ) / 2; 179.6227 + } 179.6228 +}; 179.6229 + 179.6230 +jQuery.fx = Tween.prototype.init; 179.6231 + 179.6232 +// Back Compat <1.8 extension point 179.6233 +jQuery.fx.step = {}; 179.6234 + 179.6235 + 179.6236 + 179.6237 + 179.6238 +var 179.6239 + fxNow, timerId, 179.6240 + rfxtypes = /^(?:toggle|show|hide)$/, 179.6241 + rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), 179.6242 + rrun = /queueHooks$/, 179.6243 + animationPrefilters = [ defaultPrefilter ], 179.6244 + tweeners = { 179.6245 + "*": [ function( prop, value ) { 179.6246 + var tween = this.createTween( prop, value ), 179.6247 + target = tween.cur(), 179.6248 + parts = rfxnum.exec( value ), 179.6249 + unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 179.6250 + 179.6251 + // Starting value computation is required for potential unit mismatches 179.6252 + start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && 179.6253 + rfxnum.exec( jQuery.css( tween.elem, prop ) ), 179.6254 + scale = 1, 179.6255 + maxIterations = 20; 179.6256 + 179.6257 + if ( start && start[ 3 ] !== unit ) { 179.6258 + // Trust units reported by jQuery.css 179.6259 + unit = unit || start[ 3 ]; 179.6260 + 179.6261 + // Make sure we update the tween properties later on 179.6262 + parts = parts || []; 179.6263 + 179.6264 + // Iteratively approximate from a nonzero starting point 179.6265 + start = +target || 1; 179.6266 + 179.6267 + do { 179.6268 + // If previous iteration zeroed out, double until we get *something* 179.6269 + // Use a string for doubling factor so we don't accidentally see scale as unchanged below 179.6270 + scale = scale || ".5"; 179.6271 + 179.6272 + // Adjust and apply 179.6273 + start = start / scale; 179.6274 + jQuery.style( tween.elem, prop, start + unit ); 179.6275 + 179.6276 + // Update scale, tolerating zero or NaN from tween.cur() 179.6277 + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough 179.6278 + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); 179.6279 + } 179.6280 + 179.6281 + // Update tween properties 179.6282 + if ( parts ) { 179.6283 + start = tween.start = +start || +target || 0; 179.6284 + tween.unit = unit; 179.6285 + // If a +=/-= token was provided, we're doing a relative animation 179.6286 + tween.end = parts[ 1 ] ? 179.6287 + start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : 179.6288 + +parts[ 2 ]; 179.6289 + } 179.6290 + 179.6291 + return tween; 179.6292 + } ] 179.6293 + }; 179.6294 + 179.6295 +// Animations created synchronously will run synchronously 179.6296 +function createFxNow() { 179.6297 + setTimeout(function() { 179.6298 + fxNow = undefined; 179.6299 + }); 179.6300 + return ( fxNow = jQuery.now() ); 179.6301 +} 179.6302 + 179.6303 +// Generate parameters to create a standard animation 179.6304 +function genFx( type, includeWidth ) { 179.6305 + var which, 179.6306 + i = 0, 179.6307 + attrs = { height: type }; 179.6308 + 179.6309 + // if we include width, step value is 1 to do all cssExpand values, 179.6310 + // if we don't include width, step value is 2 to skip over Left and Right 179.6311 + includeWidth = includeWidth ? 1 : 0; 179.6312 + for ( ; i < 4 ; i += 2 - includeWidth ) { 179.6313 + which = cssExpand[ i ]; 179.6314 + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 179.6315 + } 179.6316 + 179.6317 + if ( includeWidth ) { 179.6318 + attrs.opacity = attrs.width = type; 179.6319 + } 179.6320 + 179.6321 + return attrs; 179.6322 +} 179.6323 + 179.6324 +function createTween( value, prop, animation ) { 179.6325 + var tween, 179.6326 + collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), 179.6327 + index = 0, 179.6328 + length = collection.length; 179.6329 + for ( ; index < length; index++ ) { 179.6330 + if ( (tween = collection[ index ].call( animation, prop, value )) ) { 179.6331 + 179.6332 + // we're done with this property 179.6333 + return tween; 179.6334 + } 179.6335 + } 179.6336 +} 179.6337 + 179.6338 +function defaultPrefilter( elem, props, opts ) { 179.6339 + /* jshint validthis: true */ 179.6340 + var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, 179.6341 + anim = this, 179.6342 + orig = {}, 179.6343 + style = elem.style, 179.6344 + hidden = elem.nodeType && isHidden( elem ), 179.6345 + dataShow = data_priv.get( elem, "fxshow" ); 179.6346 + 179.6347 + // handle queue: false promises 179.6348 + if ( !opts.queue ) { 179.6349 + hooks = jQuery._queueHooks( elem, "fx" ); 179.6350 + if ( hooks.unqueued == null ) { 179.6351 + hooks.unqueued = 0; 179.6352 + oldfire = hooks.empty.fire; 179.6353 + hooks.empty.fire = function() { 179.6354 + if ( !hooks.unqueued ) { 179.6355 + oldfire(); 179.6356 + } 179.6357 + }; 179.6358 + } 179.6359 + hooks.unqueued++; 179.6360 + 179.6361 + anim.always(function() { 179.6362 + // doing this makes sure that the complete handler will be called 179.6363 + // before this completes 179.6364 + anim.always(function() { 179.6365 + hooks.unqueued--; 179.6366 + if ( !jQuery.queue( elem, "fx" ).length ) { 179.6367 + hooks.empty.fire(); 179.6368 + } 179.6369 + }); 179.6370 + }); 179.6371 + } 179.6372 + 179.6373 + // height/width overflow pass 179.6374 + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { 179.6375 + // Make sure that nothing sneaks out 179.6376 + // Record all 3 overflow attributes because IE9-10 do not 179.6377 + // change the overflow attribute when overflowX and 179.6378 + // overflowY are set to the same value 179.6379 + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 179.6380 + 179.6381 + // Set display property to inline-block for height/width 179.6382 + // animations on inline elements that are having width/height animated 179.6383 + display = jQuery.css( elem, "display" ); 179.6384 + 179.6385 + // Test default display if display is currently "none" 179.6386 + checkDisplay = display === "none" ? 179.6387 + data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; 179.6388 + 179.6389 + if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { 179.6390 + style.display = "inline-block"; 179.6391 + } 179.6392 + } 179.6393 + 179.6394 + if ( opts.overflow ) { 179.6395 + style.overflow = "hidden"; 179.6396 + anim.always(function() { 179.6397 + style.overflow = opts.overflow[ 0 ]; 179.6398 + style.overflowX = opts.overflow[ 1 ]; 179.6399 + style.overflowY = opts.overflow[ 2 ]; 179.6400 + }); 179.6401 + } 179.6402 + 179.6403 + // show/hide pass 179.6404 + for ( prop in props ) { 179.6405 + value = props[ prop ]; 179.6406 + if ( rfxtypes.exec( value ) ) { 179.6407 + delete props[ prop ]; 179.6408 + toggle = toggle || value === "toggle"; 179.6409 + if ( value === ( hidden ? "hide" : "show" ) ) { 179.6410 + 179.6411 + // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden 179.6412 + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 179.6413 + hidden = true; 179.6414 + } else { 179.6415 + continue; 179.6416 + } 179.6417 + } 179.6418 + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 179.6419 + 179.6420 + // Any non-fx value stops us from restoring the original display value 179.6421 + } else { 179.6422 + display = undefined; 179.6423 + } 179.6424 + } 179.6425 + 179.6426 + if ( !jQuery.isEmptyObject( orig ) ) { 179.6427 + if ( dataShow ) { 179.6428 + if ( "hidden" in dataShow ) { 179.6429 + hidden = dataShow.hidden; 179.6430 + } 179.6431 + } else { 179.6432 + dataShow = data_priv.access( elem, "fxshow", {} ); 179.6433 + } 179.6434 + 179.6435 + // store state if its toggle - enables .stop().toggle() to "reverse" 179.6436 + if ( toggle ) { 179.6437 + dataShow.hidden = !hidden; 179.6438 + } 179.6439 + if ( hidden ) { 179.6440 + jQuery( elem ).show(); 179.6441 + } else { 179.6442 + anim.done(function() { 179.6443 + jQuery( elem ).hide(); 179.6444 + }); 179.6445 + } 179.6446 + anim.done(function() { 179.6447 + var prop; 179.6448 + 179.6449 + data_priv.remove( elem, "fxshow" ); 179.6450 + for ( prop in orig ) { 179.6451 + jQuery.style( elem, prop, orig[ prop ] ); 179.6452 + } 179.6453 + }); 179.6454 + for ( prop in orig ) { 179.6455 + tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 179.6456 + 179.6457 + if ( !( prop in dataShow ) ) { 179.6458 + dataShow[ prop ] = tween.start; 179.6459 + if ( hidden ) { 179.6460 + tween.end = tween.start; 179.6461 + tween.start = prop === "width" || prop === "height" ? 1 : 0; 179.6462 + } 179.6463 + } 179.6464 + } 179.6465 + 179.6466 + // If this is a noop like .hide().hide(), restore an overwritten display value 179.6467 + } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { 179.6468 + style.display = display; 179.6469 + } 179.6470 +} 179.6471 + 179.6472 +function propFilter( props, specialEasing ) { 179.6473 + var index, name, easing, value, hooks; 179.6474 + 179.6475 + // camelCase, specialEasing and expand cssHook pass 179.6476 + for ( index in props ) { 179.6477 + name = jQuery.camelCase( index ); 179.6478 + easing = specialEasing[ name ]; 179.6479 + value = props[ index ]; 179.6480 + if ( jQuery.isArray( value ) ) { 179.6481 + easing = value[ 1 ]; 179.6482 + value = props[ index ] = value[ 0 ]; 179.6483 + } 179.6484 + 179.6485 + if ( index !== name ) { 179.6486 + props[ name ] = value; 179.6487 + delete props[ index ]; 179.6488 + } 179.6489 + 179.6490 + hooks = jQuery.cssHooks[ name ]; 179.6491 + if ( hooks && "expand" in hooks ) { 179.6492 + value = hooks.expand( value ); 179.6493 + delete props[ name ]; 179.6494 + 179.6495 + // not quite $.extend, this wont overwrite keys already present. 179.6496 + // also - reusing 'index' from above because we have the correct "name" 179.6497 + for ( index in value ) { 179.6498 + if ( !( index in props ) ) { 179.6499 + props[ index ] = value[ index ]; 179.6500 + specialEasing[ index ] = easing; 179.6501 + } 179.6502 + } 179.6503 + } else { 179.6504 + specialEasing[ name ] = easing; 179.6505 + } 179.6506 + } 179.6507 +} 179.6508 + 179.6509 +function Animation( elem, properties, options ) { 179.6510 + var result, 179.6511 + stopped, 179.6512 + index = 0, 179.6513 + length = animationPrefilters.length, 179.6514 + deferred = jQuery.Deferred().always( function() { 179.6515 + // don't match elem in the :animated selector 179.6516 + delete tick.elem; 179.6517 + }), 179.6518 + tick = function() { 179.6519 + if ( stopped ) { 179.6520 + return false; 179.6521 + } 179.6522 + var currentTime = fxNow || createFxNow(), 179.6523 + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 179.6524 + // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) 179.6525 + temp = remaining / animation.duration || 0, 179.6526 + percent = 1 - temp, 179.6527 + index = 0, 179.6528 + length = animation.tweens.length; 179.6529 + 179.6530 + for ( ; index < length ; index++ ) { 179.6531 + animation.tweens[ index ].run( percent ); 179.6532 + } 179.6533 + 179.6534 + deferred.notifyWith( elem, [ animation, percent, remaining ]); 179.6535 + 179.6536 + if ( percent < 1 && length ) { 179.6537 + return remaining; 179.6538 + } else { 179.6539 + deferred.resolveWith( elem, [ animation ] ); 179.6540 + return false; 179.6541 + } 179.6542 + }, 179.6543 + animation = deferred.promise({ 179.6544 + elem: elem, 179.6545 + props: jQuery.extend( {}, properties ), 179.6546 + opts: jQuery.extend( true, { specialEasing: {} }, options ), 179.6547 + originalProperties: properties, 179.6548 + originalOptions: options, 179.6549 + startTime: fxNow || createFxNow(), 179.6550 + duration: options.duration, 179.6551 + tweens: [], 179.6552 + createTween: function( prop, end ) { 179.6553 + var tween = jQuery.Tween( elem, animation.opts, prop, end, 179.6554 + animation.opts.specialEasing[ prop ] || animation.opts.easing ); 179.6555 + animation.tweens.push( tween ); 179.6556 + return tween; 179.6557 + }, 179.6558 + stop: function( gotoEnd ) { 179.6559 + var index = 0, 179.6560 + // if we are going to the end, we want to run all the tweens 179.6561 + // otherwise we skip this part 179.6562 + length = gotoEnd ? animation.tweens.length : 0; 179.6563 + if ( stopped ) { 179.6564 + return this; 179.6565 + } 179.6566 + stopped = true; 179.6567 + for ( ; index < length ; index++ ) { 179.6568 + animation.tweens[ index ].run( 1 ); 179.6569 + } 179.6570 + 179.6571 + // resolve when we played the last frame 179.6572 + // otherwise, reject 179.6573 + if ( gotoEnd ) { 179.6574 + deferred.resolveWith( elem, [ animation, gotoEnd ] ); 179.6575 + } else { 179.6576 + deferred.rejectWith( elem, [ animation, gotoEnd ] ); 179.6577 + } 179.6578 + return this; 179.6579 + } 179.6580 + }), 179.6581 + props = animation.props; 179.6582 + 179.6583 + propFilter( props, animation.opts.specialEasing ); 179.6584 + 179.6585 + for ( ; index < length ; index++ ) { 179.6586 + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); 179.6587 + if ( result ) { 179.6588 + return result; 179.6589 + } 179.6590 + } 179.6591 + 179.6592 + jQuery.map( props, createTween, animation ); 179.6593 + 179.6594 + if ( jQuery.isFunction( animation.opts.start ) ) { 179.6595 + animation.opts.start.call( elem, animation ); 179.6596 + } 179.6597 + 179.6598 + jQuery.fx.timer( 179.6599 + jQuery.extend( tick, { 179.6600 + elem: elem, 179.6601 + anim: animation, 179.6602 + queue: animation.opts.queue 179.6603 + }) 179.6604 + ); 179.6605 + 179.6606 + // attach callbacks from options 179.6607 + return animation.progress( animation.opts.progress ) 179.6608 + .done( animation.opts.done, animation.opts.complete ) 179.6609 + .fail( animation.opts.fail ) 179.6610 + .always( animation.opts.always ); 179.6611 +} 179.6612 + 179.6613 +jQuery.Animation = jQuery.extend( Animation, { 179.6614 + 179.6615 + tweener: function( props, callback ) { 179.6616 + if ( jQuery.isFunction( props ) ) { 179.6617 + callback = props; 179.6618 + props = [ "*" ]; 179.6619 + } else { 179.6620 + props = props.split(" "); 179.6621 + } 179.6622 + 179.6623 + var prop, 179.6624 + index = 0, 179.6625 + length = props.length; 179.6626 + 179.6627 + for ( ; index < length ; index++ ) { 179.6628 + prop = props[ index ]; 179.6629 + tweeners[ prop ] = tweeners[ prop ] || []; 179.6630 + tweeners[ prop ].unshift( callback ); 179.6631 + } 179.6632 + }, 179.6633 + 179.6634 + prefilter: function( callback, prepend ) { 179.6635 + if ( prepend ) { 179.6636 + animationPrefilters.unshift( callback ); 179.6637 + } else { 179.6638 + animationPrefilters.push( callback ); 179.6639 + } 179.6640 + } 179.6641 +}); 179.6642 + 179.6643 +jQuery.speed = function( speed, easing, fn ) { 179.6644 + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 179.6645 + complete: fn || !fn && easing || 179.6646 + jQuery.isFunction( speed ) && speed, 179.6647 + duration: speed, 179.6648 + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing 179.6649 + }; 179.6650 + 179.6651 + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : 179.6652 + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; 179.6653 + 179.6654 + // normalize opt.queue - true/undefined/null -> "fx" 179.6655 + if ( opt.queue == null || opt.queue === true ) { 179.6656 + opt.queue = "fx"; 179.6657 + } 179.6658 + 179.6659 + // Queueing 179.6660 + opt.old = opt.complete; 179.6661 + 179.6662 + opt.complete = function() { 179.6663 + if ( jQuery.isFunction( opt.old ) ) { 179.6664 + opt.old.call( this ); 179.6665 + } 179.6666 + 179.6667 + if ( opt.queue ) { 179.6668 + jQuery.dequeue( this, opt.queue ); 179.6669 + } 179.6670 + }; 179.6671 + 179.6672 + return opt; 179.6673 +}; 179.6674 + 179.6675 +jQuery.fn.extend({ 179.6676 + fadeTo: function( speed, to, easing, callback ) { 179.6677 + 179.6678 + // show any hidden elements after setting opacity to 0 179.6679 + return this.filter( isHidden ).css( "opacity", 0 ).show() 179.6680 + 179.6681 + // animate to the value specified 179.6682 + .end().animate({ opacity: to }, speed, easing, callback ); 179.6683 + }, 179.6684 + animate: function( prop, speed, easing, callback ) { 179.6685 + var empty = jQuery.isEmptyObject( prop ), 179.6686 + optall = jQuery.speed( speed, easing, callback ), 179.6687 + doAnimation = function() { 179.6688 + // Operate on a copy of prop so per-property easing won't be lost 179.6689 + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 179.6690 + 179.6691 + // Empty animations, or finishing resolves immediately 179.6692 + if ( empty || data_priv.get( this, "finish" ) ) { 179.6693 + anim.stop( true ); 179.6694 + } 179.6695 + }; 179.6696 + doAnimation.finish = doAnimation; 179.6697 + 179.6698 + return empty || optall.queue === false ? 179.6699 + this.each( doAnimation ) : 179.6700 + this.queue( optall.queue, doAnimation ); 179.6701 + }, 179.6702 + stop: function( type, clearQueue, gotoEnd ) { 179.6703 + var stopQueue = function( hooks ) { 179.6704 + var stop = hooks.stop; 179.6705 + delete hooks.stop; 179.6706 + stop( gotoEnd ); 179.6707 + }; 179.6708 + 179.6709 + if ( typeof type !== "string" ) { 179.6710 + gotoEnd = clearQueue; 179.6711 + clearQueue = type; 179.6712 + type = undefined; 179.6713 + } 179.6714 + if ( clearQueue && type !== false ) { 179.6715 + this.queue( type || "fx", [] ); 179.6716 + } 179.6717 + 179.6718 + return this.each(function() { 179.6719 + var dequeue = true, 179.6720 + index = type != null && type + "queueHooks", 179.6721 + timers = jQuery.timers, 179.6722 + data = data_priv.get( this ); 179.6723 + 179.6724 + if ( index ) { 179.6725 + if ( data[ index ] && data[ index ].stop ) { 179.6726 + stopQueue( data[ index ] ); 179.6727 + } 179.6728 + } else { 179.6729 + for ( index in data ) { 179.6730 + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 179.6731 + stopQueue( data[ index ] ); 179.6732 + } 179.6733 + } 179.6734 + } 179.6735 + 179.6736 + for ( index = timers.length; index--; ) { 179.6737 + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { 179.6738 + timers[ index ].anim.stop( gotoEnd ); 179.6739 + dequeue = false; 179.6740 + timers.splice( index, 1 ); 179.6741 + } 179.6742 + } 179.6743 + 179.6744 + // start the next in the queue if the last step wasn't forced 179.6745 + // timers currently will call their complete callbacks, which will dequeue 179.6746 + // but only if they were gotoEnd 179.6747 + if ( dequeue || !gotoEnd ) { 179.6748 + jQuery.dequeue( this, type ); 179.6749 + } 179.6750 + }); 179.6751 + }, 179.6752 + finish: function( type ) { 179.6753 + if ( type !== false ) { 179.6754 + type = type || "fx"; 179.6755 + } 179.6756 + return this.each(function() { 179.6757 + var index, 179.6758 + data = data_priv.get( this ), 179.6759 + queue = data[ type + "queue" ], 179.6760 + hooks = data[ type + "queueHooks" ], 179.6761 + timers = jQuery.timers, 179.6762 + length = queue ? queue.length : 0; 179.6763 + 179.6764 + // enable finishing flag on private data 179.6765 + data.finish = true; 179.6766 + 179.6767 + // empty the queue first 179.6768 + jQuery.queue( this, type, [] ); 179.6769 + 179.6770 + if ( hooks && hooks.stop ) { 179.6771 + hooks.stop.call( this, true ); 179.6772 + } 179.6773 + 179.6774 + // look for any active animations, and finish them 179.6775 + for ( index = timers.length; index--; ) { 179.6776 + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 179.6777 + timers[ index ].anim.stop( true ); 179.6778 + timers.splice( index, 1 ); 179.6779 + } 179.6780 + } 179.6781 + 179.6782 + // look for any animations in the old queue and finish them 179.6783 + for ( index = 0; index < length; index++ ) { 179.6784 + if ( queue[ index ] && queue[ index ].finish ) { 179.6785 + queue[ index ].finish.call( this ); 179.6786 + } 179.6787 + } 179.6788 + 179.6789 + // turn off finishing flag 179.6790 + delete data.finish; 179.6791 + }); 179.6792 + } 179.6793 +}); 179.6794 + 179.6795 +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { 179.6796 + var cssFn = jQuery.fn[ name ]; 179.6797 + jQuery.fn[ name ] = function( speed, easing, callback ) { 179.6798 + return speed == null || typeof speed === "boolean" ? 179.6799 + cssFn.apply( this, arguments ) : 179.6800 + this.animate( genFx( name, true ), speed, easing, callback ); 179.6801 + }; 179.6802 +}); 179.6803 + 179.6804 +// Generate shortcuts for custom animations 179.6805 +jQuery.each({ 179.6806 + slideDown: genFx("show"), 179.6807 + slideUp: genFx("hide"), 179.6808 + slideToggle: genFx("toggle"), 179.6809 + fadeIn: { opacity: "show" }, 179.6810 + fadeOut: { opacity: "hide" }, 179.6811 + fadeToggle: { opacity: "toggle" } 179.6812 +}, function( name, props ) { 179.6813 + jQuery.fn[ name ] = function( speed, easing, callback ) { 179.6814 + return this.animate( props, speed, easing, callback ); 179.6815 + }; 179.6816 +}); 179.6817 + 179.6818 +jQuery.timers = []; 179.6819 +jQuery.fx.tick = function() { 179.6820 + var timer, 179.6821 + i = 0, 179.6822 + timers = jQuery.timers; 179.6823 + 179.6824 + fxNow = jQuery.now(); 179.6825 + 179.6826 + for ( ; i < timers.length; i++ ) { 179.6827 + timer = timers[ i ]; 179.6828 + // Checks the timer has not already been removed 179.6829 + if ( !timer() && timers[ i ] === timer ) { 179.6830 + timers.splice( i--, 1 ); 179.6831 + } 179.6832 + } 179.6833 + 179.6834 + if ( !timers.length ) { 179.6835 + jQuery.fx.stop(); 179.6836 + } 179.6837 + fxNow = undefined; 179.6838 +}; 179.6839 + 179.6840 +jQuery.fx.timer = function( timer ) { 179.6841 + jQuery.timers.push( timer ); 179.6842 + if ( timer() ) { 179.6843 + jQuery.fx.start(); 179.6844 + } else { 179.6845 + jQuery.timers.pop(); 179.6846 + } 179.6847 +}; 179.6848 + 179.6849 +jQuery.fx.interval = 13; 179.6850 + 179.6851 +jQuery.fx.start = function() { 179.6852 + if ( !timerId ) { 179.6853 + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); 179.6854 + } 179.6855 +}; 179.6856 + 179.6857 +jQuery.fx.stop = function() { 179.6858 + clearInterval( timerId ); 179.6859 + timerId = null; 179.6860 +}; 179.6861 + 179.6862 +jQuery.fx.speeds = { 179.6863 + slow: 600, 179.6864 + fast: 200, 179.6865 + // Default speed 179.6866 + _default: 400 179.6867 +}; 179.6868 + 179.6869 + 179.6870 +// Based off of the plugin by Clint Helfers, with permission. 179.6871 +// http://blindsignals.com/index.php/2009/07/jquery-delay/ 179.6872 +jQuery.fn.delay = function( time, type ) { 179.6873 + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 179.6874 + type = type || "fx"; 179.6875 + 179.6876 + return this.queue( type, function( next, hooks ) { 179.6877 + var timeout = setTimeout( next, time ); 179.6878 + hooks.stop = function() { 179.6879 + clearTimeout( timeout ); 179.6880 + }; 179.6881 + }); 179.6882 +}; 179.6883 + 179.6884 + 179.6885 +(function() { 179.6886 + var input = document.createElement( "input" ), 179.6887 + select = document.createElement( "select" ), 179.6888 + opt = select.appendChild( document.createElement( "option" ) ); 179.6889 + 179.6890 + input.type = "checkbox"; 179.6891 + 179.6892 + // Support: iOS 5.1, Android 4.x, Android 2.3 179.6893 + // Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere) 179.6894 + support.checkOn = input.value !== ""; 179.6895 + 179.6896 + // Must access the parent to make an option select properly 179.6897 + // Support: IE9, IE10 179.6898 + support.optSelected = opt.selected; 179.6899 + 179.6900 + // Make sure that the options inside disabled selects aren't marked as disabled 179.6901 + // (WebKit marks them as disabled) 179.6902 + select.disabled = true; 179.6903 + support.optDisabled = !opt.disabled; 179.6904 + 179.6905 + // Check if an input maintains its value after becoming a radio 179.6906 + // Support: IE9, IE10 179.6907 + input = document.createElement( "input" ); 179.6908 + input.value = "t"; 179.6909 + input.type = "radio"; 179.6910 + support.radioValue = input.value === "t"; 179.6911 +})(); 179.6912 + 179.6913 + 179.6914 +var nodeHook, boolHook, 179.6915 + attrHandle = jQuery.expr.attrHandle; 179.6916 + 179.6917 +jQuery.fn.extend({ 179.6918 + attr: function( name, value ) { 179.6919 + return access( this, jQuery.attr, name, value, arguments.length > 1 ); 179.6920 + }, 179.6921 + 179.6922 + removeAttr: function( name ) { 179.6923 + return this.each(function() { 179.6924 + jQuery.removeAttr( this, name ); 179.6925 + }); 179.6926 + } 179.6927 +}); 179.6928 + 179.6929 +jQuery.extend({ 179.6930 + attr: function( elem, name, value ) { 179.6931 + var hooks, ret, 179.6932 + nType = elem.nodeType; 179.6933 + 179.6934 + // don't get/set attributes on text, comment and attribute nodes 179.6935 + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 179.6936 + return; 179.6937 + } 179.6938 + 179.6939 + // Fallback to prop when attributes are not supported 179.6940 + if ( typeof elem.getAttribute === strundefined ) { 179.6941 + return jQuery.prop( elem, name, value ); 179.6942 + } 179.6943 + 179.6944 + // All attributes are lowercase 179.6945 + // Grab necessary hook if one is defined 179.6946 + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 179.6947 + name = name.toLowerCase(); 179.6948 + hooks = jQuery.attrHooks[ name ] || 179.6949 + ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); 179.6950 + } 179.6951 + 179.6952 + if ( value !== undefined ) { 179.6953 + 179.6954 + if ( value === null ) { 179.6955 + jQuery.removeAttr( elem, name ); 179.6956 + 179.6957 + } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { 179.6958 + return ret; 179.6959 + 179.6960 + } else { 179.6961 + elem.setAttribute( name, value + "" ); 179.6962 + return value; 179.6963 + } 179.6964 + 179.6965 + } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { 179.6966 + return ret; 179.6967 + 179.6968 + } else { 179.6969 + ret = jQuery.find.attr( elem, name ); 179.6970 + 179.6971 + // Non-existent attributes return null, we normalize to undefined 179.6972 + return ret == null ? 179.6973 + undefined : 179.6974 + ret; 179.6975 + } 179.6976 + }, 179.6977 + 179.6978 + removeAttr: function( elem, value ) { 179.6979 + var name, propName, 179.6980 + i = 0, 179.6981 + attrNames = value && value.match( rnotwhite ); 179.6982 + 179.6983 + if ( attrNames && elem.nodeType === 1 ) { 179.6984 + while ( (name = attrNames[i++]) ) { 179.6985 + propName = jQuery.propFix[ name ] || name; 179.6986 + 179.6987 + // Boolean attributes get special treatment (#10870) 179.6988 + if ( jQuery.expr.match.bool.test( name ) ) { 179.6989 + // Set corresponding property to false 179.6990 + elem[ propName ] = false; 179.6991 + } 179.6992 + 179.6993 + elem.removeAttribute( name ); 179.6994 + } 179.6995 + } 179.6996 + }, 179.6997 + 179.6998 + attrHooks: { 179.6999 + type: { 179.7000 + set: function( elem, value ) { 179.7001 + if ( !support.radioValue && value === "radio" && 179.7002 + jQuery.nodeName( elem, "input" ) ) { 179.7003 + // Setting the type on a radio button after the value resets the value in IE6-9 179.7004 + // Reset value to default in case type is set after value during creation 179.7005 + var val = elem.value; 179.7006 + elem.setAttribute( "type", value ); 179.7007 + if ( val ) { 179.7008 + elem.value = val; 179.7009 + } 179.7010 + return value; 179.7011 + } 179.7012 + } 179.7013 + } 179.7014 + } 179.7015 +}); 179.7016 + 179.7017 +// Hooks for boolean attributes 179.7018 +boolHook = { 179.7019 + set: function( elem, value, name ) { 179.7020 + if ( value === false ) { 179.7021 + // Remove boolean attributes when set to false 179.7022 + jQuery.removeAttr( elem, name ); 179.7023 + } else { 179.7024 + elem.setAttribute( name, name ); 179.7025 + } 179.7026 + return name; 179.7027 + } 179.7028 +}; 179.7029 +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { 179.7030 + var getter = attrHandle[ name ] || jQuery.find.attr; 179.7031 + 179.7032 + attrHandle[ name ] = function( elem, name, isXML ) { 179.7033 + var ret, handle; 179.7034 + if ( !isXML ) { 179.7035 + // Avoid an infinite loop by temporarily removing this function from the getter 179.7036 + handle = attrHandle[ name ]; 179.7037 + attrHandle[ name ] = ret; 179.7038 + ret = getter( elem, name, isXML ) != null ? 179.7039 + name.toLowerCase() : 179.7040 + null; 179.7041 + attrHandle[ name ] = handle; 179.7042 + } 179.7043 + return ret; 179.7044 + }; 179.7045 +}); 179.7046 + 179.7047 + 179.7048 + 179.7049 + 179.7050 +var rfocusable = /^(?:input|select|textarea|button)$/i; 179.7051 + 179.7052 +jQuery.fn.extend({ 179.7053 + prop: function( name, value ) { 179.7054 + return access( this, jQuery.prop, name, value, arguments.length > 1 ); 179.7055 + }, 179.7056 + 179.7057 + removeProp: function( name ) { 179.7058 + return this.each(function() { 179.7059 + delete this[ jQuery.propFix[ name ] || name ]; 179.7060 + }); 179.7061 + } 179.7062 +}); 179.7063 + 179.7064 +jQuery.extend({ 179.7065 + propFix: { 179.7066 + "for": "htmlFor", 179.7067 + "class": "className" 179.7068 + }, 179.7069 + 179.7070 + prop: function( elem, name, value ) { 179.7071 + var ret, hooks, notxml, 179.7072 + nType = elem.nodeType; 179.7073 + 179.7074 + // don't get/set properties on text, comment and attribute nodes 179.7075 + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 179.7076 + return; 179.7077 + } 179.7078 + 179.7079 + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); 179.7080 + 179.7081 + if ( notxml ) { 179.7082 + // Fix name and attach hooks 179.7083 + name = jQuery.propFix[ name ] || name; 179.7084 + hooks = jQuery.propHooks[ name ]; 179.7085 + } 179.7086 + 179.7087 + if ( value !== undefined ) { 179.7088 + return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? 179.7089 + ret : 179.7090 + ( elem[ name ] = value ); 179.7091 + 179.7092 + } else { 179.7093 + return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? 179.7094 + ret : 179.7095 + elem[ name ]; 179.7096 + } 179.7097 + }, 179.7098 + 179.7099 + propHooks: { 179.7100 + tabIndex: { 179.7101 + get: function( elem ) { 179.7102 + return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? 179.7103 + elem.tabIndex : 179.7104 + -1; 179.7105 + } 179.7106 + } 179.7107 + } 179.7108 +}); 179.7109 + 179.7110 +// Support: IE9+ 179.7111 +// Selectedness for an option in an optgroup can be inaccurate 179.7112 +if ( !support.optSelected ) { 179.7113 + jQuery.propHooks.selected = { 179.7114 + get: function( elem ) { 179.7115 + var parent = elem.parentNode; 179.7116 + if ( parent && parent.parentNode ) { 179.7117 + parent.parentNode.selectedIndex; 179.7118 + } 179.7119 + return null; 179.7120 + } 179.7121 + }; 179.7122 +} 179.7123 + 179.7124 +jQuery.each([ 179.7125 + "tabIndex", 179.7126 + "readOnly", 179.7127 + "maxLength", 179.7128 + "cellSpacing", 179.7129 + "cellPadding", 179.7130 + "rowSpan", 179.7131 + "colSpan", 179.7132 + "useMap", 179.7133 + "frameBorder", 179.7134 + "contentEditable" 179.7135 +], function() { 179.7136 + jQuery.propFix[ this.toLowerCase() ] = this; 179.7137 +}); 179.7138 + 179.7139 + 179.7140 + 179.7141 + 179.7142 +var rclass = /[\t\r\n\f]/g; 179.7143 + 179.7144 +jQuery.fn.extend({ 179.7145 + addClass: function( value ) { 179.7146 + var classes, elem, cur, clazz, j, finalValue, 179.7147 + proceed = typeof value === "string" && value, 179.7148 + i = 0, 179.7149 + len = this.length; 179.7150 + 179.7151 + if ( jQuery.isFunction( value ) ) { 179.7152 + return this.each(function( j ) { 179.7153 + jQuery( this ).addClass( value.call( this, j, this.className ) ); 179.7154 + }); 179.7155 + } 179.7156 + 179.7157 + if ( proceed ) { 179.7158 + // The disjunction here is for better compressibility (see removeClass) 179.7159 + classes = ( value || "" ).match( rnotwhite ) || []; 179.7160 + 179.7161 + for ( ; i < len; i++ ) { 179.7162 + elem = this[ i ]; 179.7163 + cur = elem.nodeType === 1 && ( elem.className ? 179.7164 + ( " " + elem.className + " " ).replace( rclass, " " ) : 179.7165 + " " 179.7166 + ); 179.7167 + 179.7168 + if ( cur ) { 179.7169 + j = 0; 179.7170 + while ( (clazz = classes[j++]) ) { 179.7171 + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { 179.7172 + cur += clazz + " "; 179.7173 + } 179.7174 + } 179.7175 + 179.7176 + // only assign if different to avoid unneeded rendering. 179.7177 + finalValue = jQuery.trim( cur ); 179.7178 + if ( elem.className !== finalValue ) { 179.7179 + elem.className = finalValue; 179.7180 + } 179.7181 + } 179.7182 + } 179.7183 + } 179.7184 + 179.7185 + return this; 179.7186 + }, 179.7187 + 179.7188 + removeClass: function( value ) { 179.7189 + var classes, elem, cur, clazz, j, finalValue, 179.7190 + proceed = arguments.length === 0 || typeof value === "string" && value, 179.7191 + i = 0, 179.7192 + len = this.length; 179.7193 + 179.7194 + if ( jQuery.isFunction( value ) ) { 179.7195 + return this.each(function( j ) { 179.7196 + jQuery( this ).removeClass( value.call( this, j, this.className ) ); 179.7197 + }); 179.7198 + } 179.7199 + if ( proceed ) { 179.7200 + classes = ( value || "" ).match( rnotwhite ) || []; 179.7201 + 179.7202 + for ( ; i < len; i++ ) { 179.7203 + elem = this[ i ]; 179.7204 + // This expression is here for better compressibility (see addClass) 179.7205 + cur = elem.nodeType === 1 && ( elem.className ? 179.7206 + ( " " + elem.className + " " ).replace( rclass, " " ) : 179.7207 + "" 179.7208 + ); 179.7209 + 179.7210 + if ( cur ) { 179.7211 + j = 0; 179.7212 + while ( (clazz = classes[j++]) ) { 179.7213 + // Remove *all* instances 179.7214 + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { 179.7215 + cur = cur.replace( " " + clazz + " ", " " ); 179.7216 + } 179.7217 + } 179.7218 + 179.7219 + // only assign if different to avoid unneeded rendering. 179.7220 + finalValue = value ? jQuery.trim( cur ) : ""; 179.7221 + if ( elem.className !== finalValue ) { 179.7222 + elem.className = finalValue; 179.7223 + } 179.7224 + } 179.7225 + } 179.7226 + } 179.7227 + 179.7228 + return this; 179.7229 + }, 179.7230 + 179.7231 + toggleClass: function( value, stateVal ) { 179.7232 + var type = typeof value; 179.7233 + 179.7234 + if ( typeof stateVal === "boolean" && type === "string" ) { 179.7235 + return stateVal ? this.addClass( value ) : this.removeClass( value ); 179.7236 + } 179.7237 + 179.7238 + if ( jQuery.isFunction( value ) ) { 179.7239 + return this.each(function( i ) { 179.7240 + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); 179.7241 + }); 179.7242 + } 179.7243 + 179.7244 + return this.each(function() { 179.7245 + if ( type === "string" ) { 179.7246 + // toggle individual class names 179.7247 + var className, 179.7248 + i = 0, 179.7249 + self = jQuery( this ), 179.7250 + classNames = value.match( rnotwhite ) || []; 179.7251 + 179.7252 + while ( (className = classNames[ i++ ]) ) { 179.7253 + // check each className given, space separated list 179.7254 + if ( self.hasClass( className ) ) { 179.7255 + self.removeClass( className ); 179.7256 + } else { 179.7257 + self.addClass( className ); 179.7258 + } 179.7259 + } 179.7260 + 179.7261 + // Toggle whole class name 179.7262 + } else if ( type === strundefined || type === "boolean" ) { 179.7263 + if ( this.className ) { 179.7264 + // store className if set 179.7265 + data_priv.set( this, "__className__", this.className ); 179.7266 + } 179.7267 + 179.7268 + // If the element has a class name or if we're passed "false", 179.7269 + // then remove the whole classname (if there was one, the above saved it). 179.7270 + // Otherwise bring back whatever was previously saved (if anything), 179.7271 + // falling back to the empty string if nothing was stored. 179.7272 + this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || ""; 179.7273 + } 179.7274 + }); 179.7275 + }, 179.7276 + 179.7277 + hasClass: function( selector ) { 179.7278 + var className = " " + selector + " ", 179.7279 + i = 0, 179.7280 + l = this.length; 179.7281 + for ( ; i < l; i++ ) { 179.7282 + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { 179.7283 + return true; 179.7284 + } 179.7285 + } 179.7286 + 179.7287 + return false; 179.7288 + } 179.7289 +}); 179.7290 + 179.7291 + 179.7292 + 179.7293 + 179.7294 +var rreturn = /\r/g; 179.7295 + 179.7296 +jQuery.fn.extend({ 179.7297 + val: function( value ) { 179.7298 + var hooks, ret, isFunction, 179.7299 + elem = this[0]; 179.7300 + 179.7301 + if ( !arguments.length ) { 179.7302 + if ( elem ) { 179.7303 + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 179.7304 + 179.7305 + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { 179.7306 + return ret; 179.7307 + } 179.7308 + 179.7309 + ret = elem.value; 179.7310 + 179.7311 + return typeof ret === "string" ? 179.7312 + // handle most common string cases 179.7313 + ret.replace(rreturn, "") : 179.7314 + // handle cases where value is null/undef or number 179.7315 + ret == null ? "" : ret; 179.7316 + } 179.7317 + 179.7318 + return; 179.7319 + } 179.7320 + 179.7321 + isFunction = jQuery.isFunction( value ); 179.7322 + 179.7323 + return this.each(function( i ) { 179.7324 + var val; 179.7325 + 179.7326 + if ( this.nodeType !== 1 ) { 179.7327 + return; 179.7328 + } 179.7329 + 179.7330 + if ( isFunction ) { 179.7331 + val = value.call( this, i, jQuery( this ).val() ); 179.7332 + } else { 179.7333 + val = value; 179.7334 + } 179.7335 + 179.7336 + // Treat null/undefined as ""; convert numbers to string 179.7337 + if ( val == null ) { 179.7338 + val = ""; 179.7339 + 179.7340 + } else if ( typeof val === "number" ) { 179.7341 + val += ""; 179.7342 + 179.7343 + } else if ( jQuery.isArray( val ) ) { 179.7344 + val = jQuery.map( val, function( value ) { 179.7345 + return value == null ? "" : value + ""; 179.7346 + }); 179.7347 + } 179.7348 + 179.7349 + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 179.7350 + 179.7351 + // If set returns undefined, fall back to normal setting 179.7352 + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { 179.7353 + this.value = val; 179.7354 + } 179.7355 + }); 179.7356 + } 179.7357 +}); 179.7358 + 179.7359 +jQuery.extend({ 179.7360 + valHooks: { 179.7361 + option: { 179.7362 + get: function( elem ) { 179.7363 + var val = jQuery.find.attr( elem, "value" ); 179.7364 + return val != null ? 179.7365 + val : 179.7366 + // Support: IE10-11+ 179.7367 + // option.text throws exceptions (#14686, #14858) 179.7368 + jQuery.trim( jQuery.text( elem ) ); 179.7369 + } 179.7370 + }, 179.7371 + select: { 179.7372 + get: function( elem ) { 179.7373 + var value, option, 179.7374 + options = elem.options, 179.7375 + index = elem.selectedIndex, 179.7376 + one = elem.type === "select-one" || index < 0, 179.7377 + values = one ? null : [], 179.7378 + max = one ? index + 1 : options.length, 179.7379 + i = index < 0 ? 179.7380 + max : 179.7381 + one ? index : 0; 179.7382 + 179.7383 + // Loop through all the selected options 179.7384 + for ( ; i < max; i++ ) { 179.7385 + option = options[ i ]; 179.7386 + 179.7387 + // IE6-9 doesn't update selected after form reset (#2551) 179.7388 + if ( ( option.selected || i === index ) && 179.7389 + // Don't return options that are disabled or in a disabled optgroup 179.7390 + ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && 179.7391 + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { 179.7392 + 179.7393 + // Get the specific value for the option 179.7394 + value = jQuery( option ).val(); 179.7395 + 179.7396 + // We don't need an array for one selects 179.7397 + if ( one ) { 179.7398 + return value; 179.7399 + } 179.7400 + 179.7401 + // Multi-Selects return an array 179.7402 + values.push( value ); 179.7403 + } 179.7404 + } 179.7405 + 179.7406 + return values; 179.7407 + }, 179.7408 + 179.7409 + set: function( elem, value ) { 179.7410 + var optionSet, option, 179.7411 + options = elem.options, 179.7412 + values = jQuery.makeArray( value ), 179.7413 + i = options.length; 179.7414 + 179.7415 + while ( i-- ) { 179.7416 + option = options[ i ]; 179.7417 + if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { 179.7418 + optionSet = true; 179.7419 + } 179.7420 + } 179.7421 + 179.7422 + // force browsers to behave consistently when non-matching value is set 179.7423 + if ( !optionSet ) { 179.7424 + elem.selectedIndex = -1; 179.7425 + } 179.7426 + return values; 179.7427 + } 179.7428 + } 179.7429 + } 179.7430 +}); 179.7431 + 179.7432 +// Radios and checkboxes getter/setter 179.7433 +jQuery.each([ "radio", "checkbox" ], function() { 179.7434 + jQuery.valHooks[ this ] = { 179.7435 + set: function( elem, value ) { 179.7436 + if ( jQuery.isArray( value ) ) { 179.7437 + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); 179.7438 + } 179.7439 + } 179.7440 + }; 179.7441 + if ( !support.checkOn ) { 179.7442 + jQuery.valHooks[ this ].get = function( elem ) { 179.7443 + // Support: Webkit 179.7444 + // "" is returned instead of "on" if a value isn't specified 179.7445 + return elem.getAttribute("value") === null ? "on" : elem.value; 179.7446 + }; 179.7447 + } 179.7448 +}); 179.7449 + 179.7450 + 179.7451 + 179.7452 + 179.7453 +// Return jQuery for attributes-only inclusion 179.7454 + 179.7455 + 179.7456 +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + 179.7457 + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 179.7458 + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { 179.7459 + 179.7460 + // Handle event binding 179.7461 + jQuery.fn[ name ] = function( data, fn ) { 179.7462 + return arguments.length > 0 ? 179.7463 + this.on( name, null, data, fn ) : 179.7464 + this.trigger( name ); 179.7465 + }; 179.7466 +}); 179.7467 + 179.7468 +jQuery.fn.extend({ 179.7469 + hover: function( fnOver, fnOut ) { 179.7470 + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 179.7471 + }, 179.7472 + 179.7473 + bind: function( types, data, fn ) { 179.7474 + return this.on( types, null, data, fn ); 179.7475 + }, 179.7476 + unbind: function( types, fn ) { 179.7477 + return this.off( types, null, fn ); 179.7478 + }, 179.7479 + 179.7480 + delegate: function( selector, types, data, fn ) { 179.7481 + return this.on( types, selector, data, fn ); 179.7482 + }, 179.7483 + undelegate: function( selector, types, fn ) { 179.7484 + // ( namespace ) or ( selector, types [, fn] ) 179.7485 + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); 179.7486 + } 179.7487 +}); 179.7488 + 179.7489 + 179.7490 +var nonce = jQuery.now(); 179.7491 + 179.7492 +var rquery = (/\?/); 179.7493 + 179.7494 + 179.7495 + 179.7496 +// Support: Android 2.3 179.7497 +// Workaround failure to string-cast null input 179.7498 +jQuery.parseJSON = function( data ) { 179.7499 + return JSON.parse( data + "" ); 179.7500 +}; 179.7501 + 179.7502 + 179.7503 +// Cross-browser xml parsing 179.7504 +jQuery.parseXML = function( data ) { 179.7505 + var xml, tmp; 179.7506 + if ( !data || typeof data !== "string" ) { 179.7507 + return null; 179.7508 + } 179.7509 + 179.7510 + // Support: IE9 179.7511 + try { 179.7512 + tmp = new DOMParser(); 179.7513 + xml = tmp.parseFromString( data, "text/xml" ); 179.7514 + } catch ( e ) { 179.7515 + xml = undefined; 179.7516 + } 179.7517 + 179.7518 + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 179.7519 + jQuery.error( "Invalid XML: " + data ); 179.7520 + } 179.7521 + return xml; 179.7522 +}; 179.7523 + 179.7524 + 179.7525 +var 179.7526 + // Document location 179.7527 + ajaxLocParts, 179.7528 + ajaxLocation, 179.7529 + 179.7530 + rhash = /#.*$/, 179.7531 + rts = /([?&])_=[^&]*/, 179.7532 + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 179.7533 + // #7653, #8125, #8152: local protocol detection 179.7534 + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 179.7535 + rnoContent = /^(?:GET|HEAD)$/, 179.7536 + rprotocol = /^\/\//, 179.7537 + rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, 179.7538 + 179.7539 + /* Prefilters 179.7540 + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 179.7541 + * 2) These are called: 179.7542 + * - BEFORE asking for a transport 179.7543 + * - AFTER param serialization (s.data is a string if s.processData is true) 179.7544 + * 3) key is the dataType 179.7545 + * 4) the catchall symbol "*" can be used 179.7546 + * 5) execution will start with transport dataType and THEN continue down to "*" if needed 179.7547 + */ 179.7548 + prefilters = {}, 179.7549 + 179.7550 + /* Transports bindings 179.7551 + * 1) key is the dataType 179.7552 + * 2) the catchall symbol "*" can be used 179.7553 + * 3) selection will start with transport dataType and THEN go to "*" if needed 179.7554 + */ 179.7555 + transports = {}, 179.7556 + 179.7557 + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 179.7558 + allTypes = "*/".concat("*"); 179.7559 + 179.7560 +// #8138, IE may throw an exception when accessing 179.7561 +// a field from window.location if document.domain has been set 179.7562 +try { 179.7563 + ajaxLocation = location.href; 179.7564 +} catch( e ) { 179.7565 + // Use the href attribute of an A element 179.7566 + // since IE will modify it given document.location 179.7567 + ajaxLocation = document.createElement( "a" ); 179.7568 + ajaxLocation.href = ""; 179.7569 + ajaxLocation = ajaxLocation.href; 179.7570 +} 179.7571 + 179.7572 +// Segment location into parts 179.7573 +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; 179.7574 + 179.7575 +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 179.7576 +function addToPrefiltersOrTransports( structure ) { 179.7577 + 179.7578 + // dataTypeExpression is optional and defaults to "*" 179.7579 + return function( dataTypeExpression, func ) { 179.7580 + 179.7581 + if ( typeof dataTypeExpression !== "string" ) { 179.7582 + func = dataTypeExpression; 179.7583 + dataTypeExpression = "*"; 179.7584 + } 179.7585 + 179.7586 + var dataType, 179.7587 + i = 0, 179.7588 + dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; 179.7589 + 179.7590 + if ( jQuery.isFunction( func ) ) { 179.7591 + // For each dataType in the dataTypeExpression 179.7592 + while ( (dataType = dataTypes[i++]) ) { 179.7593 + // Prepend if requested 179.7594 + if ( dataType[0] === "+" ) { 179.7595 + dataType = dataType.slice( 1 ) || "*"; 179.7596 + (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); 179.7597 + 179.7598 + // Otherwise append 179.7599 + } else { 179.7600 + (structure[ dataType ] = structure[ dataType ] || []).push( func ); 179.7601 + } 179.7602 + } 179.7603 + } 179.7604 + }; 179.7605 +} 179.7606 + 179.7607 +// Base inspection function for prefilters and transports 179.7608 +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 179.7609 + 179.7610 + var inspected = {}, 179.7611 + seekingTransport = ( structure === transports ); 179.7612 + 179.7613 + function inspect( dataType ) { 179.7614 + var selected; 179.7615 + inspected[ dataType ] = true; 179.7616 + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 179.7617 + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 179.7618 + if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 179.7619 + options.dataTypes.unshift( dataTypeOrTransport ); 179.7620 + inspect( dataTypeOrTransport ); 179.7621 + return false; 179.7622 + } else if ( seekingTransport ) { 179.7623 + return !( selected = dataTypeOrTransport ); 179.7624 + } 179.7625 + }); 179.7626 + return selected; 179.7627 + } 179.7628 + 179.7629 + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 179.7630 +} 179.7631 + 179.7632 +// A special extend for ajax options 179.7633 +// that takes "flat" options (not to be deep extended) 179.7634 +// Fixes #9887 179.7635 +function ajaxExtend( target, src ) { 179.7636 + var key, deep, 179.7637 + flatOptions = jQuery.ajaxSettings.flatOptions || {}; 179.7638 + 179.7639 + for ( key in src ) { 179.7640 + if ( src[ key ] !== undefined ) { 179.7641 + ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; 179.7642 + } 179.7643 + } 179.7644 + if ( deep ) { 179.7645 + jQuery.extend( true, target, deep ); 179.7646 + } 179.7647 + 179.7648 + return target; 179.7649 +} 179.7650 + 179.7651 +/* Handles responses to an ajax request: 179.7652 + * - finds the right dataType (mediates between content-type and expected dataType) 179.7653 + * - returns the corresponding response 179.7654 + */ 179.7655 +function ajaxHandleResponses( s, jqXHR, responses ) { 179.7656 + 179.7657 + var ct, type, finalDataType, firstDataType, 179.7658 + contents = s.contents, 179.7659 + dataTypes = s.dataTypes; 179.7660 + 179.7661 + // Remove auto dataType and get content-type in the process 179.7662 + while ( dataTypes[ 0 ] === "*" ) { 179.7663 + dataTypes.shift(); 179.7664 + if ( ct === undefined ) { 179.7665 + ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); 179.7666 + } 179.7667 + } 179.7668 + 179.7669 + // Check if we're dealing with a known content-type 179.7670 + if ( ct ) { 179.7671 + for ( type in contents ) { 179.7672 + if ( contents[ type ] && contents[ type ].test( ct ) ) { 179.7673 + dataTypes.unshift( type ); 179.7674 + break; 179.7675 + } 179.7676 + } 179.7677 + } 179.7678 + 179.7679 + // Check to see if we have a response for the expected dataType 179.7680 + if ( dataTypes[ 0 ] in responses ) { 179.7681 + finalDataType = dataTypes[ 0 ]; 179.7682 + } else { 179.7683 + // Try convertible dataTypes 179.7684 + for ( type in responses ) { 179.7685 + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { 179.7686 + finalDataType = type; 179.7687 + break; 179.7688 + } 179.7689 + if ( !firstDataType ) { 179.7690 + firstDataType = type; 179.7691 + } 179.7692 + } 179.7693 + // Or just use first one 179.7694 + finalDataType = finalDataType || firstDataType; 179.7695 + } 179.7696 + 179.7697 + // If we found a dataType 179.7698 + // We add the dataType to the list if needed 179.7699 + // and return the corresponding response 179.7700 + if ( finalDataType ) { 179.7701 + if ( finalDataType !== dataTypes[ 0 ] ) { 179.7702 + dataTypes.unshift( finalDataType ); 179.7703 + } 179.7704 + return responses[ finalDataType ]; 179.7705 + } 179.7706 +} 179.7707 + 179.7708 +/* Chain conversions given the request and the original response 179.7709 + * Also sets the responseXXX fields on the jqXHR instance 179.7710 + */ 179.7711 +function ajaxConvert( s, response, jqXHR, isSuccess ) { 179.7712 + var conv2, current, conv, tmp, prev, 179.7713 + converters = {}, 179.7714 + // Work with a copy of dataTypes in case we need to modify it for conversion 179.7715 + dataTypes = s.dataTypes.slice(); 179.7716 + 179.7717 + // Create converters map with lowercased keys 179.7718 + if ( dataTypes[ 1 ] ) { 179.7719 + for ( conv in s.converters ) { 179.7720 + converters[ conv.toLowerCase() ] = s.converters[ conv ]; 179.7721 + } 179.7722 + } 179.7723 + 179.7724 + current = dataTypes.shift(); 179.7725 + 179.7726 + // Convert to each sequential dataType 179.7727 + while ( current ) { 179.7728 + 179.7729 + if ( s.responseFields[ current ] ) { 179.7730 + jqXHR[ s.responseFields[ current ] ] = response; 179.7731 + } 179.7732 + 179.7733 + // Apply the dataFilter if provided 179.7734 + if ( !prev && isSuccess && s.dataFilter ) { 179.7735 + response = s.dataFilter( response, s.dataType ); 179.7736 + } 179.7737 + 179.7738 + prev = current; 179.7739 + current = dataTypes.shift(); 179.7740 + 179.7741 + if ( current ) { 179.7742 + 179.7743 + // There's only work to do if current dataType is non-auto 179.7744 + if ( current === "*" ) { 179.7745 + 179.7746 + current = prev; 179.7747 + 179.7748 + // Convert response if prev dataType is non-auto and differs from current 179.7749 + } else if ( prev !== "*" && prev !== current ) { 179.7750 + 179.7751 + // Seek a direct converter 179.7752 + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 179.7753 + 179.7754 + // If none found, seek a pair 179.7755 + if ( !conv ) { 179.7756 + for ( conv2 in converters ) { 179.7757 + 179.7758 + // If conv2 outputs current 179.7759 + tmp = conv2.split( " " ); 179.7760 + if ( tmp[ 1 ] === current ) { 179.7761 + 179.7762 + // If prev can be converted to accepted input 179.7763 + conv = converters[ prev + " " + tmp[ 0 ] ] || 179.7764 + converters[ "* " + tmp[ 0 ] ]; 179.7765 + if ( conv ) { 179.7766 + // Condense equivalence converters 179.7767 + if ( conv === true ) { 179.7768 + conv = converters[ conv2 ]; 179.7769 + 179.7770 + // Otherwise, insert the intermediate dataType 179.7771 + } else if ( converters[ conv2 ] !== true ) { 179.7772 + current = tmp[ 0 ]; 179.7773 + dataTypes.unshift( tmp[ 1 ] ); 179.7774 + } 179.7775 + break; 179.7776 + } 179.7777 + } 179.7778 + } 179.7779 + } 179.7780 + 179.7781 + // Apply converter (if not an equivalence) 179.7782 + if ( conv !== true ) { 179.7783 + 179.7784 + // Unless errors are allowed to bubble, catch and return them 179.7785 + if ( conv && s[ "throws" ] ) { 179.7786 + response = conv( response ); 179.7787 + } else { 179.7788 + try { 179.7789 + response = conv( response ); 179.7790 + } catch ( e ) { 179.7791 + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; 179.7792 + } 179.7793 + } 179.7794 + } 179.7795 + } 179.7796 + } 179.7797 + } 179.7798 + 179.7799 + return { state: "success", data: response }; 179.7800 +} 179.7801 + 179.7802 +jQuery.extend({ 179.7803 + 179.7804 + // Counter for holding the number of active queries 179.7805 + active: 0, 179.7806 + 179.7807 + // Last-Modified header cache for next request 179.7808 + lastModified: {}, 179.7809 + etag: {}, 179.7810 + 179.7811 + ajaxSettings: { 179.7812 + url: ajaxLocation, 179.7813 + type: "GET", 179.7814 + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), 179.7815 + global: true, 179.7816 + processData: true, 179.7817 + async: true, 179.7818 + contentType: "application/x-www-form-urlencoded; charset=UTF-8", 179.7819 + /* 179.7820 + timeout: 0, 179.7821 + data: null, 179.7822 + dataType: null, 179.7823 + username: null, 179.7824 + password: null, 179.7825 + cache: null, 179.7826 + throws: false, 179.7827 + traditional: false, 179.7828 + headers: {}, 179.7829 + */ 179.7830 + 179.7831 + accepts: { 179.7832 + "*": allTypes, 179.7833 + text: "text/plain", 179.7834 + html: "text/html", 179.7835 + xml: "application/xml, text/xml", 179.7836 + json: "application/json, text/javascript" 179.7837 + }, 179.7838 + 179.7839 + contents: { 179.7840 + xml: /xml/, 179.7841 + html: /html/, 179.7842 + json: /json/ 179.7843 + }, 179.7844 + 179.7845 + responseFields: { 179.7846 + xml: "responseXML", 179.7847 + text: "responseText", 179.7848 + json: "responseJSON" 179.7849 + }, 179.7850 + 179.7851 + // Data converters 179.7852 + // Keys separate source (or catchall "*") and destination types with a single space 179.7853 + converters: { 179.7854 + 179.7855 + // Convert anything to text 179.7856 + "* text": String, 179.7857 + 179.7858 + // Text to html (true = no transformation) 179.7859 + "text html": true, 179.7860 + 179.7861 + // Evaluate text as a json expression 179.7862 + "text json": jQuery.parseJSON, 179.7863 + 179.7864 + // Parse text as xml 179.7865 + "text xml": jQuery.parseXML 179.7866 + }, 179.7867 + 179.7868 + // For options that shouldn't be deep extended: 179.7869 + // you can add your own custom options here if 179.7870 + // and when you create one that shouldn't be 179.7871 + // deep extended (see ajaxExtend) 179.7872 + flatOptions: { 179.7873 + url: true, 179.7874 + context: true 179.7875 + } 179.7876 + }, 179.7877 + 179.7878 + // Creates a full fledged settings object into target 179.7879 + // with both ajaxSettings and settings fields. 179.7880 + // If target is omitted, writes into ajaxSettings. 179.7881 + ajaxSetup: function( target, settings ) { 179.7882 + return settings ? 179.7883 + 179.7884 + // Building a settings object 179.7885 + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 179.7886 + 179.7887 + // Extending ajaxSettings 179.7888 + ajaxExtend( jQuery.ajaxSettings, target ); 179.7889 + }, 179.7890 + 179.7891 + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 179.7892 + ajaxTransport: addToPrefiltersOrTransports( transports ), 179.7893 + 179.7894 + // Main method 179.7895 + ajax: function( url, options ) { 179.7896 + 179.7897 + // If url is an object, simulate pre-1.5 signature 179.7898 + if ( typeof url === "object" ) { 179.7899 + options = url; 179.7900 + url = undefined; 179.7901 + } 179.7902 + 179.7903 + // Force options to be an object 179.7904 + options = options || {}; 179.7905 + 179.7906 + var transport, 179.7907 + // URL without anti-cache param 179.7908 + cacheURL, 179.7909 + // Response headers 179.7910 + responseHeadersString, 179.7911 + responseHeaders, 179.7912 + // timeout handle 179.7913 + timeoutTimer, 179.7914 + // Cross-domain detection vars 179.7915 + parts, 179.7916 + // To know if global events are to be dispatched 179.7917 + fireGlobals, 179.7918 + // Loop variable 179.7919 + i, 179.7920 + // Create the final options object 179.7921 + s = jQuery.ajaxSetup( {}, options ), 179.7922 + // Callbacks context 179.7923 + callbackContext = s.context || s, 179.7924 + // Context for global events is callbackContext if it is a DOM node or jQuery collection 179.7925 + globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? 179.7926 + jQuery( callbackContext ) : 179.7927 + jQuery.event, 179.7928 + // Deferreds 179.7929 + deferred = jQuery.Deferred(), 179.7930 + completeDeferred = jQuery.Callbacks("once memory"), 179.7931 + // Status-dependent callbacks 179.7932 + statusCode = s.statusCode || {}, 179.7933 + // Headers (they are sent all at once) 179.7934 + requestHeaders = {}, 179.7935 + requestHeadersNames = {}, 179.7936 + // The jqXHR state 179.7937 + state = 0, 179.7938 + // Default abort message 179.7939 + strAbort = "canceled", 179.7940 + // Fake xhr 179.7941 + jqXHR = { 179.7942 + readyState: 0, 179.7943 + 179.7944 + // Builds headers hashtable if needed 179.7945 + getResponseHeader: function( key ) { 179.7946 + var match; 179.7947 + if ( state === 2 ) { 179.7948 + if ( !responseHeaders ) { 179.7949 + responseHeaders = {}; 179.7950 + while ( (match = rheaders.exec( responseHeadersString )) ) { 179.7951 + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; 179.7952 + } 179.7953 + } 179.7954 + match = responseHeaders[ key.toLowerCase() ]; 179.7955 + } 179.7956 + return match == null ? null : match; 179.7957 + }, 179.7958 + 179.7959 + // Raw string 179.7960 + getAllResponseHeaders: function() { 179.7961 + return state === 2 ? responseHeadersString : null; 179.7962 + }, 179.7963 + 179.7964 + // Caches the header 179.7965 + setRequestHeader: function( name, value ) { 179.7966 + var lname = name.toLowerCase(); 179.7967 + if ( !state ) { 179.7968 + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; 179.7969 + requestHeaders[ name ] = value; 179.7970 + } 179.7971 + return this; 179.7972 + }, 179.7973 + 179.7974 + // Overrides response content-type header 179.7975 + overrideMimeType: function( type ) { 179.7976 + if ( !state ) { 179.7977 + s.mimeType = type; 179.7978 + } 179.7979 + return this; 179.7980 + }, 179.7981 + 179.7982 + // Status-dependent callbacks 179.7983 + statusCode: function( map ) { 179.7984 + var code; 179.7985 + if ( map ) { 179.7986 + if ( state < 2 ) { 179.7987 + for ( code in map ) { 179.7988 + // Lazy-add the new callback in a way that preserves old ones 179.7989 + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 179.7990 + } 179.7991 + } else { 179.7992 + // Execute the appropriate callbacks 179.7993 + jqXHR.always( map[ jqXHR.status ] ); 179.7994 + } 179.7995 + } 179.7996 + return this; 179.7997 + }, 179.7998 + 179.7999 + // Cancel the request 179.8000 + abort: function( statusText ) { 179.8001 + var finalText = statusText || strAbort; 179.8002 + if ( transport ) { 179.8003 + transport.abort( finalText ); 179.8004 + } 179.8005 + done( 0, finalText ); 179.8006 + return this; 179.8007 + } 179.8008 + }; 179.8009 + 179.8010 + // Attach deferreds 179.8011 + deferred.promise( jqXHR ).complete = completeDeferred.add; 179.8012 + jqXHR.success = jqXHR.done; 179.8013 + jqXHR.error = jqXHR.fail; 179.8014 + 179.8015 + // Remove hash character (#7531: and string promotion) 179.8016 + // Add protocol if not provided (prefilters might expect it) 179.8017 + // Handle falsy url in the settings object (#10093: consistency with old signature) 179.8018 + // We also use the url parameter if available 179.8019 + s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) 179.8020 + .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); 179.8021 + 179.8022 + // Alias method option to type as per ticket #12004 179.8023 + s.type = options.method || options.type || s.method || s.type; 179.8024 + 179.8025 + // Extract dataTypes list 179.8026 + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; 179.8027 + 179.8028 + // A cross-domain request is in order when we have a protocol:host:port mismatch 179.8029 + if ( s.crossDomain == null ) { 179.8030 + parts = rurl.exec( s.url.toLowerCase() ); 179.8031 + s.crossDomain = !!( parts && 179.8032 + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || 179.8033 + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== 179.8034 + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) 179.8035 + ); 179.8036 + } 179.8037 + 179.8038 + // Convert data if not already a string 179.8039 + if ( s.data && s.processData && typeof s.data !== "string" ) { 179.8040 + s.data = jQuery.param( s.data, s.traditional ); 179.8041 + } 179.8042 + 179.8043 + // Apply prefilters 179.8044 + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 179.8045 + 179.8046 + // If request was aborted inside a prefilter, stop there 179.8047 + if ( state === 2 ) { 179.8048 + return jqXHR; 179.8049 + } 179.8050 + 179.8051 + // We can fire global events as of now if asked to 179.8052 + fireGlobals = s.global; 179.8053 + 179.8054 + // Watch for a new set of requests 179.8055 + if ( fireGlobals && jQuery.active++ === 0 ) { 179.8056 + jQuery.event.trigger("ajaxStart"); 179.8057 + } 179.8058 + 179.8059 + // Uppercase the type 179.8060 + s.type = s.type.toUpperCase(); 179.8061 + 179.8062 + // Determine if request has content 179.8063 + s.hasContent = !rnoContent.test( s.type ); 179.8064 + 179.8065 + // Save the URL in case we're toying with the If-Modified-Since 179.8066 + // and/or If-None-Match header later on 179.8067 + cacheURL = s.url; 179.8068 + 179.8069 + // More options handling for requests with no content 179.8070 + if ( !s.hasContent ) { 179.8071 + 179.8072 + // If data is available, append data to url 179.8073 + if ( s.data ) { 179.8074 + cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); 179.8075 + // #9682: remove data so that it's not used in an eventual retry 179.8076 + delete s.data; 179.8077 + } 179.8078 + 179.8079 + // Add anti-cache in url if needed 179.8080 + if ( s.cache === false ) { 179.8081 + s.url = rts.test( cacheURL ) ? 179.8082 + 179.8083 + // If there is already a '_' parameter, set its value 179.8084 + cacheURL.replace( rts, "$1_=" + nonce++ ) : 179.8085 + 179.8086 + // Otherwise add one to the end 179.8087 + cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; 179.8088 + } 179.8089 + } 179.8090 + 179.8091 + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 179.8092 + if ( s.ifModified ) { 179.8093 + if ( jQuery.lastModified[ cacheURL ] ) { 179.8094 + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 179.8095 + } 179.8096 + if ( jQuery.etag[ cacheURL ] ) { 179.8097 + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 179.8098 + } 179.8099 + } 179.8100 + 179.8101 + // Set the correct header, if data is being sent 179.8102 + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 179.8103 + jqXHR.setRequestHeader( "Content-Type", s.contentType ); 179.8104 + } 179.8105 + 179.8106 + // Set the Accepts header for the server, depending on the dataType 179.8107 + jqXHR.setRequestHeader( 179.8108 + "Accept", 179.8109 + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? 179.8110 + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 179.8111 + s.accepts[ "*" ] 179.8112 + ); 179.8113 + 179.8114 + // Check for headers option 179.8115 + for ( i in s.headers ) { 179.8116 + jqXHR.setRequestHeader( i, s.headers[ i ] ); 179.8117 + } 179.8118 + 179.8119 + // Allow custom headers/mimetypes and early abort 179.8120 + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { 179.8121 + // Abort if not done already and return 179.8122 + return jqXHR.abort(); 179.8123 + } 179.8124 + 179.8125 + // aborting is no longer a cancellation 179.8126 + strAbort = "abort"; 179.8127 + 179.8128 + // Install callbacks on deferreds 179.8129 + for ( i in { success: 1, error: 1, complete: 1 } ) { 179.8130 + jqXHR[ i ]( s[ i ] ); 179.8131 + } 179.8132 + 179.8133 + // Get transport 179.8134 + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 179.8135 + 179.8136 + // If no transport, we auto-abort 179.8137 + if ( !transport ) { 179.8138 + done( -1, "No Transport" ); 179.8139 + } else { 179.8140 + jqXHR.readyState = 1; 179.8141 + 179.8142 + // Send global event 179.8143 + if ( fireGlobals ) { 179.8144 + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 179.8145 + } 179.8146 + // Timeout 179.8147 + if ( s.async && s.timeout > 0 ) { 179.8148 + timeoutTimer = setTimeout(function() { 179.8149 + jqXHR.abort("timeout"); 179.8150 + }, s.timeout ); 179.8151 + } 179.8152 + 179.8153 + try { 179.8154 + state = 1; 179.8155 + transport.send( requestHeaders, done ); 179.8156 + } catch ( e ) { 179.8157 + // Propagate exception as error if not done 179.8158 + if ( state < 2 ) { 179.8159 + done( -1, e ); 179.8160 + // Simply rethrow otherwise 179.8161 + } else { 179.8162 + throw e; 179.8163 + } 179.8164 + } 179.8165 + } 179.8166 + 179.8167 + // Callback for when everything is done 179.8168 + function done( status, nativeStatusText, responses, headers ) { 179.8169 + var isSuccess, success, error, response, modified, 179.8170 + statusText = nativeStatusText; 179.8171 + 179.8172 + // Called once 179.8173 + if ( state === 2 ) { 179.8174 + return; 179.8175 + } 179.8176 + 179.8177 + // State is "done" now 179.8178 + state = 2; 179.8179 + 179.8180 + // Clear timeout if it exists 179.8181 + if ( timeoutTimer ) { 179.8182 + clearTimeout( timeoutTimer ); 179.8183 + } 179.8184 + 179.8185 + // Dereference transport for early garbage collection 179.8186 + // (no matter how long the jqXHR object will be used) 179.8187 + transport = undefined; 179.8188 + 179.8189 + // Cache response headers 179.8190 + responseHeadersString = headers || ""; 179.8191 + 179.8192 + // Set readyState 179.8193 + jqXHR.readyState = status > 0 ? 4 : 0; 179.8194 + 179.8195 + // Determine if successful 179.8196 + isSuccess = status >= 200 && status < 300 || status === 304; 179.8197 + 179.8198 + // Get response data 179.8199 + if ( responses ) { 179.8200 + response = ajaxHandleResponses( s, jqXHR, responses ); 179.8201 + } 179.8202 + 179.8203 + // Convert no matter what (that way responseXXX fields are always set) 179.8204 + response = ajaxConvert( s, response, jqXHR, isSuccess ); 179.8205 + 179.8206 + // If successful, handle type chaining 179.8207 + if ( isSuccess ) { 179.8208 + 179.8209 + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 179.8210 + if ( s.ifModified ) { 179.8211 + modified = jqXHR.getResponseHeader("Last-Modified"); 179.8212 + if ( modified ) { 179.8213 + jQuery.lastModified[ cacheURL ] = modified; 179.8214 + } 179.8215 + modified = jqXHR.getResponseHeader("etag"); 179.8216 + if ( modified ) { 179.8217 + jQuery.etag[ cacheURL ] = modified; 179.8218 + } 179.8219 + } 179.8220 + 179.8221 + // if no content 179.8222 + if ( status === 204 || s.type === "HEAD" ) { 179.8223 + statusText = "nocontent"; 179.8224 + 179.8225 + // if not modified 179.8226 + } else if ( status === 304 ) { 179.8227 + statusText = "notmodified"; 179.8228 + 179.8229 + // If we have data, let's convert it 179.8230 + } else { 179.8231 + statusText = response.state; 179.8232 + success = response.data; 179.8233 + error = response.error; 179.8234 + isSuccess = !error; 179.8235 + } 179.8236 + } else { 179.8237 + // We extract error from statusText 179.8238 + // then normalize statusText and status for non-aborts 179.8239 + error = statusText; 179.8240 + if ( status || !statusText ) { 179.8241 + statusText = "error"; 179.8242 + if ( status < 0 ) { 179.8243 + status = 0; 179.8244 + } 179.8245 + } 179.8246 + } 179.8247 + 179.8248 + // Set data for the fake xhr object 179.8249 + jqXHR.status = status; 179.8250 + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 179.8251 + 179.8252 + // Success/Error 179.8253 + if ( isSuccess ) { 179.8254 + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 179.8255 + } else { 179.8256 + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 179.8257 + } 179.8258 + 179.8259 + // Status-dependent callbacks 179.8260 + jqXHR.statusCode( statusCode ); 179.8261 + statusCode = undefined; 179.8262 + 179.8263 + if ( fireGlobals ) { 179.8264 + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 179.8265 + [ jqXHR, s, isSuccess ? success : error ] ); 179.8266 + } 179.8267 + 179.8268 + // Complete 179.8269 + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 179.8270 + 179.8271 + if ( fireGlobals ) { 179.8272 + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 179.8273 + // Handle the global AJAX counter 179.8274 + if ( !( --jQuery.active ) ) { 179.8275 + jQuery.event.trigger("ajaxStop"); 179.8276 + } 179.8277 + } 179.8278 + } 179.8279 + 179.8280 + return jqXHR; 179.8281 + }, 179.8282 + 179.8283 + getJSON: function( url, data, callback ) { 179.8284 + return jQuery.get( url, data, callback, "json" ); 179.8285 + }, 179.8286 + 179.8287 + getScript: function( url, callback ) { 179.8288 + return jQuery.get( url, undefined, callback, "script" ); 179.8289 + } 179.8290 +}); 179.8291 + 179.8292 +jQuery.each( [ "get", "post" ], function( i, method ) { 179.8293 + jQuery[ method ] = function( url, data, callback, type ) { 179.8294 + // shift arguments if data argument was omitted 179.8295 + if ( jQuery.isFunction( data ) ) { 179.8296 + type = type || callback; 179.8297 + callback = data; 179.8298 + data = undefined; 179.8299 + } 179.8300 + 179.8301 + return jQuery.ajax({ 179.8302 + url: url, 179.8303 + type: method, 179.8304 + dataType: type, 179.8305 + data: data, 179.8306 + success: callback 179.8307 + }); 179.8308 + }; 179.8309 +}); 179.8310 + 179.8311 +// Attach a bunch of functions for handling common AJAX events 179.8312 +jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { 179.8313 + jQuery.fn[ type ] = function( fn ) { 179.8314 + return this.on( type, fn ); 179.8315 + }; 179.8316 +}); 179.8317 + 179.8318 + 179.8319 +jQuery._evalUrl = function( url ) { 179.8320 + return jQuery.ajax({ 179.8321 + url: url, 179.8322 + type: "GET", 179.8323 + dataType: "script", 179.8324 + async: false, 179.8325 + global: false, 179.8326 + "throws": true 179.8327 + }); 179.8328 +}; 179.8329 + 179.8330 + 179.8331 +jQuery.fn.extend({ 179.8332 + wrapAll: function( html ) { 179.8333 + var wrap; 179.8334 + 179.8335 + if ( jQuery.isFunction( html ) ) { 179.8336 + return this.each(function( i ) { 179.8337 + jQuery( this ).wrapAll( html.call(this, i) ); 179.8338 + }); 179.8339 + } 179.8340 + 179.8341 + if ( this[ 0 ] ) { 179.8342 + 179.8343 + // The elements to wrap the target around 179.8344 + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 179.8345 + 179.8346 + if ( this[ 0 ].parentNode ) { 179.8347 + wrap.insertBefore( this[ 0 ] ); 179.8348 + } 179.8349 + 179.8350 + wrap.map(function() { 179.8351 + var elem = this; 179.8352 + 179.8353 + while ( elem.firstElementChild ) { 179.8354 + elem = elem.firstElementChild; 179.8355 + } 179.8356 + 179.8357 + return elem; 179.8358 + }).append( this ); 179.8359 + } 179.8360 + 179.8361 + return this; 179.8362 + }, 179.8363 + 179.8364 + wrapInner: function( html ) { 179.8365 + if ( jQuery.isFunction( html ) ) { 179.8366 + return this.each(function( i ) { 179.8367 + jQuery( this ).wrapInner( html.call(this, i) ); 179.8368 + }); 179.8369 + } 179.8370 + 179.8371 + return this.each(function() { 179.8372 + var self = jQuery( this ), 179.8373 + contents = self.contents(); 179.8374 + 179.8375 + if ( contents.length ) { 179.8376 + contents.wrapAll( html ); 179.8377 + 179.8378 + } else { 179.8379 + self.append( html ); 179.8380 + } 179.8381 + }); 179.8382 + }, 179.8383 + 179.8384 + wrap: function( html ) { 179.8385 + var isFunction = jQuery.isFunction( html ); 179.8386 + 179.8387 + return this.each(function( i ) { 179.8388 + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); 179.8389 + }); 179.8390 + }, 179.8391 + 179.8392 + unwrap: function() { 179.8393 + return this.parent().each(function() { 179.8394 + if ( !jQuery.nodeName( this, "body" ) ) { 179.8395 + jQuery( this ).replaceWith( this.childNodes ); 179.8396 + } 179.8397 + }).end(); 179.8398 + } 179.8399 +}); 179.8400 + 179.8401 + 179.8402 +jQuery.expr.filters.hidden = function( elem ) { 179.8403 + // Support: Opera <= 12.12 179.8404 + // Opera reports offsetWidths and offsetHeights less than zero on some elements 179.8405 + return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; 179.8406 +}; 179.8407 +jQuery.expr.filters.visible = function( elem ) { 179.8408 + return !jQuery.expr.filters.hidden( elem ); 179.8409 +}; 179.8410 + 179.8411 + 179.8412 + 179.8413 + 179.8414 +var r20 = /%20/g, 179.8415 + rbracket = /\[\]$/, 179.8416 + rCRLF = /\r?\n/g, 179.8417 + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 179.8418 + rsubmittable = /^(?:input|select|textarea|keygen)/i; 179.8419 + 179.8420 +function buildParams( prefix, obj, traditional, add ) { 179.8421 + var name; 179.8422 + 179.8423 + if ( jQuery.isArray( obj ) ) { 179.8424 + // Serialize array item. 179.8425 + jQuery.each( obj, function( i, v ) { 179.8426 + if ( traditional || rbracket.test( prefix ) ) { 179.8427 + // Treat each array item as a scalar. 179.8428 + add( prefix, v ); 179.8429 + 179.8430 + } else { 179.8431 + // Item is non-scalar (array or object), encode its numeric index. 179.8432 + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); 179.8433 + } 179.8434 + }); 179.8435 + 179.8436 + } else if ( !traditional && jQuery.type( obj ) === "object" ) { 179.8437 + // Serialize object item. 179.8438 + for ( name in obj ) { 179.8439 + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 179.8440 + } 179.8441 + 179.8442 + } else { 179.8443 + // Serialize scalar item. 179.8444 + add( prefix, obj ); 179.8445 + } 179.8446 +} 179.8447 + 179.8448 +// Serialize an array of form elements or a set of 179.8449 +// key/values into a query string 179.8450 +jQuery.param = function( a, traditional ) { 179.8451 + var prefix, 179.8452 + s = [], 179.8453 + add = function( key, value ) { 179.8454 + // If value is a function, invoke it and return its value 179.8455 + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); 179.8456 + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); 179.8457 + }; 179.8458 + 179.8459 + // Set traditional to true for jQuery <= 1.3.2 behavior. 179.8460 + if ( traditional === undefined ) { 179.8461 + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; 179.8462 + } 179.8463 + 179.8464 + // If an array was passed in, assume that it is an array of form elements. 179.8465 + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 179.8466 + // Serialize the form elements 179.8467 + jQuery.each( a, function() { 179.8468 + add( this.name, this.value ); 179.8469 + }); 179.8470 + 179.8471 + } else { 179.8472 + // If traditional, encode the "old" way (the way 1.3.2 or older 179.8473 + // did it), otherwise encode params recursively. 179.8474 + for ( prefix in a ) { 179.8475 + buildParams( prefix, a[ prefix ], traditional, add ); 179.8476 + } 179.8477 + } 179.8478 + 179.8479 + // Return the resulting serialization 179.8480 + return s.join( "&" ).replace( r20, "+" ); 179.8481 +}; 179.8482 + 179.8483 +jQuery.fn.extend({ 179.8484 + serialize: function() { 179.8485 + return jQuery.param( this.serializeArray() ); 179.8486 + }, 179.8487 + serializeArray: function() { 179.8488 + return this.map(function() { 179.8489 + // Can add propHook for "elements" to filter or add form elements 179.8490 + var elements = jQuery.prop( this, "elements" ); 179.8491 + return elements ? jQuery.makeArray( elements ) : this; 179.8492 + }) 179.8493 + .filter(function() { 179.8494 + var type = this.type; 179.8495 + 179.8496 + // Use .is( ":disabled" ) so that fieldset[disabled] works 179.8497 + return this.name && !jQuery( this ).is( ":disabled" ) && 179.8498 + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 179.8499 + ( this.checked || !rcheckableType.test( type ) ); 179.8500 + }) 179.8501 + .map(function( i, elem ) { 179.8502 + var val = jQuery( this ).val(); 179.8503 + 179.8504 + return val == null ? 179.8505 + null : 179.8506 + jQuery.isArray( val ) ? 179.8507 + jQuery.map( val, function( val ) { 179.8508 + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 179.8509 + }) : 179.8510 + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 179.8511 + }).get(); 179.8512 + } 179.8513 +}); 179.8514 + 179.8515 + 179.8516 +jQuery.ajaxSettings.xhr = function() { 179.8517 + try { 179.8518 + return new XMLHttpRequest(); 179.8519 + } catch( e ) {} 179.8520 +}; 179.8521 + 179.8522 +var xhrId = 0, 179.8523 + xhrCallbacks = {}, 179.8524 + xhrSuccessStatus = { 179.8525 + // file protocol always yields status code 0, assume 200 179.8526 + 0: 200, 179.8527 + // Support: IE9 179.8528 + // #1450: sometimes IE returns 1223 when it should be 204 179.8529 + 1223: 204 179.8530 + }, 179.8531 + xhrSupported = jQuery.ajaxSettings.xhr(); 179.8532 + 179.8533 +// Support: IE9 179.8534 +// Open requests must be manually aborted on unload (#5280) 179.8535 +if ( window.ActiveXObject ) { 179.8536 + jQuery( window ).on( "unload", function() { 179.8537 + for ( var key in xhrCallbacks ) { 179.8538 + xhrCallbacks[ key ](); 179.8539 + } 179.8540 + }); 179.8541 +} 179.8542 + 179.8543 +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 179.8544 +support.ajax = xhrSupported = !!xhrSupported; 179.8545 + 179.8546 +jQuery.ajaxTransport(function( options ) { 179.8547 + var callback; 179.8548 + 179.8549 + // Cross domain only allowed if supported through XMLHttpRequest 179.8550 + if ( support.cors || xhrSupported && !options.crossDomain ) { 179.8551 + return { 179.8552 + send: function( headers, complete ) { 179.8553 + var i, 179.8554 + xhr = options.xhr(), 179.8555 + id = ++xhrId; 179.8556 + 179.8557 + xhr.open( options.type, options.url, options.async, options.username, options.password ); 179.8558 + 179.8559 + // Apply custom fields if provided 179.8560 + if ( options.xhrFields ) { 179.8561 + for ( i in options.xhrFields ) { 179.8562 + xhr[ i ] = options.xhrFields[ i ]; 179.8563 + } 179.8564 + } 179.8565 + 179.8566 + // Override mime type if needed 179.8567 + if ( options.mimeType && xhr.overrideMimeType ) { 179.8568 + xhr.overrideMimeType( options.mimeType ); 179.8569 + } 179.8570 + 179.8571 + // X-Requested-With header 179.8572 + // For cross-domain requests, seeing as conditions for a preflight are 179.8573 + // akin to a jigsaw puzzle, we simply never set it to be sure. 179.8574 + // (it can always be set on a per-request basis or even using ajaxSetup) 179.8575 + // For same-domain requests, won't change header if already provided. 179.8576 + if ( !options.crossDomain && !headers["X-Requested-With"] ) { 179.8577 + headers["X-Requested-With"] = "XMLHttpRequest"; 179.8578 + } 179.8579 + 179.8580 + // Set headers 179.8581 + for ( i in headers ) { 179.8582 + xhr.setRequestHeader( i, headers[ i ] ); 179.8583 + } 179.8584 + 179.8585 + // Callback 179.8586 + callback = function( type ) { 179.8587 + return function() { 179.8588 + if ( callback ) { 179.8589 + delete xhrCallbacks[ id ]; 179.8590 + callback = xhr.onload = xhr.onerror = null; 179.8591 + 179.8592 + if ( type === "abort" ) { 179.8593 + xhr.abort(); 179.8594 + } else if ( type === "error" ) { 179.8595 + complete( 179.8596 + // file: protocol always yields status 0; see #8605, #14207 179.8597 + xhr.status, 179.8598 + xhr.statusText 179.8599 + ); 179.8600 + } else { 179.8601 + complete( 179.8602 + xhrSuccessStatus[ xhr.status ] || xhr.status, 179.8603 + xhr.statusText, 179.8604 + // Support: IE9 179.8605 + // Accessing binary-data responseText throws an exception 179.8606 + // (#11426) 179.8607 + typeof xhr.responseText === "string" ? { 179.8608 + text: xhr.responseText 179.8609 + } : undefined, 179.8610 + xhr.getAllResponseHeaders() 179.8611 + ); 179.8612 + } 179.8613 + } 179.8614 + }; 179.8615 + }; 179.8616 + 179.8617 + // Listen to events 179.8618 + xhr.onload = callback(); 179.8619 + xhr.onerror = callback("error"); 179.8620 + 179.8621 + // Create the abort callback 179.8622 + callback = xhrCallbacks[ id ] = callback("abort"); 179.8623 + 179.8624 + try { 179.8625 + // Do send the request (this may raise an exception) 179.8626 + xhr.send( options.hasContent && options.data || null ); 179.8627 + } catch ( e ) { 179.8628 + // #14683: Only rethrow if this hasn't been notified as an error yet 179.8629 + if ( callback ) { 179.8630 + throw e; 179.8631 + } 179.8632 + } 179.8633 + }, 179.8634 + 179.8635 + abort: function() { 179.8636 + if ( callback ) { 179.8637 + callback(); 179.8638 + } 179.8639 + } 179.8640 + }; 179.8641 + } 179.8642 +}); 179.8643 + 179.8644 + 179.8645 + 179.8646 + 179.8647 +// Install script dataType 179.8648 +jQuery.ajaxSetup({ 179.8649 + accepts: { 179.8650 + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" 179.8651 + }, 179.8652 + contents: { 179.8653 + script: /(?:java|ecma)script/ 179.8654 + }, 179.8655 + converters: { 179.8656 + "text script": function( text ) { 179.8657 + jQuery.globalEval( text ); 179.8658 + return text; 179.8659 + } 179.8660 + } 179.8661 +}); 179.8662 + 179.8663 +// Handle cache's special case and crossDomain 179.8664 +jQuery.ajaxPrefilter( "script", function( s ) { 179.8665 + if ( s.cache === undefined ) { 179.8666 + s.cache = false; 179.8667 + } 179.8668 + if ( s.crossDomain ) { 179.8669 + s.type = "GET"; 179.8670 + } 179.8671 +}); 179.8672 + 179.8673 +// Bind script tag hack transport 179.8674 +jQuery.ajaxTransport( "script", function( s ) { 179.8675 + // This transport only deals with cross domain requests 179.8676 + if ( s.crossDomain ) { 179.8677 + var script, callback; 179.8678 + return { 179.8679 + send: function( _, complete ) { 179.8680 + script = jQuery("<script>").prop({ 179.8681 + async: true, 179.8682 + charset: s.scriptCharset, 179.8683 + src: s.url 179.8684 + }).on( 179.8685 + "load error", 179.8686 + callback = function( evt ) { 179.8687 + script.remove(); 179.8688 + callback = null; 179.8689 + if ( evt ) { 179.8690 + complete( evt.type === "error" ? 404 : 200, evt.type ); 179.8691 + } 179.8692 + } 179.8693 + ); 179.8694 + document.head.appendChild( script[ 0 ] ); 179.8695 + }, 179.8696 + abort: function() { 179.8697 + if ( callback ) { 179.8698 + callback(); 179.8699 + } 179.8700 + } 179.8701 + }; 179.8702 + } 179.8703 +}); 179.8704 + 179.8705 + 179.8706 + 179.8707 + 179.8708 +var oldCallbacks = [], 179.8709 + rjsonp = /(=)\?(?=&|$)|\?\?/; 179.8710 + 179.8711 +// Default jsonp settings 179.8712 +jQuery.ajaxSetup({ 179.8713 + jsonp: "callback", 179.8714 + jsonpCallback: function() { 179.8715 + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); 179.8716 + this[ callback ] = true; 179.8717 + return callback; 179.8718 + } 179.8719 +}); 179.8720 + 179.8721 +// Detect, normalize options and install callbacks for jsonp requests 179.8722 +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 179.8723 + 179.8724 + var callbackName, overwritten, responseContainer, 179.8725 + jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 179.8726 + "url" : 179.8727 + typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" 179.8728 + ); 179.8729 + 179.8730 + // Handle iff the expected data type is "jsonp" or we have a parameter to set 179.8731 + if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 179.8732 + 179.8733 + // Get callback name, remembering preexisting value associated with it 179.8734 + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? 179.8735 + s.jsonpCallback() : 179.8736 + s.jsonpCallback; 179.8737 + 179.8738 + // Insert callback into url or form data 179.8739 + if ( jsonProp ) { 179.8740 + s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 179.8741 + } else if ( s.jsonp !== false ) { 179.8742 + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 179.8743 + } 179.8744 + 179.8745 + // Use data converter to retrieve json after script execution 179.8746 + s.converters["script json"] = function() { 179.8747 + if ( !responseContainer ) { 179.8748 + jQuery.error( callbackName + " was not called" ); 179.8749 + } 179.8750 + return responseContainer[ 0 ]; 179.8751 + }; 179.8752 + 179.8753 + // force json dataType 179.8754 + s.dataTypes[ 0 ] = "json"; 179.8755 + 179.8756 + // Install callback 179.8757 + overwritten = window[ callbackName ]; 179.8758 + window[ callbackName ] = function() { 179.8759 + responseContainer = arguments; 179.8760 + }; 179.8761 + 179.8762 + // Clean-up function (fires after converters) 179.8763 + jqXHR.always(function() { 179.8764 + // Restore preexisting value 179.8765 + window[ callbackName ] = overwritten; 179.8766 + 179.8767 + // Save back as free 179.8768 + if ( s[ callbackName ] ) { 179.8769 + // make sure that re-using the options doesn't screw things around 179.8770 + s.jsonpCallback = originalSettings.jsonpCallback; 179.8771 + 179.8772 + // save the callback name for future use 179.8773 + oldCallbacks.push( callbackName ); 179.8774 + } 179.8775 + 179.8776 + // Call if it was a function and we have a response 179.8777 + if ( responseContainer && jQuery.isFunction( overwritten ) ) { 179.8778 + overwritten( responseContainer[ 0 ] ); 179.8779 + } 179.8780 + 179.8781 + responseContainer = overwritten = undefined; 179.8782 + }); 179.8783 + 179.8784 + // Delegate to script 179.8785 + return "script"; 179.8786 + } 179.8787 +}); 179.8788 + 179.8789 + 179.8790 + 179.8791 + 179.8792 +// data: string of html 179.8793 +// context (optional): If specified, the fragment will be created in this context, defaults to document 179.8794 +// keepScripts (optional): If true, will include scripts passed in the html string 179.8795 +jQuery.parseHTML = function( data, context, keepScripts ) { 179.8796 + if ( !data || typeof data !== "string" ) { 179.8797 + return null; 179.8798 + } 179.8799 + if ( typeof context === "boolean" ) { 179.8800 + keepScripts = context; 179.8801 + context = false; 179.8802 + } 179.8803 + context = context || document; 179.8804 + 179.8805 + var parsed = rsingleTag.exec( data ), 179.8806 + scripts = !keepScripts && []; 179.8807 + 179.8808 + // Single tag 179.8809 + if ( parsed ) { 179.8810 + return [ context.createElement( parsed[1] ) ]; 179.8811 + } 179.8812 + 179.8813 + parsed = jQuery.buildFragment( [ data ], context, scripts ); 179.8814 + 179.8815 + if ( scripts && scripts.length ) { 179.8816 + jQuery( scripts ).remove(); 179.8817 + } 179.8818 + 179.8819 + return jQuery.merge( [], parsed.childNodes ); 179.8820 +}; 179.8821 + 179.8822 + 179.8823 +// Keep a copy of the old load method 179.8824 +var _load = jQuery.fn.load; 179.8825 + 179.8826 +/** 179.8827 + * Load a url into a page 179.8828 + */ 179.8829 +jQuery.fn.load = function( url, params, callback ) { 179.8830 + if ( typeof url !== "string" && _load ) { 179.8831 + return _load.apply( this, arguments ); 179.8832 + } 179.8833 + 179.8834 + var selector, type, response, 179.8835 + self = this, 179.8836 + off = url.indexOf(" "); 179.8837 + 179.8838 + if ( off >= 0 ) { 179.8839 + selector = jQuery.trim( url.slice( off ) ); 179.8840 + url = url.slice( 0, off ); 179.8841 + } 179.8842 + 179.8843 + // If it's a function 179.8844 + if ( jQuery.isFunction( params ) ) { 179.8845 + 179.8846 + // We assume that it's the callback 179.8847 + callback = params; 179.8848 + params = undefined; 179.8849 + 179.8850 + // Otherwise, build a param string 179.8851 + } else if ( params && typeof params === "object" ) { 179.8852 + type = "POST"; 179.8853 + } 179.8854 + 179.8855 + // If we have elements to modify, make the request 179.8856 + if ( self.length > 0 ) { 179.8857 + jQuery.ajax({ 179.8858 + url: url, 179.8859 + 179.8860 + // if "type" variable is undefined, then "GET" method will be used 179.8861 + type: type, 179.8862 + dataType: "html", 179.8863 + data: params 179.8864 + }).done(function( responseText ) { 179.8865 + 179.8866 + // Save response for use in complete callback 179.8867 + response = arguments; 179.8868 + 179.8869 + self.html( selector ? 179.8870 + 179.8871 + // If a selector was specified, locate the right elements in a dummy div 179.8872 + // Exclude scripts to avoid IE 'Permission Denied' errors 179.8873 + jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : 179.8874 + 179.8875 + // Otherwise use the full result 179.8876 + responseText ); 179.8877 + 179.8878 + }).complete( callback && function( jqXHR, status ) { 179.8879 + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); 179.8880 + }); 179.8881 + } 179.8882 + 179.8883 + return this; 179.8884 +}; 179.8885 + 179.8886 + 179.8887 + 179.8888 + 179.8889 +jQuery.expr.filters.animated = function( elem ) { 179.8890 + return jQuery.grep(jQuery.timers, function( fn ) { 179.8891 + return elem === fn.elem; 179.8892 + }).length; 179.8893 +}; 179.8894 + 179.8895 + 179.8896 + 179.8897 + 179.8898 +var docElem = window.document.documentElement; 179.8899 + 179.8900 +/** 179.8901 + * Gets a window from an element 179.8902 + */ 179.8903 +function getWindow( elem ) { 179.8904 + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; 179.8905 +} 179.8906 + 179.8907 +jQuery.offset = { 179.8908 + setOffset: function( elem, options, i ) { 179.8909 + var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 179.8910 + position = jQuery.css( elem, "position" ), 179.8911 + curElem = jQuery( elem ), 179.8912 + props = {}; 179.8913 + 179.8914 + // Set position first, in-case top/left are set even on static elem 179.8915 + if ( position === "static" ) { 179.8916 + elem.style.position = "relative"; 179.8917 + } 179.8918 + 179.8919 + curOffset = curElem.offset(); 179.8920 + curCSSTop = jQuery.css( elem, "top" ); 179.8921 + curCSSLeft = jQuery.css( elem, "left" ); 179.8922 + calculatePosition = ( position === "absolute" || position === "fixed" ) && 179.8923 + ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; 179.8924 + 179.8925 + // Need to be able to calculate position if either top or left is auto and position is either absolute or fixed 179.8926 + if ( calculatePosition ) { 179.8927 + curPosition = curElem.position(); 179.8928 + curTop = curPosition.top; 179.8929 + curLeft = curPosition.left; 179.8930 + 179.8931 + } else { 179.8932 + curTop = parseFloat( curCSSTop ) || 0; 179.8933 + curLeft = parseFloat( curCSSLeft ) || 0; 179.8934 + } 179.8935 + 179.8936 + if ( jQuery.isFunction( options ) ) { 179.8937 + options = options.call( elem, i, curOffset ); 179.8938 + } 179.8939 + 179.8940 + if ( options.top != null ) { 179.8941 + props.top = ( options.top - curOffset.top ) + curTop; 179.8942 + } 179.8943 + if ( options.left != null ) { 179.8944 + props.left = ( options.left - curOffset.left ) + curLeft; 179.8945 + } 179.8946 + 179.8947 + if ( "using" in options ) { 179.8948 + options.using.call( elem, props ); 179.8949 + 179.8950 + } else { 179.8951 + curElem.css( props ); 179.8952 + } 179.8953 + } 179.8954 +}; 179.8955 + 179.8956 +jQuery.fn.extend({ 179.8957 + offset: function( options ) { 179.8958 + if ( arguments.length ) { 179.8959 + return options === undefined ? 179.8960 + this : 179.8961 + this.each(function( i ) { 179.8962 + jQuery.offset.setOffset( this, options, i ); 179.8963 + }); 179.8964 + } 179.8965 + 179.8966 + var docElem, win, 179.8967 + elem = this[ 0 ], 179.8968 + box = { top: 0, left: 0 }, 179.8969 + doc = elem && elem.ownerDocument; 179.8970 + 179.8971 + if ( !doc ) { 179.8972 + return; 179.8973 + } 179.8974 + 179.8975 + docElem = doc.documentElement; 179.8976 + 179.8977 + // Make sure it's not a disconnected DOM node 179.8978 + if ( !jQuery.contains( docElem, elem ) ) { 179.8979 + return box; 179.8980 + } 179.8981 + 179.8982 + // If we don't have gBCR, just use 0,0 rather than error 179.8983 + // BlackBerry 5, iOS 3 (original iPhone) 179.8984 + if ( typeof elem.getBoundingClientRect !== strundefined ) { 179.8985 + box = elem.getBoundingClientRect(); 179.8986 + } 179.8987 + win = getWindow( doc ); 179.8988 + return { 179.8989 + top: box.top + win.pageYOffset - docElem.clientTop, 179.8990 + left: box.left + win.pageXOffset - docElem.clientLeft 179.8991 + }; 179.8992 + }, 179.8993 + 179.8994 + position: function() { 179.8995 + if ( !this[ 0 ] ) { 179.8996 + return; 179.8997 + } 179.8998 + 179.8999 + var offsetParent, offset, 179.9000 + elem = this[ 0 ], 179.9001 + parentOffset = { top: 0, left: 0 }; 179.9002 + 179.9003 + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent 179.9004 + if ( jQuery.css( elem, "position" ) === "fixed" ) { 179.9005 + // We assume that getBoundingClientRect is available when computed position is fixed 179.9006 + offset = elem.getBoundingClientRect(); 179.9007 + 179.9008 + } else { 179.9009 + // Get *real* offsetParent 179.9010 + offsetParent = this.offsetParent(); 179.9011 + 179.9012 + // Get correct offsets 179.9013 + offset = this.offset(); 179.9014 + if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { 179.9015 + parentOffset = offsetParent.offset(); 179.9016 + } 179.9017 + 179.9018 + // Add offsetParent borders 179.9019 + parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); 179.9020 + parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); 179.9021 + } 179.9022 + 179.9023 + // Subtract parent offsets and element margins 179.9024 + return { 179.9025 + top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 179.9026 + left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 179.9027 + }; 179.9028 + }, 179.9029 + 179.9030 + offsetParent: function() { 179.9031 + return this.map(function() { 179.9032 + var offsetParent = this.offsetParent || docElem; 179.9033 + 179.9034 + while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { 179.9035 + offsetParent = offsetParent.offsetParent; 179.9036 + } 179.9037 + 179.9038 + return offsetParent || docElem; 179.9039 + }); 179.9040 + } 179.9041 +}); 179.9042 + 179.9043 +// Create scrollLeft and scrollTop methods 179.9044 +jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 179.9045 + var top = "pageYOffset" === prop; 179.9046 + 179.9047 + jQuery.fn[ method ] = function( val ) { 179.9048 + return access( this, function( elem, method, val ) { 179.9049 + var win = getWindow( elem ); 179.9050 + 179.9051 + if ( val === undefined ) { 179.9052 + return win ? win[ prop ] : elem[ method ]; 179.9053 + } 179.9054 + 179.9055 + if ( win ) { 179.9056 + win.scrollTo( 179.9057 + !top ? val : window.pageXOffset, 179.9058 + top ? val : window.pageYOffset 179.9059 + ); 179.9060 + 179.9061 + } else { 179.9062 + elem[ method ] = val; 179.9063 + } 179.9064 + }, method, val, arguments.length, null ); 179.9065 + }; 179.9066 +}); 179.9067 + 179.9068 +// Add the top/left cssHooks using jQuery.fn.position 179.9069 +// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 179.9070 +// getComputedStyle returns percent when specified for top/left/bottom/right 179.9071 +// rather than make the css module depend on the offset module, we just check for it here 179.9072 +jQuery.each( [ "top", "left" ], function( i, prop ) { 179.9073 + jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 179.9074 + function( elem, computed ) { 179.9075 + if ( computed ) { 179.9076 + computed = curCSS( elem, prop ); 179.9077 + // if curCSS returns percentage, fallback to offset 179.9078 + return rnumnonpx.test( computed ) ? 179.9079 + jQuery( elem ).position()[ prop ] + "px" : 179.9080 + computed; 179.9081 + } 179.9082 + } 179.9083 + ); 179.9084 +}); 179.9085 + 179.9086 + 179.9087 +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 179.9088 +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 179.9089 + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { 179.9090 + // margin is only for outerHeight, outerWidth 179.9091 + jQuery.fn[ funcName ] = function( margin, value ) { 179.9092 + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 179.9093 + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 179.9094 + 179.9095 + return access( this, function( elem, type, value ) { 179.9096 + var doc; 179.9097 + 179.9098 + if ( jQuery.isWindow( elem ) ) { 179.9099 + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there 179.9100 + // isn't a whole lot we can do. See pull request at this URL for discussion: 179.9101 + // https://github.com/jquery/jquery/pull/764 179.9102 + return elem.document.documentElement[ "client" + name ]; 179.9103 + } 179.9104 + 179.9105 + // Get document width or height 179.9106 + if ( elem.nodeType === 9 ) { 179.9107 + doc = elem.documentElement; 179.9108 + 179.9109 + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 179.9110 + // whichever is greatest 179.9111 + return Math.max( 179.9112 + elem.body[ "scroll" + name ], doc[ "scroll" + name ], 179.9113 + elem.body[ "offset" + name ], doc[ "offset" + name ], 179.9114 + doc[ "client" + name ] 179.9115 + ); 179.9116 + } 179.9117 + 179.9118 + return value === undefined ? 179.9119 + // Get width or height on the element, requesting but not forcing parseFloat 179.9120 + jQuery.css( elem, type, extra ) : 179.9121 + 179.9122 + // Set width or height on the element 179.9123 + jQuery.style( elem, type, value, extra ); 179.9124 + }, type, chainable ? margin : undefined, chainable, null ); 179.9125 + }; 179.9126 + }); 179.9127 +}); 179.9128 + 179.9129 + 179.9130 +// The number of elements contained in the matched element set 179.9131 +jQuery.fn.size = function() { 179.9132 + return this.length; 179.9133 +}; 179.9134 + 179.9135 +jQuery.fn.andSelf = jQuery.fn.addBack; 179.9136 + 179.9137 + 179.9138 + 179.9139 + 179.9140 +// Register as a named AMD module, since jQuery can be concatenated with other 179.9141 +// files that may use define, but not via a proper concatenation script that 179.9142 +// understands anonymous AMD modules. A named AMD is safest and most robust 179.9143 +// way to register. Lowercase jquery is used because AMD module names are 179.9144 +// derived from file names, and jQuery is normally delivered in a lowercase 179.9145 +// file name. Do this after creating the global so that if an AMD module wants 179.9146 +// to call noConflict to hide this version of jQuery, it will work. 179.9147 + 179.9148 +// Note that for maximum portability, libraries that are not jQuery should 179.9149 +// declare themselves as anonymous modules, and avoid setting a global if an 179.9150 +// AMD loader is present. jQuery is a special case. For more information, see 179.9151 +// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 179.9152 + 179.9153 +if ( typeof define === "function" && define.amd ) { 179.9154 + define( "jquery", [], function() { 179.9155 + return jQuery; 179.9156 + }); 179.9157 +} 179.9158 + 179.9159 + 179.9160 + 179.9161 + 179.9162 +var 179.9163 + // Map over jQuery in case of overwrite 179.9164 + _jQuery = window.jQuery, 179.9165 + 179.9166 + // Map over the $ in case of overwrite 179.9167 + _$ = window.$; 179.9168 + 179.9169 +jQuery.noConflict = function( deep ) { 179.9170 + if ( window.$ === jQuery ) { 179.9171 + window.$ = _$; 179.9172 + } 179.9173 + 179.9174 + if ( deep && window.jQuery === jQuery ) { 179.9175 + window.jQuery = _jQuery; 179.9176 + } 179.9177 + 179.9178 + return jQuery; 179.9179 +}; 179.9180 + 179.9181 +// Expose jQuery and $ identifiers, even in 179.9182 +// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 179.9183 +// and CommonJS for browser emulators (#13566) 179.9184 +if ( typeof noGlobal === strundefined ) { 179.9185 + window.jQuery = window.$ = jQuery; 179.9186 +} 179.9187 + 179.9188 + 179.9189 + 179.9190 + 179.9191 +return jQuery; 179.9192 + 179.9193 +})); 179.9194 \ No newline at end of file
180.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 180.2 +++ b/Touchiot/.gitignore Thu Jun 04 14:50:33 2015 +0200 180.3 @@ -0,0 +1,1 @@ 180.4 +.DS_Store
181.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 181.2 +++ b/Touchiot/README.md Thu Jun 04 14:50:33 2015 +0200 181.3 @@ -0,0 +1,67 @@ 181.4 +Touch Notifier Node.js IoT App 181.5 +============================ 181.6 +The Touch Notifier Node.js sample application distributed within Intel® XDK IoT Edition under the IoT with Node.js Projects project creation option showcases how to read digital data from a Grover Starter Kit Plus – IoT Intel® Edition Touch Sensor, start a web server and communicate wirelessly using WebSockets. 181.7 + 181.8 +Intel(R) XDK IoT Edition 181.9 +------------------------------------------- 181.10 +This template is part of the Intel(R) XDK IoT Edition. 181.11 +Download the Intel(R) XDK IoT Edition at https://software.intel.com/en-us/html5/xdk-iot. To see the technical details of the sample, 181.12 +please visit the sample article page at https://software.intel.com/en-us/html5/articles/iot-touch-notifier-nodejs-and-html5-samples. 181.13 + 181.14 + 181.15 +Important App Files 181.16 +--------------------------- 181.17 +* main.js 181.18 +* package.json 181.19 +* icon.png 181.20 +* README.md 181.21 + 181.22 +License Information Follows 181.23 +--------------------------- 181.24 +Copyright (c) 2014, Intel Corporation. All rights reserved. 181.25 + 181.26 +Redistribution and use in source and binary forms, with or without modification, 181.27 +are permitted provided that the following conditions are met: 181.28 + 181.29 +- Redistributions of source code must retain the above copyright notice, 181.30 + this list of conditions and the following disclaimer. 181.31 + 181.32 +- Redistributions in binary form must reproduce the above copyright notice, 181.33 + this list of conditions and the following disclaimer in the documentation 181.34 + and/or other materials provided with the distribution. 181.35 + 181.36 +- Neither the name of Intel Corporation nor the names of its contributors 181.37 + may be used to endorse or promote products derived from this software 181.38 + without specific prior written permission. 181.39 + 181.40 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 181.41 +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 181.42 +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 181.43 +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 181.44 +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 181.45 +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 181.46 +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 181.47 +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 181.48 +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 181.49 +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 181.50 + 181.51 +mraa 181.52 +-------------------------------------------- 181.53 +* Included on the IoTDevkit Linux Image 181.54 + 181.55 +* source: https://github.com/intel-iot-devkit/mraa 181.56 +* license: https://github.com/intel-iot-devkit/mraa/blob/9d488c8e869e59e1dff2c68218a8f38e9b959cd7/cmake/modules/LICENSE_1_0.txt 181.57 + 181.58 +express 181.59 +-------------------------------------------- 181.60 +http://expressjs.com/ 181.61 + 181.62 +* source: https://github.com/strongloop/express 181.63 +* license: https://github.com/strongloop/express/blob/master/LICENSE 181.64 + 181.65 +socket.io 181.66 +-------------------------------------------- 181.67 +http://socket.io/ 181.68 + 181.69 +* source: https://github.com/Automattic/socket.io 181.70 +* license: https://github.com/Automattic/socket.io/blob/master/LICENSE
182.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 182.2 +++ b/Touchiot/Touchiot.xdk Thu Jun 04 14:50:33 2015 +0200 182.3 @@ -0,0 +1,39 @@ 182.4 +{ 182.5 + "project": { 182.6 + "projectSettingsVersion": "1.2", 182.7 + "creationData": { 182.8 + "projectTypeName": "com.intel.xdk.projecttype.iotapp", 182.9 + "src": "https://edge-intel.s3.amazonaws.com/iotapp/production/release-2015-ww07/iotapp-touch-notifier/sample.zip", 182.10 + "projectGuid": "57cf1b18-d764-4689-86d6-a473d576228e", 182.11 + "lastModifiedDate": 1425145569885, 182.12 + "creationDate": 1425145569772 182.13 + }, 182.14 + "sourceDirectory": "", 182.15 + "cordovaPluginsDirectory": "plugins", 182.16 + "startFile": "main.js", 182.17 + "projectFiles": {}, 182.18 + "projectDirectories": {}, 182.19 + "libraries": [ 182.20 + { 182.21 + "name": "Cordova", 182.22 + "version": "2.9.0", 182.23 + "data": { 182.24 + "default": true 182.25 + } 182.26 + }, 182.27 + { 182.28 + "name": "intelXDK", 182.29 + "version": "4.0.0", 182.30 + "data": { 182.31 + "default": true 182.32 + } 182.33 + } 182.34 + ], 182.35 + "cordovaPlugins": [], 182.36 + "serviceMethods": [], 182.37 + "gameAssetDirectory": "asset", 182.38 + "gameMetadata": {}, 182.39 + "projectTags": [], 182.40 + "buildConfigurations": {} 182.41 + } 182.42 +} 182.43 \ No newline at end of file
183.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 183.2 +++ b/Touchiot/Touchiot.xdke Thu Jun 04 14:50:33 2015 +0200 183.3 @@ -0,0 +1,8 @@ 183.4 +{ 183.5 + "project": { 183.6 + "projectSettingsVersion": "1.2", 183.7 + "currentBuildConfiguration": null, 183.8 + "projectFiles": {}, 183.9 + "projectDirectories": {} 183.10 + } 183.11 +} 183.12 \ No newline at end of file
184.1 Binary file Touchiot/icon.png has changed
185.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 185.2 +++ b/Touchiot/main.js Thu Jun 04 14:50:33 2015 +0200 185.3 @@ -0,0 +1,91 @@ 185.4 +/*jslint node:true,vars:true, unparam:true */ 185.5 +/*jshint unused:true */ 185.6 + 185.7 + 185.8 +/* 185.9 +The Touch Notifier Node.js sample application distributed within Intel® XDK IoT Edition under the IoT with Node.js Projects project creation option showcases how to read digital data from a Grover Starter Kit Plus – IoT Intel® Edition Touch Sensor, start a web server and communicate wirelessly using WebSockets. 185.10 + 185.11 +MRAA - Low Level Skeleton Library for Communication on GNU/Linux platforms 185.12 +Library in C/C++ to interface with Galileo & other Intel platforms, in a structured and sane API with port nanmes/numbering that match boards & with bindings to javascript & python. 185.13 + 185.14 +Steps for installing MRAA & UPM Library on Intel IoT Platform with IoTDevKit Linux* image 185.15 +Using a ssh client: 185.16 +1. echo "src maa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf 185.17 +2. opkg update 185.18 +3. opkg upgrade 185.19 + 185.20 +Article: https://software.intel.com/en-us/html5/articles/iot-touch-notifier-nodejs-and-html5-samples 185.21 +*/ 185.22 + 185.23 +//MRAA Library was installed on the board directly through ssh session 185.24 +var mraa = require("mraa"); 185.25 +var mqtt = require("mqtt"); 185.26 +var http = require("http"); 185.27 + 185.28 +function setOpenhabState(txtNewState) { 185.29 + http.get("http://192.168.42.245:8080/CMD?door_bell="+txtNewState); 185.30 +} 185.31 + 185.32 +//GROVE Kit Shield D6 --> GPIO6 185.33 +//GROVE Kit Shield D2 --> GPIO2 185.34 +function startSensorWatch(socket) { 185.35 + 'use strict'; 185.36 + var touch_sensor_value = 0, last_t_sensor_value; 185.37 + var mqtcli = mqtt.connect('mqtt://raspeinz.local/'); 185.38 + 185.39 + //Touch Sensor connected to D2 connector 185.40 + var digital_pin_D2 = new mraa.Gpio(2); 185.41 + digital_pin_D2.dir(mraa.DIR_IN); 185.42 + 185.43 + //Buzzer connected to D6 connector 185.44 + var digital_pin_D6 = new mraa.Gpio(6); 185.45 + digital_pin_D6.dir(mraa.DIR_OUT); 185.46 + 185.47 + digital_pin_D6.write(0); 185.48 + 185.49 + setInterval(function () { 185.50 + touch_sensor_value = digital_pin_D2.read(); 185.51 + if (touch_sensor_value === 1 && last_t_sensor_value === 0) { 185.52 + console.log("Buzz ON!!!"); 185.53 + socket.emit('message', "present"); 185.54 + mqtcli.publish('door', 'ding'); 185.55 + //mqtcli.end(); // end connection 185.56 +// FUR ULRICH! //http.get("http://ulno.local:8080/CMD?door_bell=ON"); 185.57 + digital_pin_D6.write(touch_sensor_value); 185.58 + } else if (touch_sensor_value === 0 && last_t_sensor_value === 1) { 185.59 + console.log("Buzz OFF!!!"); 185.60 + //socket.emit('message', "absent"); 185.61 + mqtcli.publish('door', 'dong'); 185.62 +// FUR ULRICH! //http.get("http://ulno.local:8080/CMD?door_bell=OFF"); 185.63 + digital_pin_D6.write(touch_sensor_value); 185.64 + } 185.65 + last_t_sensor_value = touch_sensor_value; 185.66 + }, 500); 185.67 +} 185.68 + 185.69 +//Create Socket.io server 185.70 +//var http = require('http'); // See top requires 185.71 +var app = http.createServer(function (req, res) { 185.72 + 'use strict'; 185.73 + res.writeHead(200, {'Content-Type': 'text/plain'}); 185.74 + res.end('<h1>Hello world from Intel IoT platform!</h1>'); 185.75 +}).listen(1338); 185.76 +var io = require('socket.io')(app); 185.77 + 185.78 +console.log("Sample Reading Touch Sensor"); 185.79 + 185.80 +//Attach a 'connection' event handler to the server 185.81 +io.on('connection', function (socket) { 185.82 + 'use strict'; 185.83 + console.log('a user connected'); 185.84 + //Emits an event along with a message 185.85 + socket.emit('connected', 'Welcome'); 185.86 + 185.87 + //Start watching Sensors connected to Galileo board 185.88 + startSensorWatch(socket); 185.89 + 185.90 + //Attach a 'disconnect' event handler to the socket 185.91 + socket.on('disconnect', function () { 185.92 + console.log('user disconnected'); 185.93 + }); 185.94 +});
186.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 186.2 +++ b/Touchiot/package.json Thu Jun 04 14:50:33 2015 +0200 186.3 @@ -0,0 +1,13 @@ 186.4 +{ 186.5 + "name": "TouchNotifier", 186.6 + "description": "", 186.7 + "version": "0.0.0", 186.8 + "main": "main.js", 186.9 + "engines": { 186.10 + "node": ">=0.10.0" 186.11 + }, 186.12 + "dependencies": { 186.13 + "socket.io":"latest", 186.14 + "mqtt":"latest" 186.15 + } 186.16 +}
187.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 187.2 +++ b/doorbell/bellhear.js Thu Jun 04 14:50:33 2015 +0200 187.3 @@ -0,0 +1,61 @@ 187.4 +#! /usr/bin/env node 187.5 +// 187.6 +// Doorbell - Door Bell Gateway for Mesh Networks 187.7 +// Copyright © 2015 Michael Schloh von Bennewitz <michael@schloh.com> 187.8 +// 187.9 +// Permission to use, copy, modify, and/or distribute this software for 187.10 +// any purpose with or without fee is hereby granted, provided that the 187.11 +// above copyright notice and this permission notice appear in all copies. 187.12 +// 187.13 +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 187.14 +// WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 187.15 +// WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 187.16 +// AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 187.17 +// DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 187.18 +// PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 187.19 +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF 187.20 +// THIS SOFTWARE. 187.21 +// 187.22 +// This file is part of Doorbell, a smart door bell IoT gateway 187.23 +// which can be found at http://dev.europalab.com/doorbell/ 187.24 +// 187.25 +// bellhear.js: ECMA JavaScript implementation 187.26 +// 187.27 + 187.28 +/*********************************************************** 187.29 +| _ _ _ _ | 187.30 +| __| | ___ ___ _ __| |__ ___| | | | 187.31 +| / _` |/ _ \ / _ \| '__| '_ \ / _ \ | | | 187.32 +| | (_| | (_) | (_) | | | |_) | __/ | | | 187.33 +| \__,_|\___/ \___/|_| |_.__/ \___|_|_| | 187.34 +| | 187.35 +| Requirements: MQTT broker with standard configuration | 187.36 +| NodeJS and NPM modules (see package.json) | 187.37 +| | 187.38 +| Execute: To start this application, launch it with the | 187.39 +| script named bellhear.js: $ ./bellhear.js | 187.40 +| | 187.41 +| Support: http://list.europalab.com/mailman/doorbell/ | 187.42 +| | 187.43 +| Test: mosquitto_pub -m ON -t door/bell | 187.44 +| | 187.45 +***********************************************************/ 187.46 + 187.47 + 187.48 +// Simple doorbell subscribe client 187.49 +var mqtt = require('mqtt'); 187.50 +var locli = mqtt.connect('mqtt://localhost/'); 187.51 + 187.52 +locli.on('connect', function () { 187.53 + //locli.subscribe('/door/bell'); // explicit 187.54 + //locli.subscribe('/door/#'); // recursive 187.55 + locli.subscribe('/door/+'); // one level 187.56 +}); 187.57 + 187.58 +locli.on('message', function(topic, message) { 187.59 + console.log(message.toString()); 187.60 + //locli.end(); 187.61 +}); 187.62 + 187.63 +// disable automatic reconnect 187.64 +locli.options.reconnectPeriod = 0;
188.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 188.2 +++ b/doorbell/bellpush.js Thu Jun 04 14:50:33 2015 +0200 188.3 @@ -0,0 +1,58 @@ 188.4 +#! /usr/bin/env node 188.5 +// 188.6 +// Doorbell - Door Bell Gateway for Mesh Networks 188.7 +// Copyright © 2015 Michael Schloh von Bennewitz <michael@schloh.com> 188.8 +// 188.9 +// Permission to use, copy, modify, and/or distribute this software for 188.10 +// any purpose with or without fee is hereby granted, provided that the 188.11 +// above copyright notice and this permission notice appear in all copies. 188.12 +// 188.13 +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 188.14 +// WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 188.15 +// WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 188.16 +// AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 188.17 +// DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 188.18 +// PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 188.19 +// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF 188.20 +// THIS SOFTWARE. 188.21 +// 188.22 +// This file is part of Doorbell, a smart door bell IoT gateway 188.23 +// which can be found at http://dev.europalab.com/doorbell/ 188.24 +// 188.25 +// bellpush.js: ECMA JavaScript implementation 188.26 +// 188.27 + 188.28 +/*********************************************************** 188.29 +| _ _ _ _ | 188.30 +| __| | ___ ___ _ __| |__ ___| | | | 188.31 +| / _` |/ _ \ / _ \| '__| '_ \ / _ \ | | | 188.32 +| | (_| | (_) | (_) | | | |_) | __/ | | | 188.33 +| \__,_|\___/ \___/|_| |_.__/ \___|_|_| | 188.34 +| | 188.35 +| Requirements: MQTT broker with standard configuration | 188.36 +| NodeJS and NPM modules (see package.json) | 188.37 +| | 188.38 +| Execute: To start this application, launch it with the | 188.39 +| script named bellpush.js: $ ./bellpush.js | 188.40 +| | 188.41 +| Support: http://list.europalab.com/mailman/doorbell/ | 188.42 +| | 188.43 +| Test: mosquitto_sub -t door/bell | 188.44 +| | 188.45 +***********************************************************/ 188.46 + 188.47 +// Simple doorbell publish client 188.48 +var mqtt = require('mqtt') 188.49 +var locli = mqtt.connect('mqtt://localhost/'); 188.50 +var args = process.argv.slice(2).length; // Argc 188.51 +var prog = process.argv.slice(1)[0]; // Program name 188.52 +var parm = process.argv.slice(2)[0]; // Parameter cmd 188.53 + 188.54 +// Either activate or deactivate the doorbell 188.55 +if (args > 1 || parm != 'ON' && parm != 'OFF') 188.56 + console.error('usage: %s <ON|OFF>', prog); 188.57 +else 188.58 + locli.publish('/door/bell', parm); 188.59 + 188.60 +// Close connection 188.61 +locli.end();
189.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 189.2 +++ b/mqttest/iotpubcli.js Thu Jun 04 14:50:33 2015 +0200 189.3 @@ -0,0 +1,9 @@ 189.4 +// Simple publish client 189.5 + 189.6 +//var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://test.mosquitto.org/'); 189.7 +//var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://192.168.42.250/'); 189.8 +var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://raspeinz.local/'); 189.9 +locli.publish('iotmsg', 'Mqtt'); 189.10 +locli.publish('iotmsg', 'is pretty cool'); 189.11 +//locli.publish('messages', 'remember that!', {retain: true}); 189.12 +locli.end();
190.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 190.2 +++ b/mqttest/iotsubcli.js Thu Jun 04 14:50:33 2015 +0200 190.3 @@ -0,0 +1,17 @@ 190.4 +// Simple subscribe client 190.5 + 190.6 +//var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://test.mosquitto.org/'); 190.7 +//var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://192.168.42.250/'); 190.8 +var mqtt = require('mqtt'), locli = mqtt.connect('mqtt://raspeinz.local/'); 190.9 + 190.10 +locli.on('connect', function () { 190.11 + locli.subscribe('iotmsg'); 190.12 +}); 190.13 + 190.14 +locli.on('message', function(topic, message) { 190.15 + console.log(message.toString()); 190.16 + //locli.end(); 190.17 +}); 190.18 + 190.19 +// disable automatic reconnect 190.20 +locli.options.reconnectPeriod = 0;