├── .gitignore ├── README.md ├── example ├── .DS_Store ├── css │ ├── .DS_Store │ ├── index.css │ ├── jquery.mobile-1.1.1.css │ ├── mobiscroll.core-2.0.1.css │ └── mobiscroll.jqm-2.0.1.css ├── index.html └── js │ ├── .DS_Store │ ├── jquery.js │ └── jquery.mobile-1.1.1.js ├── plugin.xml ├── src ├── android │ ├── JPushPlugin.java │ ├── MyReceiver.java │ ├── armeabi-v7a │ │ └── libjpush172.so │ ├── armeabi │ │ └── libjpush172.so │ ├── jpush-sdk-release1.7.2.jar │ ├── jpush_notification_icon.png │ └── test_notification_layout.xml └── ios │ ├── Plugins │ ├── JPushPlugin.h │ └── JPushPlugin.m │ ├── PushConfig.plist │ └── lib │ ├── APService.h │ └── libPushSDK.a └── www └── JPushPlugin.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 非官方文档,且已不再维护,具体使用请参考官网!!! 2 | 使用了此插件,并出现问题的各位,非常抱歉!!! 3 | 官方入口:https://github.com/jpush 4 | 5 | 6 | ### 修改备注: 7 | 在极光官方大神viper帮助下,同时也参考了下@lanceli大神的cnodejs-ionic项目,完善了iOS 8 | 版的从通知栏打开应用时调用的receiveNotificationIniOSCallback方法 9 | 10 | 11 | 12 | ---- 13 | **以下为官方原版文档** 14 | 15 | ---- 16 | 17 | ## JPush PhoneGap Plugin ## 18 | ###创建项目### 19 | 1. cordova create 文件夹名字 包名 应用名字 20 | 21 | cordova create Myproj com.myproj.jpush MyTestProj 22 | 23 | 2. 添加平台 24 | 25 | cd Myproj :不进入项目会出现[RangeError:Maximum call stack size exceeded] 26 | cordova platform add android 27 | cordova platform add ios 28 | 29 | ### Android使用PhoneGap/Cordova CLI自动安装 30 | 31 | 1. 使用git命令将jpush phonegap插件下载的本地,将这个目录标记为`$JPUSH_PLUGIN_DIR` 32 | 33 | git clone https://github.com/jpush/jpush-phonegap-plugin.git 34 | 35 | 2. 将`$JPUSH_PLUGIN_DIR/plugin.xml`文件中的AppKey替换为在Portal上注册该应用的的Key,例如(9fed5bcb7b9b87413678c407) 36 | 37 | 38 | 39 | 3. 在`$JPUSH_PLUGIN_DIR/src/android/JPushPlugin.java` 文件`import your.package.name.R`替换为在Portal上注册该应用的包名,例如(com.thi.pushtest) 40 | 41 | 42 | 4. cordova cli 添加jpush phonegap插件和依赖的device插件: 43 | 44 | cordova plugin add $JPUSH_PLUGIN_DIR 45 | cordova plugin add org.apache.cordova.device 46 | 47 | 48 | 5. 在js中调用函数,初始化jpush sdk 49 | 50 | window.plugins.jPushPlugin.init(); 51 | window.plugins.jPushPlugin.setDebugMode(true); 52 | 53 | 54 | ###IOS使用PhoneGap/Cordova CLI自动安装 55 | 56 | 1. 使用PhoneGap/Cordova CLI命令安装 57 | 58 | cordova plugin add https://github.com/jpush/jpush-phonegap-plugin.git 59 | cordova build ios 60 | 61 | 2. 修改Resources/PushConfig.plist文件 62 | 63 | 在APP_KEY和CHANNLE字段 分别添加您的appkey和channle 64 | 65 | 3. 添加监听系统事件,相应地调用 JPush SDK 提供的 API 来实现功能 66 | 67 | 68 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 69 | self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 70 | self.window.backgroundColor = [UIColor whiteColor]; 71 | [self.window makeKeyAndVisible]; 72 | // Required 73 | #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1 74 |    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { 75 |     //可以添加自定义categories 76 |     [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | 77 |                                                    UIUserNotificationTypeSound | 78 |                                                    UIUserNotificationTypeAlert) 79 |                                        categories:nil]; 80 |   } else { 81 |     //categories 必须为nil 82 |     [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | 83 |                                                    UIRemoteNotificationTypeSound | 84 |                                                    UIRemoteNotificationTypeAlert) 85 |                                        categories:nil]; 86 |   } 87 | #else 88 |     //categories 必须为nil 89 |   [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | 90 |                                                  UIRemoteNotificationTypeSound | 91 |                                                  UIRemoteNotificationTypeAlert) 92 |                                      categories:nil]; 93 | #endif 94 |     // Required 95 |     [APService setupWithOption:launchOptions]; 96 | return YES; 97 | } 98 | - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 99 | // Required 100 | [APService registerDeviceToken:deviceToken]; 101 | } 102 | - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 103 | // Required 104 | [APService handleRemoteNotification:userInfo]; 105 | } 106 | 107 | ###Android 手工安装### 108 | 1. 复制src/android/*.java 到cn/jpush/phonega/目录下(即:cn.jpush.phonegap的包下) 109 | 2. 复制src/android/armeabi/libjpush.so 到lib/armeabi/ 110 | 3. 复制src/android/jpush-sdk-release1.5.0.jar 到lib/ 111 | 4. 复制src/android/test_notification_layout.xml到res/layout/ 112 | 5. 复制src/android/jpush_notification_icon.png 到res/drawable/ 113 | 6. 修改 AndroidManifest.xml 在 manifest 节点下添加以下权限 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 130 | 131 | 7. 修改AndroidManifest.xml 在 manifest/application 节点下添加SDK相关组件声明 132 | 133 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 148 | 149 | 150 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | ### IOS手工安装 215 | 216 | 1. 添加src/ios/Plugins/到project中 217 | 2. 添加src/ios/lib/到project中 218 | 3. 设置 Search Paths 下的 User Header Search Paths 和 Library Search Paths 219 | 220 | 比如SDK文件夹(默认为lib)与工程文件在同一级目录下,则都设置为"$(SRCROOT)/[文件夹名称]"即可。 221 | 222 | 4. 确认一下的框架是存在的(Target -> Build Phases -> Link Binary With Libraries) 223 | 224 | CFNetwork.framework 225 | CoreFoundation.framework 226 | CoreTelephony.framework 227 | SystemConfiguration.framework 228 | CoreGraphics.framework 229 | Foundation.framework 230 | UIKit.framework 231 | 232 | 233 | 5. 在你的工程中创建一个新的Property List文件 234 | 235 | 并将其命名为PushConfig.plist,填入Portal为你的应用提供的APP_KEY等参数 236 | 237 | 238 | 6. 调用代码,监听系统事件,相应地调用 JPush SDK 提供的 API 来实现功能 239 | 240 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 241 | { 242 | self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 243 | self.window.backgroundColor = [UIColor whiteColor]; 244 | [self.window makeKeyAndVisible]; 245 | 246 | // Required 247 | [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | 248 | UIRemoteNotificationTypeSound | 249 | UIRemoteNotificationTypeAlert)]; 250 | // Required 251 | [APService setupWithOption:launchOptions]; 252 | 253 | return YES; 254 | } 255 | 256 | - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 257 | 258 | // Required 259 | [APService registerDeviceToken:deviceToken]; 260 | } 261 | 262 | - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 263 | 264 | // Required 265 | [APService handleRemoteNotification:userInfo]; 266 | } 267 | 268 | 269 | 7. 修改phonegap config.xml文件用来包含Plugin/内的插件 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 8. 复制www/PushNotification.js到工程的www目录下面 279 | 9. 在需要使用插件处加入 280 | 281 | 282 | 283 | ###示例 284 | 285 | 1. 完整的示例可以点击网页右侧的"Download Zip"下载,下载完成后在文件的"src/ios/example"文件夹内找到并拷贝以下文件 286 | 287 | src/ios/example/index.html to www/index.html 288 | src/ios/example/css/* to www/css 289 | src/ios/example/js/* to www/js 290 | 291 | ###关于'phonegap build'云服务 292 | 该项目基于cordova实现,目前无法使用'phonegap build'云服务进行打包,建议使用本地环境进行打包 293 | ###常见错误 294 | 1. androd 295 | 296 | eclipse中phonegap工程import之后出现:`Type CallbackContext cannot be resolved to a type` 297 | 解决方案:eclipse中右键单击工程名,Build Path->Config Build Path->Projects->选中 工程名称-CordovaLib->点击 add 298 | 299 | ### API说明 300 | 301 | 插件的API集中在JPushPlugin.js文件中,这个文件的位置如下 302 | 303 | * android:[YOUR__ANDROID_PROJECT]/assets/www/plugins/cn.jpush.phonegap.JPushPlugin/www 304 | * iOS:[YOUR_iOS_PROJEcT]/www/plugins/cn.jpush.phonegap.JPushPlugin/www 305 | 306 | 这里只说明public的函数 307 | 308 | 309 | #### API - setTagsWithAlias,setTags,setAlias 310 | 311 | 提供几个相关 API 用来设置别名(alias)与标签(tags)。 312 | 313 | 这几个 API 可以在 App 里任何地方调用。 314 | 315 | 别名 alias 316 | 317 | 为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。 318 | 319 | 每个用户只能指定一个别名。 320 | 321 | 同一个应用程序内,对不同的用户,建议取不同的别名。这样,尽可能根据别名来唯一确定用户。 322 | 323 | 系统不限定一个别名只能指定一个用户。如果一个别名被指定到了多个用户,当给指定这个别名发消息时,服务器端API会同时给这多个用户发送消息。 324 | 325 | 举例:在一个用户要登录的游戏中,可能设置别名为 userid。游戏运营时,发现该用户 3 天没有玩游戏了,则根据 userid 调用服务器端API发通知到客户端提醒用户。 326 | 327 | 标签 tag 328 | 329 | 为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发 Push 消息。 330 | 331 | 可为每个用户打多个标签。 332 | 333 | 不同应用程序、不同的用户,可以打同样的标签。 334 | 335 | 举例: game, old_page, women 336 | 337 | ##### 接口定义 338 | 339 | JPushPlugin.prototype.setTagsWithAlias = function(tags,alias) 340 | JPushPlugin.prototype.setTags = function(tags) 341 | JPushPlugin.prototype.setAlias = function(alias) 342 | 343 | #####使用平台 344 | android iOS 345 | 346 | 347 | ##### 参数说明 348 | * tags 349 | * 参数类型为数组 350 | * nil 此次调用不设置此值 351 | * 空集合表示取消之前的设置 352 | * 每次调用至少设置一个 tag,覆盖之前的设置,不是新增 353 | * 有效的标签组成:字母(区分大小写)、数字、下划线、汉字 354 | * 限制:每个 tag 命名长度限制为 40 字节,最多支持设置 100 个 tag,但总长度不得超过1K字节。(判断长度需采用UTF-8编码) 355 | * 单个设备最多支持设置 100 个 tag。App 全局 tag 数量无限制。 356 | * alias 357 | * 参数类型为字符串 358 | * nil 此次调用不设置此值 359 | * 空字符串 ("")表示取消之前的设置 360 | * 有效的别名组成:字母(区分大小写)、数字、下划线、汉字。 361 | * 限制:alias 命名长度限制为 40 字节。(判断长度需采用UTF-8编码) 362 | 363 | ##### 返回值说明 364 | 365 | 函数本身无返回值,但需要注册`jpush.setTagsWithAlias `事件来监听设置结果 366 | 367 | document.addEventListener("jpush.setTagsWithAlias", onTagsWithAlias, false); 368 | var onTagsWithAlias = function(event){ 369 | try{ 370 | console.log("onTagsWithAlias"); 371 | var result="result code:"+event.resultCode+" "; 372 | result+="tags:"+event.tags+" "; 373 | result+="alias:"+event.alias+" "; 374 | $("#tagAliasResult").html(result); 375 | } 376 | catch(exception){ 377 | console.log(exception) 378 | } 379 | } 380 | 381 | 382 | #####错误码定义 383 | 384 | 385 | |Code|描述|详细解释| 386 | |-|-|-| 387 | |6001| 无效的设置,tag/alias 不应参数都为 null|| 388 | |6002| 设置超时| 建议重试| 389 | |6003| alias| 字符串不合法 有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。| 390 | |6004| alias超长。最多 40个字节 中文 UTF-8 是 3 个字节| 391 | |6005| 某一个 tag 字符串不合法| 有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。| 392 | |6006| 某一个 tag 超长。|一个 tag 最多 40个字节 中文 UTF-8 是 3 个字节| 393 | |6007| tags 数量超出限制。最多 100个| 这是一台设备的限制。一个应用全局的标签数量无限制。| 394 | |6008| tag/alias 超出总长度限制。|总长度最多 1K 字节| 395 | |6011| 10s内设置tag或alias大于3次| 短时间内操作过于频繁| 396 | 397 | 398 | #### API - startLogPageView,stopLogPageView,beginLogPageView 399 | 400 | 本 API 用于“用户指定页面使用时长”的统计,并上报到服务器,在 Portal 上展示给开发者。页面统计集成正确,才能够获取正确的页面访问路径、访问深度(PV)的数据。 401 | 402 | ##### 接口定义 403 | JPushPlugin.prototype.startLogPageView = function(pageName) 404 | JPushPlugin.prototype.stopLogPageView = function(pageName) 405 | JPushPlugin.prototype.beginLogPageView = function(pageName,duration) 406 | 407 | #####平台 408 | iOS 409 | 410 | #####参数说明 411 | pageName 需要统计页面自定义名称 412 | duration 自定义的页面时间 413 | 414 | #####调用说明 415 | 应在所有的需要统计得页面得 viewWillAppear 和 viewWillDisappear 加入 startLogPageView 和 stopLogPageView 来统计当前页面的停留时间。 416 | 417 | 或者直接使用 beginLogPageView 来自定义加入页面和时间信息。 418 | 419 | 420 | #####返回值说明 421 | 无 422 | 423 | #####代码示例 424 | 425 | if(window.plugins.jPushPlugin.isPlatformIOS()){ 426 | window.plugins.jPushPlugin.beginLogPageView("newPage",5); 427 | window.plugins.jPushPlugin.startLogPageView("onePage"); 428 | window.plugins.jPushPlugin.stopLogPageView("onePage"); 429 | } 430 | 431 | 432 | 433 | #### API - setBadge,resetBadge 434 | 435 | badge是iOS用来标记应用程序状态的一个数字,出现在程序图标右上角。 JPush封装badge功能,允许应用上传badge值至JPush服务器,由JPush后台帮助管理每个用户所对应的推送badge值,简化了设置推送badge的操作。 436 | 437 | 实际应用中,开发者可以直接对badge值做增减操作,无需自己维护用户与badge值之间的对应关系。 438 | 439 | ##### 接口定义 440 | 441 | JPushPlugin.prototype.setBadge = function(value) 442 | JPushPlugin.prototype.resetBadge = function() 443 | 444 | `resetBadge相当于setBadge(0)` 445 | 446 | ##### 平台 447 | iOS 448 | 449 | ##### 参数说明 450 | 451 | value 取值范围:[0,99999] 452 | 453 | ##### 返回值 454 | 455 | 无,控制台会有log打印设置结果 456 | 457 | 458 | #####代码示例 459 | 460 | if(window.plugins.jPushPlugin.isPlatformIOS()){ 461 | window.plugins.jPushPlugin.setBadge(5); 462 | window.plugins.jPushPlugin.reSetBadge(); 463 | } 464 | #### API - setDebugModeFromIos 465 | 466 | API 用于开启Debug模式,显示更多的日志信息 467 | 468 | 建议调试时开启这个选项,不调试的时候注释这句代码,这个函数setLogOFF是相反的一对 469 | 470 | ##### 接口定义 471 | 472 | JPushPlugin.prototype.setDebugModeFromIos = function() 473 | 474 | ##### 平台 475 | iOS 476 | 477 | #####代码示例 478 | 479 | if(window.plugins.jPushPlugin.isPlatformIOS()){ 480 | window.plugins.jPushPlugin.setDebugModeFromIos(); 481 | } 482 | 483 | #### API - setLogOFF 484 | 485 | API用来关闭日志信息(除了必要的错误信息) 486 | 487 | 不需要任何调试信息的时候,调用此API (发布时建议调用此API,用来屏蔽日志信息,节省性能消耗) 488 | 489 | ##### 平台 490 | iOS 491 | 492 | ##### 接口定义 493 | 494 | JPushPlugin.prototype.setLogOFF = function() 495 | 496 | #####代码示例 497 | 498 | if(window.plugins.jPushPlugin.isPlatformIOS()){ 499 | window.plugins.jPushPlugin.setLogOFF(); 500 | } 501 | 502 | #### API - receiveMessageIniOSCallback 503 | 504 | 用于iOS收到应用内消息的回调函数(请注意和通知的区别),该函数不需要主动调用 505 | 506 | ##### 接口定义 507 | 508 | JPushPlugin.prototype.receiveMessageIniOSCallback = function(data) 509 | 510 | 511 | #####平台 512 | iOS 513 | 514 | #####参数说明 515 | 516 | - data 是一个js字符串使用如下代码解析,js具体key根据应用内消息来确定 517 | 518 | var bToObj = JSON.parse(data); 519 | 520 | #####返回值 521 | 无 522 | 523 | 524 | 525 | 526 | 527 | #### API - init 528 | 529 | 调用此API,用来 530 | JPush SDK 提供的推送服务是默认开启的。 531 | 532 | 533 | ##### 接口定义 534 | 535 | JPushPlugin.prototype.init = function() 536 | 537 | ##### 参数说明 538 | 无 539 | ##### 返回值 540 | 无 541 | 542 | 543 | #### API - setDebugMode 544 | 545 | 用于开启调试模式,可以查看集成JPush过程中的log,如果集成失败,可方便定位问题所在 546 | 547 | ##### 接口定义 548 | 549 | JPushPlugin.prototype.setDebugMode = function(mode) 550 | 551 | ##### 参数说明 552 | 553 | - num 保存的条数 554 | 555 | ##### 返回值 556 | 无 557 | 558 | 559 | 560 | #### API - stopPush 561 | 562 | 563 | 开发者App可以通过调用停止推送服务API来停止极光推送服务。当又需要使用极光推送服务时,则必须要调用恢复推送服务 API。 564 | 565 | 调用了本 API 后,JPush 推送服务完全被停止。具体表现为: 566 | 567 | - JPush Service 不在后台运行 568 | - 收不到推送消息 569 | - 不能通过 JPushInterface.init 恢复,需要调用resumePush恢复 570 | - 极光推送所有的其他 API 调用都无效 571 | 572 | 573 | 574 | ##### 接口定义 575 | 576 | JPushPlugin.prototype.stopPush = function() 577 | 578 | #####平台 579 | android 580 | 581 | 582 | ##### 参数说明 583 | 无 584 | ##### 返回值 585 | 无 586 | 587 | #### API - resumePush 588 | 589 | 恢复推送服务。 590 | 调用了此 API 后,极光推送完全恢复正常工作。 591 | 592 | ##### 接口定义 593 | 594 | JPushPlugin.prototype.resumePush = function() 595 | 596 | ##### 参数说明 597 | 无 598 | ##### 返回值 599 | 无 600 | 601 | #### API - isPushStopped 602 | 603 | 用来检查 Push Service 是否已经被停止 604 | 605 | ##### 接口定义 606 | 607 | JPushPlugin.prototype.isPushStopped = function(callback) 608 | 609 | 610 | #####平台 611 | android 612 | 613 | ##### 参数说明 614 | 615 | + callback 回调函数,用来通知JPush的推送服务是否开启 616 | 617 | var onCallback = function(data) { 618 | if(data>0){ 619 | //开启 620 | }else{ 621 | //关闭 622 | } 623 | } 624 | 625 | ##### 返回值 626 | 无 627 | 628 | 629 | 630 | #### API - setBasicPushNotificationBuilder,setCustomPushNotificationBuilder 631 | 632 | 当用户需要定制默认的通知栏样式时,则可调用此方法。 633 | 极光 Push SDK 提供了 2 个用于定制通知栏样式的构建类: 634 | 635 | - setBasicPushNotificationBuilder 636 | - Basic 用于定制 Android Notification 里的 defaults / flags / icon 等基础样式(行为) 637 | - setCustomPushNotificationBuilder 638 | - 继承 Basic 进一步让开发者定制 Notification Layout 639 | 640 | 如果不调用此方法定制,则极光Push SDK 默认的通知栏样式是:Android标准的通知栏提示。 641 | 642 | #####平台 643 | android 644 | 645 | ##### 接口定义 646 | 647 | JPushPlugin.prototype.setBasicPushNotificationBuilder = function() 648 | JPushPlugin.prototype.setCustomPushNotificationBuilder = function() 649 | 650 | #### 参数说明 651 | 652 | 无 653 | 654 | ##### 返回值 655 | 656 | 无 657 | 658 | #### API - clearAllNotification 659 | 660 | 推送通知到客户端时,由 JPush SDK 展现通知到通知栏上。 661 | 662 | 此 API 提供清除通知的功能,包括:清除所有 JPush 展现的通知(不包括非 JPush SDK 展现的) 663 | 664 | 665 | ##### 接口定义 666 | 667 | JPushPlugin.prototype.clearAllNotification = function() 668 | 669 | #####平台 670 | android 671 | 672 | ##### 参数说明 673 | 无 674 | ##### 返回值 675 | 无 676 | 677 | #### API - setLatestNotificationNum 678 | 679 | 通过极光推送,推送了很多通知到客户端时,如果用户不去处理,就会有很多保留在那里。 680 | 681 | 新版本 SDK (v1.3.0) 增加此功能,限制保留的通知条数。默认为保留最近 5 条通知。 682 | 683 | 开发者可通过调用此 API 来定义为不同的数量。 684 | 685 | 686 | 687 | ##### 接口定义 688 | 689 | JPushPlugin.prototype.setLatestNotificationNum = function(num) 690 | 691 | 692 | #####平台 693 | android 694 | 695 | ##### 参数说明 696 | 697 | - num 保存的条数 698 | 699 | ##### 返回值 700 | 无 701 | 702 | 703 | #### API - addLocalNotification,removeLocalNotification,clearLocalNotifications 704 | 705 | 706 | 本地通知API不依赖于网络,无网条件下依旧可以触发 707 | 708 | 本地通知与网络推送的通知是相互独立的,不受保留最近通知条数上限的限制 709 | 710 | 本地通知的定时时间是自发送时算起的,不受中间关机等操作的影响 711 | 712 | 713 | 三个接口的功能分别为:添加一个本地通知,删除一个本地通知,删除所有的本地通知 714 | 715 | #####接口定义 716 | 717 | JPushPlugin.prototype.addLocalNotification = function(builderId, 718 | content, 719 | title, 720 | notificaitonID, 721 | broadcastTime, 722 | extras) 723 | JPushPlugin.prototype.removeLocalNotification = function(notificationID) 724 | JPushPlugin.prototype.clearLocalNotifications = function() 725 | 726 | #####平台 727 | android 728 | 729 | ##### 参数说明 730 | 731 | - builderId 设置本地通知样式 732 | - content 设置本地通知的content 733 | - title 设置本地通知的title 734 | - notificaitonID 设置本地通知的ID 735 | - broadcastTime 设置本地通知触发时间,为距离当前时间的数值,单位是毫秒 736 | - extras 设置额外的数据信息extras为json字符串 737 | 738 | ##### 返回值说明 739 | 740 | 无 741 | 742 | 743 | #### API - receiveMessageInAndroidCallback 744 | 745 | 用于android收到应用内消息的回调函数(请注意和通知的区别),该函数不需要主动调用 746 | 747 | ##### 接口定义 748 | 749 | JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data) 750 | 751 | #####平台 752 | android 753 | 754 | ##### 参数说明 755 | - data 接收到的js字符串,包含的key:value请进入该函数体查看 756 | 757 | ##### 返回值 758 | 无 759 | 760 | #### API - onResume,onPause 761 | 762 | 本 API 用于“用户使用时长”,“活跃用户”,“用户打开次数”的统计,并上报到服务器,在 Portal 上展示给开发者。 763 | 764 | 765 | ##### 接口定义 766 | 767 | JPushPlugin.prototype.onResume = function() 768 | JPushPlugin.prototype.onPause = function() 769 | 770 | #####平台 771 | android 772 | 773 | ##### 参数说明 774 | - 无 775 | 776 | ##### 返回值 777 | 无 778 | 779 | #### API - reportNotificationOpened 780 | 781 | 用于上报用户的通知栏被打开,或者用于上报用户自定义消息被展示等客户端需要统计的事件。 782 | 783 | 784 | ##### 接口定义 785 | 786 | JPushPlugin.prototype.reportNotificationOpened = function(msgID) 787 | 788 | #####平台 789 | android 790 | 791 | ##### 参数说明 792 | - 无 793 | 794 | ##### 返回值 795 | 无 796 | 797 | #### API - openNotificationInAndroidCallback 798 | 799 | 当点击android手机的通知栏进入应用程序时,会调用这个函数,这个函数不需要主动调用,是作为回调函数来用的 800 | 801 | 802 | ##### 接口定义 803 | 804 | JPushPlugin.prototype.openNotificationInAndroidCallback = function(data) 805 | 806 | #####平台 807 | android 808 | 809 | ##### 参数说明 810 | - data js字符串 811 | 812 | ##### 返回值 813 | 无 814 | 815 | 816 | 817 | 818 | -------------------------------------------------------------------------------- /example/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/donghongfei/jpush-phonegap-plugin/fb5b6712087ab93908ded4c0cbb65d804a19508b/example/.DS_Store -------------------------------------------------------------------------------- /example/css/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/donghongfei/jpush-phonegap-plugin/fb5b6712087ab93908ded4c0cbb65d804a19508b/example/css/.DS_Store -------------------------------------------------------------------------------- /example/css/index.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one 3 | * or more contributor license agreements. See the NOTICE file 4 | * distributed with this work for additional information 5 | * regarding copyright ownership. The ASF licenses this file 6 | * to you under the Apache License, Version 2.0 (the 7 | * "License"); you may not use this file except in compliance 8 | * with the License. You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, 13 | * software distributed under the License is distributed on an 14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | * KIND, either express or implied. See the License for the 16 | * specific language governing permissions and limitations 17 | * under the License. 18 | */ 19 | * { 20 | -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */ 21 | } 22 | 23 | body { 24 | -webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */ 25 | -webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */ 26 | -webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */ 27 | background-color:#E4E4E4; 28 | background-image:linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); 29 | background-image:-webkit-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); 30 | background-image:-ms-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%); 31 | background-image:-webkit-gradient( 32 | linear, 33 | left top, 34 | left bottom, 35 | color-stop(0, #A7A7A7), 36 | color-stop(0.51, #E4E4E4) 37 | ); 38 | background-attachment:fixed; 39 | font-family:'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif; 40 | font-size:12px; 41 | height:100%; 42 | margin:0px; 43 | padding:0px; 44 | text-transform:uppercase; 45 | width:100%; 46 | } 47 | 48 | /* Portrait layout (default) */ 49 | .app { 50 | background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */ 51 | position:absolute; /* position in the center of the screen */ 52 | left:50%; 53 | top:50%; 54 | height:50px; /* text area height */ 55 | width:225px; /* text area width */ 56 | text-align:center; 57 | padding:180px 0px 0px 0px; /* image height is 200px (bottom 20px are overlapped with text) */ 58 | margin:-115px 0px 0px -112px; /* offset vertical: half of image height and text area height */ 59 | /* offset horizontal: half of text area width */ 60 | } 61 | 62 | /* Landscape layout (with min-width) */ 63 | @media screen and (min-aspect-ratio: 1/1) and (min-width:400px) { 64 | .app { 65 | background-position:left center; 66 | padding:75px 0px 75px 170px; /* padding-top + padding-bottom + text area = image height */ 67 | margin:-90px 0px 0px -198px; /* offset vertical: half of image height */ 68 | /* offset horizontal: half of image width and text area width */ 69 | } 70 | } 71 | 72 | h1 { 73 | font-size:24px; 74 | font-weight:normal; 75 | margin:0px; 76 | overflow:visible; 77 | padding:0px; 78 | text-align:center; 79 | } 80 | 81 | .event { 82 | border-radius:4px; 83 | -webkit-border-radius:4px; 84 | color:#FFFFFF; 85 | font-size:12px; 86 | margin:0px 30px; 87 | padding:2px 0px; 88 | } 89 | 90 | .event.listening { 91 | background-color:#333333; 92 | display:block; 93 | } 94 | 95 | .event.received { 96 | background-color:#4B946A; 97 | display:none; 98 | } 99 | 100 | @keyframes fade { 101 | from { opacity: 1.0; } 102 | 50% { opacity: 0.4; } 103 | to { opacity: 1.0; } 104 | } 105 | 106 | @-webkit-keyframes fade { 107 | from { opacity: 1.0; } 108 | 50% { opacity: 0.4; } 109 | to { opacity: 1.0; } 110 | } 111 | 112 | .blink { 113 | animation:fade 3000ms infinite; 114 | -webkit-animation:fade 3000ms infinite; 115 | } 116 | -------------------------------------------------------------------------------- /example/css/jquery.mobile-1.1.1.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Mobile Framework 1.1.1 1981b3f5ec22675ae47df8f0bdf9622e7780e90e 3 | * http://jquerymobile.com 4 | * 5 | * Copyright 2012 jQuery Foundation and other contributors 6 | * Dual licensed under the MIT or GPL Version 2 licenses. 7 | * http://jquery.org/license 8 | * 9 | */ 10 | /* Swatches */ 11 | /* A 12 | -----------------------------------------------------------------------------------------------------------*/ 13 | .ui-bar-a { 14 | border: 1px solid #333 /*{a-bar-border}*/; 15 | background: #111111 /*{a-bar-background-color}*/; 16 | color: #ffffff /*{a-bar-color}*/; 17 | font-weight: bold; 18 | text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000000 /*{a-bar-shadow-color}*/; 19 | background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */ 20 | background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ 21 | background-image: -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */ 22 | background-image: -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */ 23 | background-image: -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */ 24 | background-image: linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); 25 | } 26 | .ui-bar-a, 27 | .ui-bar-a input, 28 | .ui-bar-a select, 29 | .ui-bar-a textarea, 30 | .ui-bar-a button { 31 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 32 | } 33 | .ui-bar-a .ui-link-inherit { 34 | color: #fff /*{a-bar-color}*/; 35 | } 36 | .ui-bar-a a.ui-link { 37 | color: #7cc4e7 /*{a-bar-link-color}*/; 38 | font-weight: bold; 39 | } 40 | .ui-bar-a a.ui-link:visited { 41 | color: #2489CE /*{a-bar-link-visited}*/; 42 | } 43 | .ui-bar-a a.ui-link:hover { 44 | color: #2489CE /*{a-bar-link-hover}*/; 45 | } 46 | .ui-bar-a a.ui-link:active { 47 | color: #2489CE /*{a-bar-link-active}*/; 48 | } 49 | .ui-body-a, 50 | .ui-overlay-a { 51 | border: 1px solid #444 /*{a-body-border}*/; 52 | background: #222 /*{a-body-background-color}*/; 53 | color: #fff /*{a-body-color}*/; 54 | text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/; 55 | font-weight: normal; 56 | background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */ 57 | background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ 58 | background-image: -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */ 59 | background-image: -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */ 60 | background-image: -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */ 61 | background-image: linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); 62 | } 63 | .ui-overlay-a { 64 | background-image: none; 65 | border-width: 0; 66 | } 67 | .ui-body-a, 68 | .ui-body-a input, 69 | .ui-body-a select, 70 | .ui-body-a textarea, 71 | .ui-body-a button { 72 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 73 | } 74 | .ui-body-a .ui-link-inherit { 75 | color: #fff /*{a-body-color}*/; 76 | } 77 | .ui-body-a .ui-link { 78 | color: #2489CE /*{a-body-link-color}*/; 79 | font-weight: bold; 80 | } 81 | .ui-body-a .ui-link:visited { 82 | color: #2489CE /*{a-body-link-visited}*/; 83 | } 84 | .ui-body-a .ui-link:hover { 85 | color: #2489CE /*{a-body-link-hover}*/; 86 | } 87 | .ui-body-a .ui-link:active { 88 | color: #2489CE /*{a-body-link-active}*/; 89 | } 90 | .ui-btn-up-a { 91 | border: 1px solid #111 /*{a-bup-border}*/; 92 | background: #333 /*{a-bup-background-color}*/; 93 | font-weight: bold; 94 | color: #fff /*{a-bup-color}*/; 95 | text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/; 96 | background-image: -webkit-gradient(linear, left top, left bottom, from( #444444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */ 97 | background-image: -webkit-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ 98 | background-image: -moz-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */ 99 | background-image: -ms-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */ 100 | background-image: -o-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */ 101 | background-image: linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); 102 | } 103 | .ui-btn-up-a:visited, 104 | .ui-btn-up-a a.ui-link-inherit { 105 | color: #fff /*{a-bup-color}*/; 106 | } 107 | .ui-btn-hover-a { 108 | border: 1px solid #000 /*{a-bhover-border}*/; 109 | background: #444444 /*{a-bhover-background-color}*/; 110 | font-weight: bold; 111 | color: #fff /*{a-bhover-color}*/; 112 | text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/; 113 | background-image: -webkit-gradient(linear, left top, left bottom, from( #555555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */ 114 | background-image: -webkit-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ 115 | background-image: -moz-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */ 116 | background-image: -ms-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */ 117 | background-image: -o-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */ 118 | background-image: linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); 119 | } 120 | .ui-btn-hover-a:visited, 121 | .ui-btn-hover-a:hover, 122 | .ui-btn-hover-a a.ui-link-inherit { 123 | color: #fff /*{a-bhover-color}*/; 124 | } 125 | .ui-btn-down-a { 126 | border: 1px solid #000 /*{a-bdown-border}*/; 127 | background: #222 /*{a-bdown-background-color}*/; 128 | font-weight: bold; 129 | color: #fff /*{a-bdown-color}*/; 130 | text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/; 131 | background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */ 132 | background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ 133 | background-image: -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */ 134 | background-image: -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */ 135 | background-image: -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */ 136 | background-image: linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); 137 | } 138 | .ui-btn-down-a:visited, 139 | .ui-btn-down-a:hover, 140 | .ui-btn-down-a a.ui-link-inherit { 141 | color: #fff /*{a-bdown-color}*/; 142 | } 143 | .ui-btn-up-a, 144 | .ui-btn-hover-a, 145 | .ui-btn-down-a { 146 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 147 | text-decoration: none; 148 | } 149 | /* B 150 | -----------------------------------------------------------------------------------------------------------*/ 151 | .ui-bar-b { 152 | border: 1px solid #456f9a /*{b-bar-border}*/; 153 | background: #5e87b0 /*{b-bar-background-color}*/; 154 | color: #fff /*{b-bar-color}*/; 155 | font-weight: bold; 156 | text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/; 157 | background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */ 158 | background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ 159 | background-image: -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */ 160 | background-image: -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */ 161 | background-image: -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */ 162 | background-image: linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); 163 | } 164 | .ui-bar-b, 165 | .ui-bar-b input, 166 | .ui-bar-b select, 167 | .ui-bar-b textarea, 168 | .ui-bar-b button { 169 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 170 | } 171 | .ui-bar-b .ui-link-inherit { 172 | color: #fff /*{b-bar-color}*/; 173 | } 174 | .ui-bar-b a.ui-link { 175 | color: #ddf0f8 /*{b-bar-link-color}*/; 176 | font-weight: bold; 177 | } 178 | .ui-bar-b a.ui-link:visited { 179 | color: #ddf0f8 /*{b-bar-link-visited}*/; 180 | } 181 | .ui-bar-b a.ui-link:hover { 182 | color: #ddf0f8 /*{b-bar-link-hover}*/; 183 | } 184 | .ui-bar-b a.ui-link:active { 185 | color: #ddf0f8 /*{b-bar-link-active}*/; 186 | } 187 | .ui-body-b, 188 | .ui-overlay-b { 189 | border: 1px solid #999 /*{b-body-border}*/; 190 | background: #f3f3f3 /*{b-body-background-color}*/; 191 | color: #222222 /*{b-body-color}*/; 192 | text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/; 193 | font-weight: normal; 194 | background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */ 195 | background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ 196 | background-image: -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */ 197 | background-image: -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */ 198 | background-image: -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */ 199 | background-image: linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); 200 | } 201 | .ui-overlay-b { 202 | background-image: none; 203 | border-width: 0; 204 | } 205 | .ui-body-b, 206 | .ui-body-b input, 207 | .ui-body-b select, 208 | .ui-body-b textarea, 209 | .ui-body-b button { 210 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 211 | } 212 | .ui-body-b .ui-link-inherit { 213 | color: #333333 /*{b-body-color}*/; 214 | } 215 | .ui-body-b .ui-link { 216 | color: #2489CE /*{b-body-link-color}*/; 217 | font-weight: bold; 218 | } 219 | .ui-body-b .ui-link:visited { 220 | color: #2489CE /*{b-body-link-visited}*/; 221 | } 222 | .ui-body-b .ui-link:hover { 223 | color: #2489CE /*{b-body-link-hover}*/; 224 | } 225 | .ui-body-b .ui-link:active { 226 | color: #2489CE /*{b-body-link-active}*/; 227 | } 228 | .ui-btn-up-b { 229 | border: 1px solid #044062 /*{b-bup-border}*/; 230 | background: #396b9e /*{b-bup-background-color}*/; 231 | font-weight: bold; 232 | color: #fff /*{b-bup-color}*/; 233 | text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/; 234 | background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */ 235 | background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ 236 | background-image: -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */ 237 | background-image: -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */ 238 | background-image: -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */ 239 | background-image: linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); 240 | } 241 | .ui-btn-up-b:visited, 242 | .ui-btn-up-b a.ui-link-inherit { 243 | color: #fff /*{b-bup-color}*/; 244 | } 245 | .ui-btn-hover-b { 246 | border: 1px solid #00415e /*{b-bhover-border}*/; 247 | background: #4b88b6 /*{b-bhover-background-color}*/; 248 | font-weight: bold; 249 | color: #fff /*{b-bhover-color}*/; 250 | text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/; 251 | background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */ 252 | background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ 253 | background-image: -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */ 254 | background-image: -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */ 255 | background-image: -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */ 256 | background-image: linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); 257 | } 258 | .ui-btn-hover-b:visited, 259 | .ui-btn-hover-a:hover, 260 | .ui-btn-hover-b a.ui-link-inherit { 261 | color: #fff /*{b-bhover-color}*/; 262 | } 263 | .ui-btn-down-b { 264 | border: 1px solid #225377 /*{b-bdown-border}*/; 265 | background: #4e89c5 /*{b-bdown-background-color}*/; 266 | font-weight: bold; 267 | color: #fff /*{b-bdown-color}*/; 268 | text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/; 269 | background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */ 270 | background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ 271 | background-image: -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */ 272 | background-image: -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */ 273 | background-image: -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */ 274 | background-image: linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); 275 | } 276 | .ui-btn-down-b:visited, 277 | .ui-btn-down-b:hover, 278 | .ui-btn-down-b a.ui-link-inherit { 279 | color: #fff /*{b-bdown-color}*/; 280 | } 281 | .ui-btn-up-b, 282 | .ui-btn-hover-b, 283 | .ui-btn-down-b { 284 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 285 | text-decoration: none; 286 | } 287 | /* C 288 | -----------------------------------------------------------------------------------------------------------*/ 289 | .ui-bar-c { 290 | border: 1px solid #B3B3B3 /*{c-bar-border}*/; 291 | background: #eeeeee /*{c-bar-background-color}*/; 292 | color: #3E3E3E /*{c-bar-color}*/; 293 | font-weight: bold; 294 | text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #fff /*{c-bar-shadow-color}*/; 295 | background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */ 296 | background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ 297 | background-image: -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */ 298 | background-image: -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */ 299 | background-image: -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */ 300 | background-image: linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); 301 | } 302 | .ui-bar-c .ui-link-inherit { 303 | color: #3E3E3E /*{c-bar-color}*/; 304 | } 305 | .ui-bar-c a.ui-link { 306 | color: #7cc4e7 /*{c-bar-link-color}*/; 307 | font-weight: bold; 308 | } 309 | .ui-bar-c a.ui-link:visited { 310 | color: #2489CE /*{c-bar-link-visited}*/; 311 | } 312 | .ui-bar-c a.ui-link:hover { 313 | color: #2489CE /*{c-bar-link-hover}*/; 314 | } 315 | .ui-bar-c a.ui-link:active { 316 | color: #2489CE /*{c-bar-link-active}*/; 317 | } 318 | .ui-bar-c, 319 | .ui-bar-c input, 320 | .ui-bar-c select, 321 | .ui-bar-c textarea, 322 | .ui-bar-c button { 323 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 324 | } 325 | .ui-body-c, 326 | .ui-overlay-c { 327 | border: 1px solid #aaa /*{c-body-border}*/; 328 | color: #333333 /*{c-body-color}*/; 329 | text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/; 330 | background: #f9f9f9 /*{c-body-background-color}*/; 331 | background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eeeeee /*{c-body-background-end}*/)); /* Saf4+, Chrome */ 332 | background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ 333 | background-image: -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* FF3.6 */ 334 | background-image: -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* IE10 */ 335 | background-image: -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Opera 11.10+ */ 336 | background-image: linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); 337 | } 338 | .ui-overlay-c { 339 | background-image: none; 340 | border-width: 0; 341 | } 342 | .ui-body-c, 343 | .ui-body-c input, 344 | .ui-body-c select, 345 | .ui-body-c textarea, 346 | .ui-body-c button { 347 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 348 | } 349 | .ui-body-c .ui-link-inherit { 350 | color: #333333 /*{c-body-color}*/; 351 | } 352 | .ui-body-c .ui-link { 353 | color: #2489CE /*{c-body-link-color}*/; 354 | font-weight: bold; 355 | } 356 | .ui-body-c .ui-link:visited { 357 | color: #2489CE /*{c-body-link-visited}*/; 358 | } 359 | .ui-body-c .ui-link:hover { 360 | color: #2489CE /*{c-body-link-hover}*/; 361 | } 362 | .ui-body-c .ui-link:active { 363 | color: #2489CE /*{c-body-link-active}*/; 364 | } 365 | .ui-btn-up-c { 366 | border: 1px solid #ccc /*{c-bup-border}*/; 367 | background: #eee /*{c-bup-background-color}*/; 368 | font-weight: bold; 369 | color: #222 /*{c-bup-color}*/; 370 | text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/; 371 | background-image: -webkit-gradient(linear, left top, left bottom, from( #ffffff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */ 372 | background-image: -webkit-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ 373 | background-image: -moz-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */ 374 | background-image: -ms-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */ 375 | background-image: -o-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */ 376 | background-image: linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); 377 | } 378 | .ui-btn-up-c:visited, 379 | .ui-btn-up-c a.ui-link-inherit { 380 | color: #2F3E46 /*{c-bup-color}*/; 381 | } 382 | .ui-btn-hover-c { 383 | border: 1px solid #bbb /*{c-bhover-border}*/; 384 | background: #dfdfdf /*{c-bhover-background-color}*/; 385 | font-weight: bold; 386 | color: #222 /*{c-bhover-color}*/; 387 | text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/; 388 | background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */ 389 | background-image: -webkit-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ 390 | background-image: -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */ 391 | background-image: -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */ 392 | background-image: -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */ 393 | background-image: linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); 394 | } 395 | .ui-btn-hover-c:visited, 396 | .ui-btn-hover-c:hover, 397 | .ui-btn-hover-c a.ui-link-inherit { 398 | color: #2F3E46 /*{c-bhover-color}*/; 399 | } 400 | .ui-btn-down-c { 401 | border: 1px solid #bbb /*{c-bdown-border}*/; 402 | background: #d6d6d6 /*{c-bdown-background-color}*/; 403 | font-weight: bold; 404 | color: #222 /*{c-bdown-color}*/; 405 | text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/; 406 | background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */ 407 | background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ 408 | background-image: -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */ 409 | background-image: -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */ 410 | background-image: -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */ 411 | background-image: linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); 412 | } 413 | .ui-btn-down-c:visited, 414 | .ui-btn-down-c:hover, 415 | .ui-btn-down-c a.ui-link-inherit { 416 | color: #2F3E46 /*{c-bdown-color}*/; 417 | } 418 | .ui-btn-up-c, 419 | .ui-btn-hover-c, 420 | .ui-btn-down-c { 421 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 422 | text-decoration: none; 423 | } 424 | /* D 425 | -----------------------------------------------------------------------------------------------------------*/ 426 | .ui-bar-d { 427 | border: 1px solid #bbb /*{d-bar-border}*/; 428 | background: #bbb /*{d-bar-background-color}*/; 429 | color: #333 /*{d-bar-color}*/; 430 | text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/; 431 | background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ 432 | background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ 433 | background-image: -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */ 434 | background-image: -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */ 435 | background-image: -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */ 436 | background-image: linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); 437 | } 438 | .ui-bar-d, 439 | .ui-bar-d input, 440 | .ui-bar-d select, 441 | .ui-bar-d textarea, 442 | .ui-bar-d button { 443 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 444 | } 445 | .ui-bar-d .ui-link-inherit { 446 | color: #333333 /*{d-bar-color}*/; 447 | } 448 | .ui-bar-d a.ui-link { 449 | color: #2489CE /*{d-bar-link-color}*/; 450 | font-weight: bold; 451 | } 452 | .ui-bar-d a.ui-link:visited { 453 | color: #2489CE /*{d-bar-link-visited}*/; 454 | } 455 | .ui-bar-d a.ui-link:hover { 456 | color: #2489CE /*{d-bar-link-hover}*/; 457 | } 458 | .ui-bar-d a.ui-link:active { 459 | color: #2489CE /*{d-bar-link-active}*/; 460 | } 461 | .ui-body-d, 462 | .ui-overlay-d { 463 | border: 1px solid #bbb /*{d-body-border}*/; 464 | color: #333333 /*{d-body-color}*/; 465 | text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ #fff /*{d-body-shadow-color}*/; 466 | background: #ffffff /*{d-body-background-color}*/; 467 | background-image: -webkit-gradient(linear, left top, left bottom, from( #fff), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */ 468 | background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ 469 | background-image: -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */ 470 | background-image: -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */ 471 | background-image: -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */ 472 | background-image: linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); 473 | } 474 | .ui-overlay-d { 475 | background-image: none; 476 | border-width: 0; 477 | } 478 | .ui-body-d, 479 | .ui-body-d input, 480 | .ui-body-d select, 481 | .ui-body-d textarea, 482 | .ui-body-d button { 483 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 484 | } 485 | .ui-body-d .ui-link-inherit { 486 | color: #333333 /*{d-body-color}*/; 487 | } 488 | .ui-body-d .ui-link { 489 | color: #2489CE /*{d-body-link-color}*/; 490 | font-weight: bold; 491 | } 492 | .ui-body-d .ui-link:visited { 493 | color: #2489CE /*{d-body-link-visited}*/; 494 | } 495 | .ui-body-d .ui-link:hover { 496 | color: #2489CE /*{d-body-link-hover}*/; 497 | } 498 | .ui-body-d .ui-link:active { 499 | color: #2489CE /*{d-body-link-active}*/; 500 | } 501 | .ui-btn-up-d { 502 | border: 1px solid #bbb /*{d-bup-border}*/; 503 | background: #fff /*{d-bup-background-color}*/; 504 | font-weight: bold; 505 | color: #333 /*{d-bup-color}*/; 506 | text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/; 507 | background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */ 508 | background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ 509 | background-image: -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */ 510 | background-image: -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */ 511 | background-image: -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */ 512 | background-image: linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); 513 | } 514 | .ui-btn-up-d:visited, 515 | .ui-btn-up-d a.ui-link-inherit { 516 | color: #333 /*{d-bup-color}*/; 517 | } 518 | .ui-btn-hover-d { 519 | border: 1px solid #aaa /*{d-bhover-border}*/; 520 | background: #eeeeee /*{d-bhover-background-color}*/; 521 | font-weight: bold; 522 | color: #333 /*{d-bhover-color}*/; 523 | cursor: pointer; 524 | text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ #fff /*{d-bhover-shadow-color}*/; 525 | background-image: -webkit-gradient(linear, left top, left bottom, from( #eee), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */ 526 | background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ 527 | background-image: -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */ 528 | background-image: -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */ 529 | background-image: -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */ 530 | background-image: linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); 531 | } 532 | .ui-btn-hover-d:visited, 533 | .ui-btn-hover-d:hover, 534 | .ui-btn-hover-d a.ui-link-inherit { 535 | color: #333 /*{d-bhover-color}*/; 536 | } 537 | .ui-btn-down-d { 538 | border: 1px solid #aaa /*{d-bdown-border}*/; 539 | background: #eee /*{d-bdown-background-color}*/; 540 | font-weight: bold; 541 | color: #333 /*{d-bdown-color}*/; 542 | text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ #ffffff /*{d-bdown-shadow-color}*/; 543 | background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */ 544 | background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ 545 | background-image: -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */ 546 | background-image: -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */ 547 | background-image: -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */ 548 | background-image: linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); 549 | } 550 | .ui-btn-down-d:visited, 551 | .ui-btn-down-d:hover, 552 | .ui-btn-down-d a.ui-link-inherit { 553 | color: #333 /*{d-bdown-color}*/; 554 | } 555 | .ui-btn-up-d, 556 | .ui-btn-hover-d, 557 | .ui-btn-down-d { 558 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 559 | text-decoration: none; 560 | } 561 | /* E 562 | -----------------------------------------------------------------------------------------------------------*/ 563 | .ui-bar-e { 564 | border: 1px solid #F7C942 /*{e-bar-border}*/; 565 | background: #fadb4e /*{e-bar-background-color}*/; 566 | color: #333 /*{e-bar-color}*/; 567 | text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #fff /*{e-bar-shadow-color}*/; 568 | background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ 569 | background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ 570 | background-image: -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */ 571 | background-image: -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */ 572 | background-image: -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */ 573 | background-image: linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); 574 | } 575 | .ui-bar-e, 576 | .ui-bar-e input, 577 | .ui-bar-e select, 578 | .ui-bar-e textarea, 579 | .ui-bar-e button { 580 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 581 | } 582 | .ui-bar-e .ui-link-inherit { 583 | color: #333333 /*{e-bar-color}*/; 584 | } 585 | .ui-bar-e a.ui-link { 586 | color: #2489CE /*{e-bar-link-color}*/; 587 | font-weight: bold; 588 | } 589 | .ui-bar-e a.ui-link:visited { 590 | color: #2489CE /*{e-bar-link-visited}*/; 591 | } 592 | .ui-bar-e a.ui-link:hover { 593 | color: #2489CE /*{e-bar-link-hover}*/; 594 | } 595 | .ui-bar-e a.ui-link:active { 596 | color: #2489CE /*{e-bar-link-active}*/; 597 | } 598 | .ui-body-e, 599 | .ui-overlay-e { 600 | border: 1px solid #F7C942 /*{e-body-border}*/; 601 | color: #222222 /*{e-body-color}*/; 602 | text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ #fff /*{e-body-shadow-color}*/; 603 | background: #fff9df /*{e-body-background-color}*/; 604 | background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ 605 | background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ 606 | background-image: -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */ 607 | background-image: -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */ 608 | background-image: -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */ 609 | background-image: linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); 610 | } 611 | .ui-overlay-e { 612 | background-image: none; 613 | border-width: 0; 614 | } 615 | .ui-body-e, 616 | .ui-body-e input, 617 | .ui-body-e select, 618 | .ui-body-e textarea, 619 | .ui-body-e button { 620 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 621 | } 622 | .ui-body-e .ui-link-inherit { 623 | color: #333333 /*{e-body-color}*/; 624 | } 625 | .ui-body-e .ui-link { 626 | color: #2489CE /*{e-body-link-color}*/; 627 | font-weight: bold; 628 | } 629 | .ui-body-e .ui-link:visited { 630 | color: #2489CE /*{e-body-link-visited}*/; 631 | } 632 | .ui-body-e .ui-link:hover { 633 | color: #2489CE /*{e-body-link-hover}*/; 634 | } 635 | .ui-body-e .ui-link:active { 636 | color: #2489CE /*{e-body-link-active}*/; 637 | } 638 | .ui-btn-up-e { 639 | border: 1px solid #F4C63f /*{e-bup-border}*/; 640 | background: #fadb4e /*{e-bup-background-color}*/; 641 | font-weight: bold; 642 | color: #222 /*{e-bup-color}*/; 643 | text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ #fff /*{e-bup-shadow-color}*/; 644 | background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */ 645 | background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ 646 | background-image: -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */ 647 | background-image: -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */ 648 | background-image: -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */ 649 | background-image: linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); 650 | } 651 | .ui-btn-up-e:visited, 652 | .ui-btn-up-e a.ui-link-inherit { 653 | color: #222 /*{e-bup-color}*/; 654 | } 655 | .ui-btn-hover-e { 656 | border: 1px solid #F2C43d /*{e-bhover-border}*/; 657 | background: #fbe26f /*{e-bhover-background-color}*/; 658 | font-weight: bold; 659 | color: #111 /*{e-bhover-color}*/; 660 | text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ #fff /*{e-bhover-shadow-color}*/; 661 | background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */ 662 | background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ 663 | background-image: -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */ 664 | background-image: -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */ 665 | background-image: -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */ 666 | background-image: linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); 667 | } 668 | .ui-btn-hover-e:visited, 669 | .ui-btn-hover-e:hover, 670 | .ui-btn-hover-e a.ui-link-inherit { 671 | color: #333 /*{e-bhover-color}*/; 672 | } 673 | .ui-btn-down-e { 674 | border: 1px solid #F2C43d /*{e-bdown-border}*/; 675 | background: #fceda7 /*{e-bdown-background-color}*/; 676 | font-weight: bold; 677 | color: #111 /*{e-bdown-color}*/; 678 | text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ #ffffff /*{e-bdown-shadow-color}*/; 679 | background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */ 680 | background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ 681 | background-image: -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */ 682 | background-image: -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */ 683 | background-image: -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */ 684 | background-image: linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); 685 | } 686 | .ui-btn-down-e:visited, 687 | .ui-btn-down-e:hover, 688 | .ui-btn-down-e a.ui-link-inherit { 689 | color: #333 /*{e-bdown-color}*/; 690 | } 691 | .ui-btn-up-e, 692 | .ui-btn-hover-e, 693 | .ui-btn-down-e { 694 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 695 | text-decoration: none; 696 | } 697 | /* Structure */ 698 | /* links within "buttons" 699 | -----------------------------------------------------------------------------------------------------------*/ 700 | a.ui-link-inherit { 701 | text-decoration: none !important; 702 | } 703 | /* Active class used as the "on" state across all themes 704 | -----------------------------------------------------------------------------------------------------------*/ 705 | .ui-btn-active { 706 | border: 1px solid #2373a5 /*{global-active-border}*/; 707 | background: #5393c5 /*{global-active-background-color}*/; 708 | font-weight: bold; 709 | color: #fff /*{global-active-color}*/; 710 | cursor: pointer; 711 | text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/; 712 | text-decoration: none; 713 | background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */ 714 | background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */ 715 | background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */ 716 | background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */ 717 | background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */ 718 | background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); 719 | font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; 720 | } 721 | .ui-btn-active:visited, 722 | .ui-btn-active:hover, 723 | .ui-btn-active a.ui-link-inherit { 724 | color: #fff /*{global-active-color}*/; 725 | } 726 | /* button inner top highlight 727 | -----------------------------------------------------------------------------------------------------------*/ 728 | .ui-btn-inner { 729 | border-top: 1px solid #fff; 730 | border-color: rgba(255,255,255,.3); 731 | } 732 | /* corner rounding classes 733 | -----------------------------------------------------------------------------------------------------------*/ 734 | .ui-corner-tl { 735 | -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; 736 | -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; 737 | border-top-left-radius: .6em /*{global-radii-blocks}*/; 738 | } 739 | .ui-corner-tr { 740 | -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; 741 | -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; 742 | border-top-right-radius: .6em /*{global-radii-blocks}*/; 743 | } 744 | .ui-corner-bl { 745 | -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; 746 | -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; 747 | border-bottom-left-radius: .6em /*{global-radii-blocks}*/; 748 | } 749 | .ui-corner-br { 750 | -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; 751 | -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; 752 | border-bottom-right-radius: .6em /*{global-radii-blocks}*/; 753 | } 754 | .ui-corner-top { 755 | -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; 756 | -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; 757 | border-top-left-radius: .6em /*{global-radii-blocks}*/; 758 | -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; 759 | -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; 760 | border-top-right-radius: .6em /*{global-radii-blocks}*/; 761 | } 762 | .ui-corner-bottom { 763 | -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; 764 | -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; 765 | border-bottom-left-radius: .6em /*{global-radii-blocks}*/; 766 | -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; 767 | -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; 768 | border-bottom-right-radius: .6em /*{global-radii-blocks}*/; 769 | } 770 | .ui-corner-right { 771 | -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; 772 | -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; 773 | border-top-right-radius: .6em /*{global-radii-blocks}*/; 774 | -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; 775 | -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; 776 | border-bottom-right-radius: .6em /*{global-radii-blocks}*/; 777 | } 778 | .ui-corner-left { 779 | -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; 780 | -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; 781 | border-top-left-radius: .6em /*{global-radii-blocks}*/; 782 | -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; 783 | -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; 784 | border-bottom-left-radius: .6em /*{global-radii-blocks}*/; 785 | } 786 | .ui-corner-all { 787 | -moz-border-radius: .6em /*{global-radii-blocks}*/; 788 | -webkit-border-radius: .6em /*{global-radii-blocks}*/; 789 | border-radius: .6em /*{global-radii-blocks}*/; 790 | } 791 | .ui-corner-none { 792 | -moz-border-radius: 0; 793 | -webkit-border-radius: 0; 794 | border-radius: 0; 795 | } 796 | /* Form field separator 797 | -----------------------------------------------------------------------------------------------------------*/ 798 | .ui-br { 799 | border-bottom: rgb(130,130,130); 800 | border-bottom: rgba(130,130,130,.3); 801 | border-bottom-width: 1px; 802 | border-bottom-style: solid; 803 | } 804 | /* Interaction cues 805 | -----------------------------------------------------------------------------------------------------------*/ 806 | .ui-disabled { 807 | opacity: .3; 808 | } 809 | .ui-disabled, 810 | .ui-disabled a { 811 | cursor: default !important; 812 | pointer-events: none; 813 | } 814 | .ui-disabled .ui-btn-text { 815 | -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)"; 816 | filter: alpha(opacity=30); 817 | zoom: 1; 818 | } 819 | /* Icons 820 | -----------------------------------------------------------------------------------------------------------*/ 821 | .ui-icon, 822 | .ui-icon-searchfield:after { 823 | background: #666 /*{global-icon-color}*/; 824 | background: rgba(0,0,0,.4) /*{global-icon-disc}*/; 825 | background-image: url(../images/icons-18-white.png) /*{global-icon-set}*/; 826 | background-repeat: no-repeat; 827 | -moz-border-radius: 9px; 828 | -webkit-border-radius: 9px; 829 | border-radius: 9px; 830 | } 831 | /* Alt icon color 832 | -----------------------------------------------------------------------------------------------------------*/ 833 | .ui-icon-alt { 834 | background: #fff; 835 | background: rgba(255,255,255,.3); 836 | background-image: url(images/icons-18-black.png); 837 | background-repeat: no-repeat; 838 | } 839 | /* HD/"retina" sprite 840 | -----------------------------------------------------------------------------------------------------------*/ 841 | @media only screen and (-webkit-min-device-pixel-ratio: 1.5), 842 | only screen and (min--moz-device-pixel-ratio: 1.5), 843 | only screen and (min-resolution: 240dpi) { 844 | 845 | .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r, 846 | .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check, 847 | .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back, 848 | .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, 849 | .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on { 850 | background-image: url(images/icons-36-white.png); 851 | -moz-background-size: 776px 18px; 852 | -o-background-size: 776px 18px; 853 | -webkit-background-size: 776px 18px; 854 | background-size: 776px 18px; 855 | } 856 | .ui-icon-alt { 857 | background-image: url(images/icons-36-black.png); 858 | } 859 | } 860 | /* plus minus */ 861 | .ui-icon-plus { 862 | background-position: -0 50%; 863 | } 864 | .ui-icon-minus { 865 | background-position: -36px 50%; 866 | } 867 | /* delete/close */ 868 | .ui-icon-delete { 869 | background-position: -72px 50%; 870 | } 871 | /* arrows */ 872 | .ui-icon-arrow-r { 873 | background-position: -108px 50%; 874 | } 875 | .ui-icon-arrow-l { 876 | background-position: -144px 50%; 877 | } 878 | .ui-icon-arrow-u { 879 | background-position: -180px 50%; 880 | } 881 | .ui-icon-arrow-d { 882 | background-position: -216px 50%; 883 | } 884 | /* misc */ 885 | .ui-icon-check { 886 | background-position: -252px 50%; 887 | } 888 | .ui-icon-gear { 889 | background-position: -288px 50%; 890 | } 891 | .ui-icon-refresh { 892 | background-position: -324px 50%; 893 | } 894 | .ui-icon-forward { 895 | background-position: -360px 50%; 896 | } 897 | .ui-icon-back { 898 | background-position: -396px 50%; 899 | } 900 | .ui-icon-grid { 901 | background-position: -432px 50%; 902 | } 903 | .ui-icon-star { 904 | background-position: -468px 50%; 905 | } 906 | .ui-icon-alert { 907 | background-position: -504px 50%; 908 | } 909 | .ui-icon-info { 910 | background-position: -540px 50%; 911 | } 912 | .ui-icon-home { 913 | background-position: -576px 50%; 914 | } 915 | .ui-icon-search, 916 | .ui-icon-searchfield:after { 917 | background-position: -612px 50%; 918 | } 919 | .ui-icon-checkbox-off { 920 | background-position: -684px 50%; 921 | } 922 | .ui-icon-checkbox-on { 923 | background-position: -648px 50%; 924 | } 925 | .ui-icon-radio-off { 926 | background-position: -756px 50%; 927 | } 928 | .ui-icon-radio-on { 929 | background-position: -720px 50%; 930 | } 931 | /* checks,radios */ 932 | .ui-checkbox .ui-icon { 933 | -moz-border-radius: 3px; 934 | -webkit-border-radius: 3px; 935 | border-radius: 3px; 936 | } 937 | .ui-icon-checkbox-off, 938 | .ui-icon-radio-off { 939 | background-color: transparent; 940 | } 941 | .ui-checkbox-on .ui-icon, 942 | .ui-radio-on .ui-icon { 943 | background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */ 944 | } 945 | /* loading icon */ 946 | .ui-icon-loading { 947 | background: url(images/ajax-loader.gif); 948 | background-size: 46px 46px; 949 | } 950 | /* Button corner classes 951 | -----------------------------------------------------------------------------------------------------------*/ 952 | .ui-btn-corner-tl { 953 | -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; 954 | -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; 955 | border-top-left-radius: 1em /*{global-radii-buttons}*/; 956 | } 957 | .ui-btn-corner-tr { 958 | -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; 959 | -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; 960 | border-top-right-radius: 1em /*{global-radii-buttons}*/; 961 | } 962 | .ui-btn-corner-bl { 963 | -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; 964 | -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; 965 | border-bottom-left-radius: 1em /*{global-radii-buttons}*/; 966 | } 967 | .ui-btn-corner-br { 968 | -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; 969 | -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; 970 | border-bottom-right-radius: 1em /*{global-radii-buttons}*/; 971 | } 972 | .ui-btn-corner-top { 973 | -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; 974 | -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; 975 | border-top-left-radius: 1em /*{global-radii-buttons}*/; 976 | -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; 977 | -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; 978 | border-top-right-radius: 1em /*{global-radii-buttons}*/; 979 | } 980 | .ui-btn-corner-bottom { 981 | -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; 982 | -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; 983 | border-bottom-left-radius: 1em /*{global-radii-buttons}*/; 984 | -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; 985 | -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; 986 | border-bottom-right-radius: 1em /*{global-radii-buttons}*/; 987 | } 988 | .ui-btn-corner-right { 989 | -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; 990 | -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; 991 | border-top-right-radius: 1em /*{global-radii-buttons}*/; 992 | -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; 993 | -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; 994 | border-bottom-right-radius: 1em /*{global-radii-buttons}*/; 995 | } 996 | .ui-btn-corner-left { 997 | -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; 998 | -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; 999 | border-top-left-radius: 1em /*{global-radii-buttons}*/; 1000 | -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; 1001 | -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; 1002 | border-bottom-left-radius: 1em /*{global-radii-buttons}*/; 1003 | } 1004 | .ui-btn-corner-all { 1005 | -moz-border-radius: 1em /*{global-radii-buttons}*/; 1006 | -webkit-border-radius: 1em /*{global-radii-buttons}*/; 1007 | border-radius: 1em /*{global-radii-buttons}*/; 1008 | } 1009 | /* radius clip workaround for cleaning up corner trapping */ 1010 | .ui-corner-tl, 1011 | .ui-corner-tr, 1012 | .ui-corner-bl, 1013 | .ui-corner-br, 1014 | .ui-corner-top, 1015 | .ui-corner-bottom, 1016 | .ui-corner-right, 1017 | .ui-corner-left, 1018 | .ui-corner-all, 1019 | .ui-btn-corner-tl, 1020 | .ui-btn-corner-tr, 1021 | .ui-btn-corner-bl, 1022 | .ui-btn-corner-br, 1023 | .ui-btn-corner-top, 1024 | .ui-btn-corner-bottom, 1025 | .ui-btn-corner-right, 1026 | .ui-btn-corner-left, 1027 | .ui-btn-corner-all { 1028 | -webkit-background-clip: padding-box; 1029 | -moz-background-clip: padding; 1030 | background-clip: padding-box; 1031 | } 1032 | /* Overlay / modal 1033 | -----------------------------------------------------------------------------------------------------------*/ 1034 | .ui-overlay { 1035 | background: #666; 1036 | opacity: .5; 1037 | filter: Alpha(Opacity=50); 1038 | position: absolute; 1039 | width: 100%; 1040 | height: 100%; 1041 | } 1042 | .ui-overlay-shadow { 1043 | -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); 1044 | -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); 1045 | box-shadow: 0px 0px 12px rgba(0,0,0,.6); 1046 | } 1047 | .ui-shadow { 1048 | -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; 1049 | -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; 1050 | box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; 1051 | } 1052 | .ui-bar-a .ui-shadow, 1053 | .ui-bar-b .ui-shadow , 1054 | .ui-bar-c .ui-shadow { 1055 | -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); 1056 | -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); 1057 | box-shadow: 0px 1px 0 rgba(255,255,255,.3); 1058 | } 1059 | .ui-shadow-inset { 1060 | -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); 1061 | -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); 1062 | box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); 1063 | } 1064 | .ui-icon-shadow { 1065 | -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; 1066 | -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; 1067 | box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; 1068 | } 1069 | /* Focus state - set here for specificity (note: these classes are added by JavaScript) 1070 | -----------------------------------------------------------------------------------------------------------*/ 1071 | .ui-btn:focus, .ui-link-inherit:focus { 1072 | outline: 0; 1073 | } 1074 | .ui-btn.ui-focus { 1075 | z-index: 1; 1076 | } 1077 | .ui-focus, 1078 | .ui-btn:focus { 1079 | -moz-box-shadow: inset 0px 0px 3px #387bbe /*{global-active-background-color}*/, 0px 0px 9px #387bbe /*{global-active-background-color}*/; 1080 | -webkit-box-shadow: inset 0px 0px 3px #387bbe /*{global-active-background-color}*/, 0px 0px 9px #387bbe /*{global-active-background-color}*/; 1081 | box-shadow: inset 0px 0px 3px #387bbe /*{global-active-background-color}*/, 0px 0px 9px #387bbe /*{global-active-background-color}*/; 1082 | } 1083 | .ui-input-text.ui-focus, 1084 | .ui-input-search.ui-focus { 1085 | -moz-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; 1086 | -webkit-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; 1087 | box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; 1088 | } 1089 | /* unset box shadow in browsers that don't do it right 1090 | -----------------------------------------------------------------------------------------------------------*/ 1091 | .ui-mobile-nosupport-boxshadow * { 1092 | -moz-box-shadow: none !important; 1093 | -webkit-box-shadow: none !important; 1094 | box-shadow: none !important; 1095 | } 1096 | /* ...and bring back focus */ 1097 | .ui-mobile-nosupport-boxshadow .ui-focus, 1098 | .ui-mobile-nosupport-boxshadow .ui-btn:focus, 1099 | .ui-mobile-nosupport-boxshadow .ui-link-inherit:focus { 1100 | outline-width: 1px; 1101 | outline-style: auto; 1102 | } 1103 | /* some unsets - more probably needed */ 1104 | .ui-mobile, .ui-mobile body { height: 99.9%; } 1105 | .ui-mobile fieldset, .ui-page { padding: 0; margin: 0; } 1106 | .ui-mobile a img, .ui-mobile fieldset { border-width: 0; } 1107 | /* responsive page widths */ 1108 | .ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } 1109 | /* Issue #2066 */ 1110 | body.ui-mobile-viewport, 1111 | div.ui-mobile-viewport { overflow-x: hidden; } 1112 | /* "page" containers - full-screen views, one should always be in view post-pageload */ 1113 | .ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; } 1114 | .ui-mobile .ui-page-active { display: block; overflow: visible; } 1115 | /* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */ 1116 | .ui-page { outline: none; } 1117 | /*orientations from js are available */ 1118 | @media screen and (orientation: portrait){ 1119 | .ui-mobile, .ui-mobile .ui-page { min-height: 420px; } 1120 | } 1121 | @media screen and (orientation: landscape){ 1122 | .ui-mobile, .ui-mobile .ui-page { min-height: 300px; } 1123 | } 1124 | /* loading screen */ 1125 | .ui-loading .ui-loader { display: block; } 1126 | .ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; left: 50%; border:0; } 1127 | .ui-loader-default { background: none; opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; } 1128 | .ui-loader-verbose { width: 200px; opacity: .88; box-shadow: 0 1px 1px -1px #fff; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; } 1129 | .ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; } 1130 | .ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; } 1131 | .ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; } 1132 | .ui-loader-verbose .ui-icon { margin: 0 auto 10px; opacity: .75; } 1133 | .ui-loader-textonly { padding: 15px; margin-left: -115px; } 1134 | .ui-loader-textonly .ui-icon { display: none; } 1135 | .ui-loader-fakefix { position: absolute; } 1136 | /*fouc*/ 1137 | .ui-mobile-rendering > * { visibility: hidden; } 1138 | /*headers, content panels*/ 1139 | .ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; } 1140 | .ui-bar { font-size: 16px; margin: 0; } 1141 | .ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; } 1142 | .ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; zoom: 1; } 1143 | .ui-header .ui-btn-left, 1144 | .ui-header .ui-btn-right, 1145 | .ui-footer .ui-btn-left, 1146 | .ui-footer .ui-btn-right { position: absolute; top: 3px; } 1147 | .ui-header .ui-btn-left, 1148 | .ui-footer .ui-btn-left { left: 5px; } 1149 | .ui-header .ui-btn-right, 1150 | .ui-footer .ui-btn-right { right: 5px; } 1151 | .ui-footer .ui-btn-icon-notext, 1152 | .ui-header .ui-btn-icon-notext { top: 6px; } 1153 | .ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; } 1154 | .ui-footer .ui-title { margin: .6em 15px .8em; } 1155 | /*content area*/ 1156 | .ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; } 1157 | /* icons sizing */ 1158 | .ui-icon { width: 18px; height: 18px; } 1159 | /* non-js content hiding */ 1160 | .ui-nojs { position: absolute; left: -9999px; } 1161 | /* accessible content hiding */ 1162 | .ui-hide-label label.ui-input-text, .ui-hide-label label.ui-select, .ui-hide-label label.ui-slider, .ui-hide-label label.ui-submit, .ui-hide-label .ui-controlgroup-label, 1163 | .ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } 1164 | /* Transitions originally inspired by those from jQtouch, nice work, folks */ 1165 | .ui-mobile-viewport-transitioning, 1166 | .ui-mobile-viewport-transitioning .ui-page { 1167 | width: 100%; 1168 | height: 100%; 1169 | overflow: hidden; 1170 | -webkit-box-sizing: border-box; 1171 | -moz-box-sizing: border-box; 1172 | box-sizing: border-box; 1173 | } 1174 | .in { 1175 | -webkit-animation-timing-function: ease-out; 1176 | -webkit-animation-duration: 350ms; 1177 | -moz-animation-timing-function: ease-out; 1178 | -moz-animation-duration: 350ms; 1179 | } 1180 | .out { 1181 | -webkit-animation-timing-function: ease-in; 1182 | -webkit-animation-duration: 225ms; 1183 | -moz-animation-timing-function: ease-in; 1184 | -moz-animation-duration: 225; 1185 | } 1186 | @-webkit-keyframes fadein { 1187 | from { opacity: 0; } 1188 | to { opacity: 1; } 1189 | } 1190 | @-moz-keyframes fadein { 1191 | from { opacity: 0; } 1192 | to { opacity: 1; } 1193 | } 1194 | @-webkit-keyframes fadeout { 1195 | from { opacity: 1; } 1196 | to { opacity: 0; } 1197 | } 1198 | @-moz-keyframes fadeout { 1199 | from { opacity: 1; } 1200 | to { opacity: 0; } 1201 | } 1202 | .fade.out { 1203 | opacity: 0; 1204 | -webkit-animation-duration: 125ms; 1205 | -webkit-animation-name: fadeout; 1206 | -moz-animation-duration: 125ms; 1207 | -moz-animation-name: fadeout; 1208 | } 1209 | .fade.in { 1210 | opacity: 1; 1211 | -webkit-animation-duration: 225ms; 1212 | -webkit-animation-name: fadein; 1213 | -moz-animation-duration: 225ms; 1214 | -moz-animation-name: fadein; 1215 | } 1216 | .pop { 1217 | -webkit-transform-origin: 50% 50%; 1218 | -moz-transform-origin: 50% 50%; 1219 | } 1220 | .pop.in { 1221 | -webkit-transform: scale(1); 1222 | -moz-transform: scale(1); 1223 | opacity: 1; 1224 | -webkit-animation-name: popin; 1225 | -moz-animation-name: popin; 1226 | -webkit-animation-duration: 350ms; 1227 | -moz-animation-duration: 350ms; 1228 | } 1229 | .pop.out { 1230 | -webkit-animation-name: fadeout; 1231 | -moz-animation-name: fadeout; 1232 | opacity: 0; 1233 | -webkit-animation-duration: 100ms; 1234 | -moz-animation-duration: 100ms; 1235 | } 1236 | .pop.in.reverse { 1237 | -webkit-animation-name: fadein; 1238 | -moz-animation-name: fadein; 1239 | } 1240 | .pop.out.reverse { 1241 | -webkit-transform: scale(.8); 1242 | -moz-transform: scale(.8); 1243 | -webkit-animation-name: popout; 1244 | -moz-animation-name: popout; 1245 | } 1246 | @-webkit-keyframes popin { 1247 | from { 1248 | -webkit-transform: scale(.8); 1249 | opacity: 0; 1250 | } 1251 | to { 1252 | -webkit-transform: scale(1); 1253 | opacity: 1; 1254 | } 1255 | } 1256 | @-moz-keyframes popin { 1257 | from { 1258 | -moz-transform: scale(.8); 1259 | opacity: 0; 1260 | } 1261 | to { 1262 | -moz-transform: scale(1); 1263 | opacity: 1; 1264 | } 1265 | } 1266 | @-webkit-keyframes popout { 1267 | from { 1268 | -webkit-transform: scale(1); 1269 | opacity: 1; 1270 | } 1271 | to { 1272 | -webkit-transform: scale(.8); 1273 | opacity: 0; 1274 | } 1275 | } 1276 | @-moz-keyframes popout { 1277 | from { 1278 | -moz-transform: scale(1); 1279 | opacity: 1; 1280 | } 1281 | to { 1282 | -moz-transform: scale(.8); 1283 | opacity: 0; 1284 | } 1285 | } 1286 | /* keyframes for slidein from sides */ 1287 | @-webkit-keyframes slideinfromright { 1288 | from { -webkit-transform: translateX(100%); } 1289 | to { -webkit-transform: translateX(0); } 1290 | } 1291 | @-moz-keyframes slideinfromright { 1292 | from { -moz-transform: translateX(100%); } 1293 | to { -moz-transform: translateX(0); } 1294 | } 1295 | @-webkit-keyframes slideinfromleft { 1296 | from { -webkit-transform: translateX(-100%); } 1297 | to { -webkit-transform: translateX(0); } 1298 | } 1299 | @-moz-keyframes slideinfromleft { 1300 | from { -moz-transform: translateX(-100%); } 1301 | to { -moz-transform: translateX(0); } 1302 | } 1303 | /* keyframes for slideout to sides */ 1304 | @-webkit-keyframes slideouttoleft { 1305 | from { -webkit-transform: translateX(0); } 1306 | to { -webkit-transform: translateX(-100%); } 1307 | } 1308 | @-moz-keyframes slideouttoleft { 1309 | from { -moz-transform: translateX(0); } 1310 | to { -moz-transform: translateX(-100%); } 1311 | } 1312 | @-webkit-keyframes slideouttoright { 1313 | from { -webkit-transform: translateX(0); } 1314 | to { -webkit-transform: translateX(100%); } 1315 | } 1316 | @-moz-keyframes slideouttoright { 1317 | from { -moz-transform: translateX(0); } 1318 | to { -moz-transform: translateX(100%); } 1319 | } 1320 | .slide.out, .slide.in { 1321 | -webkit-animation-timing-function: ease-out; 1322 | -webkit-animation-duration: 350ms; 1323 | -moz-animation-timing-function: ease-out; 1324 | -moz-animation-duration: 350ms; 1325 | } 1326 | .slide.out { 1327 | -webkit-transform: translateX(-100%); 1328 | -webkit-animation-name: slideouttoleft; 1329 | -moz-transform: translateX(-100%); 1330 | -moz-animation-name: slideouttoleft; 1331 | } 1332 | .slide.in { 1333 | -webkit-transform: translateX(0); 1334 | -webkit-animation-name: slideinfromright; 1335 | -moz-transform: translateX(0); 1336 | -moz-animation-name: slideinfromright; 1337 | } 1338 | .slide.out.reverse { 1339 | -webkit-transform: translateX(100%); 1340 | -webkit-animation-name: slideouttoright; 1341 | -moz-transform: translateX(100%); 1342 | -moz-animation-name: slideouttoright; 1343 | } 1344 | .slide.in.reverse { 1345 | -webkit-transform: translateX(0); 1346 | -webkit-animation-name: slideinfromleft; 1347 | -moz-transform: translateX(0); 1348 | -moz-animation-name: slideinfromleft; 1349 | } 1350 | .slidefade.out { 1351 | -webkit-transform: translateX(-100%); 1352 | -webkit-animation-name: slideouttoleft; 1353 | -moz-transform: translateX(-100%); 1354 | -moz-animation-name: slideouttoleft; 1355 | -webkit-animation-duration: 225ms; 1356 | -moz-animation-duration: 225ms; 1357 | } 1358 | .slidefade.in { 1359 | -webkit-transform: translateX(0); 1360 | -webkit-animation-name: fadein; 1361 | -moz-transform: translateX(0); 1362 | -moz-animation-name: fadein; 1363 | -webkit-animation-duration: 200ms; 1364 | -moz-animation-duration: 200ms; 1365 | } 1366 | .slidefade.out.reverse { 1367 | -webkit-transform: translateX(100%); 1368 | -webkit-animation-name: slideouttoright; 1369 | -moz-transform: translateX(100%); 1370 | -moz-animation-name: slideouttoright; 1371 | -webkit-animation-duration: 200ms; 1372 | -moz-animation-duration: 200ms; 1373 | } 1374 | .slidefade.in.reverse { 1375 | -webkit-transform: translateX(0); 1376 | -webkit-animation-name: fadein; 1377 | -moz-transform: translateX(0); 1378 | -moz-animation-name: fadein; 1379 | -webkit-animation-duration: 200ms; 1380 | -moz-animation-duration: 200ms; 1381 | } 1382 | /* slide down */ 1383 | .slidedown.out { 1384 | -webkit-animation-name: fadeout; 1385 | -moz-animation-name: fadeout; 1386 | -webkit-animation-duration: 100ms; 1387 | -moz-animation-duration: 100ms; 1388 | } 1389 | .slidedown.in { 1390 | -webkit-transform: translateY(0); 1391 | -webkit-animation-name: slideinfromtop; 1392 | -moz-transform: translateY(0); 1393 | -moz-animation-name: slideinfromtop; 1394 | -webkit-animation-duration: 250ms; 1395 | -moz-animation-duration: 250ms; 1396 | } 1397 | .slidedown.in.reverse { 1398 | -webkit-animation-name: fadein; 1399 | -moz-animation-name: fadein; 1400 | -webkit-animation-duration: 150ms; 1401 | -moz-animation-duration: 150ms; 1402 | } 1403 | .slidedown.out.reverse { 1404 | -webkit-transform: translateY(-100%); 1405 | -moz-transform: translateY(-100%); 1406 | -webkit-animation-name: slideouttotop; 1407 | -moz-animation-name: slideouttotop; 1408 | -webkit-animation-duration: 200ms; 1409 | -moz-animation-duration: 200ms; 1410 | } 1411 | @-webkit-keyframes slideinfromtop { 1412 | from { -webkit-transform: translateY(-100%); } 1413 | to { -webkit-transform: translateY(0); } 1414 | } 1415 | @-moz-keyframes slideinfromtop { 1416 | from { -moz-transform: translateY(-100%); } 1417 | to { -moz-transform: translateY(0); } 1418 | } 1419 | @-webkit-keyframes slideouttotop { 1420 | from { -webkit-transform: translateY(0); } 1421 | to { -webkit-transform: translateY(-100%); } 1422 | } 1423 | @-moz-keyframes slideouttotop { 1424 | from { -moz-transform: translateY(0); } 1425 | to { -moz-transform: translateY(-100%); } 1426 | } 1427 | /* slide up */ 1428 | .slideup.out { 1429 | -webkit-animation-name: fadeout; 1430 | -moz-animation-name: fadeout; 1431 | -webkit-animation-duration: 100ms; 1432 | -moz-animation-duration: 100ms; 1433 | } 1434 | .slideup.in { 1435 | -webkit-transform: translateY(0); 1436 | -webkit-animation-name: slideinfrombottom; 1437 | -moz-transform: translateY(0); 1438 | -moz-animation-name: slideinfrombottom; 1439 | -webkit-animation-duration: 250ms; 1440 | -moz-animation-duration: 250ms; 1441 | } 1442 | .slideup.in.reverse { 1443 | -webkit-animation-name: fadein; 1444 | -moz-animation-name: fadein; 1445 | -webkit-animation-duration: 150ms; 1446 | -moz-animation-duration: 150ms; 1447 | } 1448 | .slideup.out.reverse { 1449 | -webkit-transform: translateY(100%); 1450 | -moz-transform: translateY(100%); 1451 | -webkit-animation-name: slideouttobottom; 1452 | -moz-animation-name: slideouttobottom; 1453 | -webkit-animation-duration: 200ms; 1454 | -moz-animation-duration: 200ms; 1455 | } 1456 | @-webkit-keyframes slideinfrombottom { 1457 | from { -webkit-transform: translateY(100%); } 1458 | to { -webkit-transform: translateY(0); } 1459 | } 1460 | @-moz-keyframes slideinfrombottom { 1461 | from { -moz-transform: translateY(100%); } 1462 | to { -moz-transform: translateY(0); } 1463 | } 1464 | @-webkit-keyframes slideouttobottom { 1465 | from { -webkit-transform: translateY(0); } 1466 | to { -webkit-transform: translateY(100%); } 1467 | } 1468 | @-moz-keyframes slideouttobottom { 1469 | from { -moz-transform: translateY(0); } 1470 | to { -moz-transform: translateY(100%); } 1471 | } 1472 | /* The properties in this rule are only necessary for the 'flip' transition. 1473 | * We need specify the perspective to create a projection matrix. This will add 1474 | * some depth as the element flips. The depth number represents the distance of 1475 | * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate 1476 | * value. 1477 | */ 1478 | .viewport-flip { 1479 | -webkit-perspective: 1000; 1480 | -moz-perspective: 1000; 1481 | position: absolute; 1482 | } 1483 | .flip { 1484 | -webkit-backface-visibility:hidden; 1485 | -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ 1486 | -moz-backface-visibility:hidden; 1487 | -moz-transform:translateX(0); 1488 | } 1489 | .flip.out { 1490 | -webkit-transform: rotateY(-90deg) scale(.9); 1491 | -webkit-animation-name: flipouttoleft; 1492 | -webkit-animation-duration: 175ms; 1493 | -moz-transform: rotateY(-90deg) scale(.9); 1494 | -moz-animation-name: flipouttoleft; 1495 | -moz-animation-duration: 175ms; 1496 | } 1497 | .flip.in { 1498 | -webkit-animation-name: flipintoright; 1499 | -webkit-animation-duration: 225ms; 1500 | -moz-animation-name: flipintoright; 1501 | -moz-animation-duration: 225ms; 1502 | } 1503 | .flip.out.reverse { 1504 | -webkit-transform: rotateY(90deg) scale(.9); 1505 | -webkit-animation-name: flipouttoright; 1506 | -moz-transform: rotateY(90deg) scale(.9); 1507 | -moz-animation-name: flipouttoright; 1508 | } 1509 | .flip.in.reverse { 1510 | -webkit-animation-name: flipintoleft; 1511 | -moz-animation-name: flipintoleft; 1512 | } 1513 | @-webkit-keyframes flipouttoleft { 1514 | from { -webkit-transform: rotateY(0); } 1515 | to { -webkit-transform: rotateY(-90deg) scale(.9); } 1516 | } 1517 | @-moz-keyframes flipouttoleft { 1518 | from { -moz-transform: rotateY(0); } 1519 | to { -moz-transform: rotateY(-90deg) scale(.9); } 1520 | } 1521 | @-webkit-keyframes flipouttoright { 1522 | from { -webkit-transform: rotateY(0) ; } 1523 | to { -webkit-transform: rotateY(90deg) scale(.9); } 1524 | } 1525 | @-moz-keyframes flipouttoright { 1526 | from { -moz-transform: rotateY(0); } 1527 | to { -moz-transform: rotateY(90deg) scale(.9); } 1528 | } 1529 | @-webkit-keyframes flipintoleft { 1530 | from { -webkit-transform: rotateY(-90deg) scale(.9); } 1531 | to { -webkit-transform: rotateY(0); } 1532 | } 1533 | @-moz-keyframes flipintoleft { 1534 | from { -moz-transform: rotateY(-90deg) scale(.9); } 1535 | to { -moz-transform: rotateY(0); } 1536 | } 1537 | @-webkit-keyframes flipintoright { 1538 | from { -webkit-transform: rotateY(90deg) scale(.9); } 1539 | to { -webkit-transform: rotateY(0); } 1540 | } 1541 | @-moz-keyframes flipintoright { 1542 | from { -moz-transform: rotateY(90deg) scale(.9); } 1543 | to { -moz-transform: rotateY(0); } 1544 | } 1545 | /* The properties in this rule are only necessary for the 'flip' transition. 1546 | * We need specify the perspective to create a projection matrix. This will add 1547 | * some depth as the element flips. The depth number represents the distance of 1548 | * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate 1549 | * value. 1550 | */ 1551 | .viewport-turn { 1552 | -webkit-perspective: 1000; 1553 | -moz-perspective: 1000; 1554 | position: absolute; 1555 | } 1556 | .turn { 1557 | -webkit-backface-visibility:hidden; 1558 | -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ 1559 | -webkit-transform-origin: 0; 1560 | 1561 | -moz-backface-visibility:hidden; 1562 | -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ 1563 | -moz-transform-origin: 0; 1564 | } 1565 | .turn.out { 1566 | -webkit-transform: rotateY(-90deg) scale(.9); 1567 | -webkit-animation-name: flipouttoleft; 1568 | -moz-transform: rotateY(-90deg) scale(.9); 1569 | -moz-animation-name: flipouttoleft; 1570 | -webkit-animation-duration: 125ms; 1571 | -moz-animation-duration: 125ms; 1572 | } 1573 | .turn.in { 1574 | -webkit-animation-name: flipintoright; 1575 | -moz-animation-name: flipintoright; 1576 | -webkit-animation-duration: 250ms; 1577 | -moz-animation-duration: 250ms; 1578 | 1579 | } 1580 | .turn.out.reverse { 1581 | -webkit-transform: rotateY(90deg) scale(.9); 1582 | -webkit-animation-name: flipouttoright; 1583 | -moz-transform: rotateY(90deg) scale(.9); 1584 | -moz-animation-name: flipouttoright; 1585 | } 1586 | .turn.in.reverse { 1587 | -webkit-animation-name: flipintoleft; 1588 | -moz-animation-name: flipintoleft; 1589 | } 1590 | @-webkit-keyframes flipouttoleft { 1591 | from { -webkit-transform: rotateY(0); } 1592 | to { -webkit-transform: rotateY(-90deg) scale(.9); } 1593 | } 1594 | @-moz-keyframes flipouttoleft { 1595 | from { -moz-transform: rotateY(0); } 1596 | to { -moz-transform: rotateY(-90deg) scale(.9); } 1597 | } 1598 | @-webkit-keyframes flipouttoright { 1599 | from { -webkit-transform: rotateY(0) ; } 1600 | to { -webkit-transform: rotateY(90deg) scale(.9); } 1601 | } 1602 | @-moz-keyframes flipouttoright { 1603 | from { -moz-transform: rotateY(0); } 1604 | to { -moz-transform: rotateY(90deg) scale(.9); } 1605 | } 1606 | @-webkit-keyframes flipintoleft { 1607 | from { -webkit-transform: rotateY(-90deg) scale(.9); } 1608 | to { -webkit-transform: rotateY(0); } 1609 | } 1610 | @-moz-keyframes flipintoleft { 1611 | from { -moz-transform: rotateY(-90deg) scale(.9); } 1612 | to { -moz-transform: rotateY(0); } 1613 | } 1614 | @-webkit-keyframes flipintoright { 1615 | from { -webkit-transform: rotateY(90deg) scale(.9); } 1616 | to { -webkit-transform: rotateY(0); } 1617 | } 1618 | @-moz-keyframes flipintoright { 1619 | from { -moz-transform: rotateY(90deg) scale(.9); } 1620 | to { -moz-transform: rotateY(0); } 1621 | } 1622 | /* flow transition */ 1623 | .flow { 1624 | -webkit-transform-origin: 50% 30%; 1625 | -moz-transform-origin: 50% 30%; 1626 | -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4); 1627 | -moz-box-shadow: 0 0 20px rgba(0,0,0,.4); 1628 | } 1629 | .ui-dialog.flow { 1630 | -webkit-transform-origin: none; 1631 | -moz-transform-origin: none; 1632 | -webkit-box-shadow: none; 1633 | -moz-box-shadow: none; 1634 | } 1635 | .flow.out { 1636 | -webkit-transform: translateX(-100%) scale(.7); 1637 | -webkit-animation-name: flowouttoleft; 1638 | -webkit-animation-timing-function: ease; 1639 | -webkit-animation-duration: 350ms; 1640 | -moz-transform: translateX(-100%) scale(.7); 1641 | -moz-animation-name: flowouttoleft; 1642 | -moz-animation-timing-function: ease; 1643 | -moz-animation-duration: 350ms; 1644 | } 1645 | .flow.in { 1646 | -webkit-transform: translateX(0) scale(1); 1647 | -webkit-animation-name: flowinfromright; 1648 | -webkit-animation-timing-function: ease; 1649 | -webkit-animation-duration: 350ms; 1650 | -moz-transform: translateX(0) scale(1); 1651 | -moz-animation-name: flowinfromright; 1652 | -moz-animation-timing-function: ease; 1653 | -moz-animation-duration: 350ms; 1654 | } 1655 | .flow.out.reverse { 1656 | -webkit-transform: translateX(100%); 1657 | -webkit-animation-name: flowouttoright; 1658 | -moz-transform: translateX(100%); 1659 | -moz-animation-name: flowouttoright; 1660 | } 1661 | .flow.in.reverse { 1662 | -webkit-animation-name: flowinfromleft; 1663 | -moz-animation-name: flowinfromleft; 1664 | } 1665 | @-webkit-keyframes flowouttoleft { 1666 | 0% { -webkit-transform: translateX(0) scale(1); } 1667 | 60%, 70% { -webkit-transform: translateX(0) scale(.7); } 1668 | 100% { -webkit-transform: translateX(-100%) scale(.7); } 1669 | } 1670 | @-moz-keyframes flowouttoleft { 1671 | 0% { -moz-transform: translateX(0) scale(1); } 1672 | 60%, 70% { -moz-transform: translateX(0) scale(.7); } 1673 | 100% { -moz-transform: translateX(-100%) scale(.7); } 1674 | } 1675 | @-webkit-keyframes flowouttoright { 1676 | 0% { -webkit-transform: translateX(0) scale(1); } 1677 | 60%, 70% { -webkit-transform: translateX(0) scale(.7); } 1678 | 100% { -webkit-transform: translateX(100%) scale(.7); } 1679 | } 1680 | @-moz-keyframes flowouttoright { 1681 | 0% { -moz-transform: translateX(0) scale(1); } 1682 | 60%, 70% { -moz-transform: translateX(0) scale(.7); } 1683 | 100% { -moz-transform: translateX(100%) scale(.7); } 1684 | } 1685 | @-webkit-keyframes flowinfromleft { 1686 | 0% { -webkit-transform: translateX(-100%) scale(.7); } 1687 | 30%, 40% { -webkit-transform: translateX(0) scale(.7); } 1688 | 100% { -webkit-transform: translateX(0) scale(1); } 1689 | } 1690 | @-moz-keyframes flowinfromleft { 1691 | 0% { -moz-transform: translateX(-100%) scale(.7); } 1692 | 30%, 40% { -moz-transform: translateX(0) scale(.7); } 1693 | 100% { -moz-transform: translateX(0) scale(1); } 1694 | } 1695 | @-webkit-keyframes flowinfromright { 1696 | 0% { -webkit-transform: translateX(100%) scale(.7); } 1697 | 30%, 40% { -webkit-transform: translateX(0) scale(.7); } 1698 | 100% { -webkit-transform: translateX(0) scale(1); } 1699 | } 1700 | @-moz-keyframes flowinfromright { 1701 | 0% { -moz-transform: translateX(100%) scale(.7); } 1702 | 30%, 40% { -moz-transform: translateX(0) scale(.7); } 1703 | 100% { -moz-transform: translateX(0) scale(1); } 1704 | } 1705 | /* content configurations. */ 1706 | .ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; } 1707 | .ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height: 1px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } 1708 | /* grid solo: 100 - single item fallback */ 1709 | .ui-grid-solo .ui-block-a { display: block; float: none; } 1710 | /* Lower percentages for older browsers (i.e. IE7) to prevent wrapping. -.5px to fix BB5 wrap issue. */ 1711 | /* grid a: 50/50 */ 1712 | .ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 49.95%; } 1713 | .ui-grid-a > :nth-child(n) { width: 50%; margin-right: -.5px; } 1714 | .ui-grid-a .ui-block-a { clear: left; padding-right:3px;} 1715 | /* grid b: 33/33/33 */ 1716 | .ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.25%; } 1717 | .ui-grid-b > :nth-child(n) { width: 33.333%; margin-right: -.5px; } 1718 | .ui-grid-b .ui-block-a { clear: left; } 1719 | /* grid c: 25/25/25/25 */ 1720 | .ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 24.925%; } 1721 | .ui-grid-c > :nth-child(n) { width: 25%; margin-right: -.5px; } 1722 | .ui-grid-c .ui-block-a { clear: left; } 1723 | /* grid d: 20/20/20/20/20 */ 1724 | .ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 19.925%; } 1725 | .ui-grid-d > :nth-child(n) { width: 20%; } 1726 | .ui-grid-d .ui-block-a { clear: left; } 1727 | /* fixed page header & footer configuration */ 1728 | .ui-header-fixed, 1729 | .ui-footer-fixed { 1730 | left: 0; 1731 | right: 0; 1732 | width: 100%; 1733 | position: fixed; 1734 | z-index: 1000; 1735 | } 1736 | .ui-page-pre-in { 1737 | opacity: 0; 1738 | } 1739 | .ui-header-fixed { 1740 | top: 0; 1741 | } 1742 | .ui-footer-fixed { 1743 | bottom: 0; 1744 | } 1745 | .ui-header-fullscreen, 1746 | .ui-footer-fullscreen { 1747 | opacity: .9; 1748 | } 1749 | .ui-page-header-fixed { 1750 | padding-top: 2.6875em; 1751 | } 1752 | .ui-page-footer-fixed { 1753 | padding-bottom: 2.6875em; 1754 | } 1755 | .ui-page-header-fullscreen .ui-content, 1756 | .ui-page-footer-fullscreen .ui-content { 1757 | padding: 0; 1758 | } 1759 | .ui-fixed-hidden { 1760 | position: absolute; 1761 | } 1762 | .ui-page-header-fullscreen .ui-fixed-hidden, 1763 | .ui-page-footer-fullscreen .ui-fixed-hidden { 1764 | left: -99999em; 1765 | } 1766 | .ui-header-fixed .ui-btn, 1767 | .ui-footer-fixed .ui-btn { 1768 | z-index: 10; 1769 | } 1770 | .ui-navbar { max-width: 100%; } 1771 | .ui-navbar ul { list-style:none; margin: 0; padding: 0; position: relative; display: block; border: 0; max-width: 100%; overflow:hidden; } 1772 | .ui-navbar li .ui-btn { display: block; text-align: center; margin: 0 -1px 0 0; border-right-width: 0; } 1773 | .ui-navbar li .ui-btn-icon-right .ui-icon { right: 6px; } 1774 | /* add border if not in header/footer (full width) */ 1775 | .ui-navbar li:last-child .ui-btn, 1776 | .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: 0; border-right-width: 1px; } 1777 | .ui-header .ui-navbar li:last-child .ui-btn, 1778 | .ui-footer .ui-navbar li:last-child .ui-btn, 1779 | .ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn, 1780 | .ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: -1px; border-right-width: 0; } 1781 | .ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn { margin-right: -1px; border-right-width: 1px; } 1782 | .ui-header .ui-navbar li .ui-btn, 1783 | .ui-footer .ui-navbar li .ui-btn { border-top-width: 0; border-bottom-width: 0; } 1784 | /* fixing gaps caused by subpixel problem */ 1785 | .ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn, 1786 | .ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn { margin-right: -5px; } 1787 | .ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn, 1788 | .ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn, 1789 | .ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn, 1790 | .ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn { margin-right: -4px; } 1791 | .ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon, 1792 | .ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon, 1793 | .ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon, 1794 | .ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon, 1795 | .ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon, 1796 | .ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon { right: 8px; } 1797 | .ui-navbar li .ui-btn .ui-btn-inner { padding-top: .7em; padding-bottom: .8em } 1798 | .ui-navbar li .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; } 1799 | .ui-navbar li .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; } 1800 | .ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 0; padding: 0; } 1801 | .ui-btn.ui-mini { margin-top: .25em; margin-bottom: .25em; } 1802 | .ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline, 1803 | .ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn { margin-right: 5px; } 1804 | .ui-btn-inner { font-size: 16px; padding: .6em 20px; min-width: .75em; display: block; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; zoom: 1; } 1805 | .ui-btn input, .ui-btn button { z-index: 2; } 1806 | .ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; vertical-align: middle; width:99%} 1807 | .ui-btn-block { display: block; } 1808 | .ui-header .ui-btn, 1809 | .ui-footer .ui-btn { display: inline-block; margin: 0; } 1810 | .ui-header .ui-btn-block, 1811 | .ui-footer .ui-btn-block { display: block; } 1812 | .ui-header .ui-btn-inner, 1813 | .ui-footer .ui-btn-inner, 1814 | .ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; } 1815 | .ui-header .ui-fullsize .ui-btn-inner, 1816 | .ui-footer .ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 25px; } 1817 | .ui-btn-icon-notext { width: 24px; height: 24px; } 1818 | .ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; } 1819 | .ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; float: left; } 1820 | .ui-btn-text { position: relative; z-index: 1; width: 100%; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; } 1821 | .ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; } 1822 | .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } 1823 | .ui-btn-icon-right .ui-btn-inner { padding-right: 40px; } 1824 | .ui-btn-icon-top .ui-btn-inner { padding-top: 40px; } 1825 | .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; } 1826 | .ui-header .ui-btn-icon-left .ui-btn-inner, 1827 | .ui-footer .ui-btn-icon-left .ui-btn-inner, 1828 | .ui-mini.ui-btn-icon-left .ui-btn-inner, 1829 | .ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; } 1830 | .ui-header .ui-btn-icon-right .ui-btn-inner, 1831 | .ui-footer .ui-btn-icon-right .ui-btn-inner, 1832 | .ui-mini.ui-btn-icon-right .ui-btn-inner, 1833 | .ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; } 1834 | .ui-header .ui-btn-icon-top .ui-btn-inner, 1835 | .ui-footer .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; } 1836 | .ui-mini.ui-btn-icon-top .ui-btn-inner, 1837 | .ui-mini .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; } 1838 | .ui-header .ui-btn-icon-bottom .ui-btn-inner, 1839 | .ui-footer .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; } 1840 | .ui-mini.ui-btn-icon-bottom .ui-btn-inner, 1841 | .ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; } 1842 | /*btn icon positioning*/ 1843 | .ui-btn-icon-notext .ui-icon { display: block; z-index: 0;} 1844 | .ui-btn-icon-left > .ui-btn-inner > .ui-icon, .ui-btn-icon-right > .ui-btn-inner > .ui-icon { position: absolute; top: 50%; margin-top: -9px; } 1845 | .ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; } 1846 | .ui-btn-icon-left .ui-icon { left: 10px; } 1847 | .ui-btn-icon-right .ui-icon { right: 10px; } 1848 | .ui-btn-icon-top .ui-icon { top: 10px; } 1849 | .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } 1850 | .ui-header .ui-btn-icon-left .ui-icon, 1851 | .ui-footer .ui-btn-icon-left .ui-icon, 1852 | .ui-mini.ui-btn-icon-left .ui-icon, 1853 | .ui-mini .ui-btn-icon-left .ui-icon { left: 5px; } 1854 | .ui-header .ui-btn-icon-right .ui-icon, 1855 | .ui-footer .ui-btn-icon-right .ui-icon, 1856 | .ui-mini.ui-btn-icon-right .ui-icon, 1857 | .ui-mini .ui-btn-icon-right .ui-icon { right: 5px; } 1858 | .ui-header .ui-btn-icon-top .ui-icon, 1859 | .ui-footer .ui-btn-icon-top .ui-icon, 1860 | .ui-mini.ui-btn-icon-top .ui-icon, 1861 | .ui-mini .ui-btn-icon-top .ui-icon { top: 5px; } 1862 | .ui-header .ui-btn-icon-bottom .ui-icon, 1863 | .ui-footer .ui-btn-icon-bottom .ui-icon, 1864 | .ui-mini.ui-btn-icon-bottom .ui-icon, 1865 | .ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; } 1866 | /*hiding native button,inputs */ 1867 | .ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: none; opacity: .1; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=0); font-size: 1px; border: none; text-indent: -9999px; } 1868 | .ui-field-contain .ui-btn.ui-submit { margin: 0; } 1869 | label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } 1870 | @media all and (min-width: 450px){ 1871 | .ui-field-contain label.ui-submit { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } 1872 | .ui-field-contain .ui-btn.ui-submit { width: 60%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } 1873 | .ui-hide-label .ui-btn.ui-submit { width: auto; } 1874 | } 1875 | .ui-collapsible { margin: .5em 0; } 1876 | .ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; } 1877 | .ui-collapsible-heading .ui-btn { text-align: left; margin: 0; } 1878 | .ui-collapsible-heading .ui-btn-inner, 1879 | .ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } 1880 | .ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; } 1881 | .ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner, 1882 | .ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; } 1883 | .ui-collapsible-heading .ui-btn span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; } 1884 | .ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner { padding: 10px 0; } 1885 | .ui-collapsible-heading .ui-btn span.ui-btn .ui-icon { left: 0; margin-top: -10px; } 1886 | .ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; } 1887 | .ui-collapsible-content { 1888 | display: block; 1889 | margin: 0 -8px; 1890 | padding: 10px 16px; 1891 | border-top: none; /* Overrides ui-btn-up-* */ 1892 | background-image: none; /* Overrides ui-btn-up-* */ 1893 | font-weight: normal; /* Overrides ui-btn-up-* */ 1894 | } 1895 | .ui-collapsible-content-collapsed { display: none; } 1896 | .ui-collapsible-set { margin: .5em 0; } 1897 | .ui-collapsible-set .ui-collapsible { margin: -1px 0 0; } 1898 | .ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0; zoom: 1; } 1899 | .ui-controlgroup.ui-mini, fieldset.ui-controlgroup.ui-mini { margin: .25em 0; } 1900 | .ui-field-contain .ui-controlgroup, .ui-field-contain fieldset.ui-controlgroup { margin: 0; } 1901 | .ui-bar .ui-controlgroup { margin: 0 5px; } 1902 | .ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; } 1903 | .ui-controlgroup-controls { display: block; width: 100%;} 1904 | .ui-controlgroup li { list-style: none; } 1905 | .ui-controlgroup-vertical .ui-btn, 1906 | .ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; } 1907 | .ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } 1908 | .ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; } 1909 | .ui-controlgroup .ui-btn-icon-notext { width: 24px; height: 24px; } 1910 | .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; right: 50%; margin: -9px -9px 0 0; } 1911 | .ui-controlgroup-horizontal .ui-controlgroup-controls:before, 1912 | .ui-controlgroup-horizontal .ui-controlgroup-controls:after { content: ""; display: table; } 1913 | .ui-controlgroup-horizontal .ui-controlgroup-controls:after { clear: both; } 1914 | .ui-controlgroup-horizontal .ui-controlgroup-controls { zoom: 1; } 1915 | .ui-controlgroup-horizontal .ui-btn-inner { text-align: center; } 1916 | .ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select, 1917 | .ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; } 1918 | .ui-controlgroup-horizontal .ui-select .ui-btn, 1919 | .ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn, 1920 | .ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; } 1921 | .ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; } 1922 | .ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; } 1923 | @media all and (min-width: 450px){ 1924 | .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } 1925 | .ui-field-contain .ui-controlgroup-controls { width: 60%; display: inline-block; } 1926 | .ui-field-contain .ui-controlgroup .ui-select { width: 100%; display: block; } 1927 | .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; } 1928 | .ui-hide-label .ui-controlgroup-controls { width: 100%; } 1929 | } 1930 | .ui-dialog { 1931 | background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */ 1932 | } 1933 | .ui-dialog-contain { width: 92.5%; max-width: 500px; margin: 10% auto 15px auto; padding: 0; } 1934 | .ui-dialog .ui-header { 1935 | margin-top: 15%; 1936 | border: none; 1937 | overflow: hidden; 1938 | } 1939 | .ui-dialog .ui-header, 1940 | .ui-dialog .ui-content, 1941 | .ui-dialog .ui-footer { 1942 | display: block; 1943 | position: relative; 1944 | width: auto; 1945 | } 1946 | .ui-dialog .ui-header, 1947 | .ui-dialog .ui-footer { 1948 | z-index: 10; 1949 | padding: 0; 1950 | } 1951 | .ui-dialog .ui-footer { 1952 | padding: 0 15px; 1953 | } 1954 | .ui-dialog .ui-content { 1955 | padding: 15px; 1956 | } 1957 | .ui-dialog { 1958 | margin-top: -15px; 1959 | } 1960 | .ui-checkbox, .ui-radio { position: relative; clear: both; margin: 0; z-index: 1; } 1961 | .ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: .5em 0; text-align: left; z-index: 2; } 1962 | .ui-checkbox .ui-btn.ui-mini, .ui-radio .ui-btn.ui-mini { margin: .25em 0; } 1963 | .ui-controlgroup .ui-checkbox .ui-btn, .ui-controlgroup .ui-radio .ui-btn { margin: 0; } 1964 | .ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; } 1965 | .ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; } 1966 | .ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; } 1967 | .ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } 1968 | .ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; } 1969 | .ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } 1970 | .ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } 1971 | .ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; } 1972 | .ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; } 1973 | .ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; } 1974 | .ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } 1975 | .ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } 1976 | .ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; } 1977 | .ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } 1978 | .ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } 1979 | .ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } 1980 | /* input, label positioning */ 1981 | .ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; } 1982 | .ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; } 1983 | .ui-field-contain:last-child { border-bottom-width: 0; } 1984 | .ui-field-contain { max-width: 100%; } /* This prevents horizontal scrollbar in IE7 */ 1985 | @media all and (min-width: 450px){ 1986 | .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; } 1987 | } 1988 | .ui-select { display: block; position: relative; } 1989 | .ui-select select { position: absolute; left: -9999px; top: -9999px; } 1990 | .ui-select .ui-btn { overflow: hidden; opacity: 1; } 1991 | .ui-field-contain .ui-select .ui-btn { margin: 0; } 1992 | /* Fixes #2588 — When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select—including “inherit”—without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */ 1993 | .ui-select .ui-btn select { cursor: pointer; -webkit-appearance: none; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); z-index: 2; } 1994 | .ui-select .ui-disabled { opacity: .3; } 1995 | @-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }} 1996 | .ui-select .ui-btn.ui-select-nativeonly { border-radius: 0; } 1997 | .ui-select .ui-btn.ui-select-nativeonly select { opacity: 1; text-indent: 0; } 1998 | .ui-select .ui-btn-icon-right .ui-btn-inner, .ui-select .ui-li-has-count .ui-btn-inner { padding-right: 45px; } 1999 | .ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 32px; } 2000 | .ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 80px; } 2001 | .ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 67px; } 2002 | .ui-select .ui-btn-icon-right .ui-icon { right: 15px; } 2003 | .ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; } 2004 | .ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 45px; } 2005 | .ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 32px; } 2006 | /* labels */ 2007 | label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } 2008 | /*listbox*/ 2009 | .ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important; 2010 | /* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ } 2011 | .ui-select .ui-btn-text { text-overflow: ellipsis; } 2012 | .ui-selectmenu { position: absolute; padding: 0; z-index: 1100 !important; width: 80%; max-width: 350px; padding: 6px; } 2013 | .ui-selectmenu .ui-listview { margin: 0; } 2014 | .ui-selectmenu .ui-btn.ui-li-divider { cursor: default; } 2015 | .ui-selectmenu-hidden { top: -99999px; left: -9999px; } 2016 | .ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; } 2017 | .ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; } 2018 | .ui-selectmenu-list .ui-li .ui-icon { display: block; } 2019 | .ui-li.ui-selectmenu-placeholder { display: none; } 2020 | .ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; } 2021 | @media all and (min-width: 450px){ 2022 | .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } 2023 | .ui-field-contain .ui-select { width: 60%; display: inline-block; } 2024 | .ui-hide-label .ui-select { width: 100%; } 2025 | } 2026 | /* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */ 2027 | .ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; } 2028 | label.ui-input-text { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; padding-right: 1em;} 2029 | input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; width: 100%; outline: 0; } 2030 | input.ui-input-text.ui-mini, textarea.ui-input-text.ui-mini { margin: .25em 0; } 2031 | .ui-field-contain input.ui-input-text, .ui-field-contain textarea.ui-input-text { margin: 0; } 2032 | input.ui-input-text, textarea.ui-input-text, .ui-input-search { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } 2033 | input.ui-input-text { -webkit-appearance: none; } 2034 | textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; } 2035 | .ui-input-search { padding: 0 30px; margin: .5em 0; background-image: none; position: relative; } 2036 | .ui-input-search.ui-mini { margin: .25em 0; } 2037 | .ui-field-contain .ui-input-search { margin: 0; } 2038 | .ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; } 2039 | .ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; } 2040 | .ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; } 2041 | .ui-mini .ui-input-clear { right: -3px; } 2042 | .ui-input-search .ui-input-clear-hidden { display: none; } 2043 | input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; } 2044 | textarea.ui-mini { height: 45px; } 2045 | @media all and (min-width: 450px){ 2046 | .ui-field-contain label.ui-input-text { vertical-align: top; width: 100%; margin: 0 2% 0 0 } 2047 | .ui-field-contain input.ui-input-text, 2048 | .ui-field-contain textarea.ui-input-text, 2049 | .ui-field-contain .ui-input-search { width: 100%; display: inline-block; } 2050 | .ui-hide-label input.ui-input-text, 2051 | .ui-hide-label textarea.ui-input-text, 2052 | .ui-hide-label .ui-input-search { width: 100%; } 2053 | .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ } 2054 | } 2055 | .ui-listview { margin: 0; counter-reset: listnumbering; } 2056 | .ui-content .ui-listview { margin: -15px; } 2057 | .ui-content .ui-listview-inset { margin: 1em 0; } 2058 | .ui-listview, .ui-li { list-style:none; padding:0; } 2059 | .ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; } 2060 | .ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } 2061 | .ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; } 2062 | /* Fixes #4254 to prevent inherit font-size from .ui-li-divider, .ui-li-static */ 2063 | .ui-li-divider .ui-btn-text, .ui-li-static .ui-btn-text { font-size: 16px; } 2064 | .ui-li-divider .ui-mini .ui-btn-text, .ui-li-static .ui-mini .ui-btn-text { font-size: inherit; } 2065 | .ui-li-divider { counter-reset: listnumbering; } 2066 | ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; } 2067 | ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */ 2068 | .ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; } 2069 | .ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; } 2070 | .ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; } 2071 | .ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px; display: block; } 2072 | .ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; } 2073 | .ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; } 2074 | .ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count, .ui-li-divider.ui-li-has-count { padding-right: 45px; } 2075 | .ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 40px; } 2076 | .ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; } 2077 | .ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } 2078 | .ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } 2079 | .ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; } 2080 | .ui-listview .ui-li-icon { max-height: 16px; max-width: 16px; left: 10px; top: .9em; } 2081 | .ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; } 2082 | .ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; } 2083 | @media all and (min-width: 480px){ 2084 | .ui-li-aside { width: 45%; } 2085 | } 2086 | .ui-li-divider { cursor: default; } 2087 | .ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 53px; } 2088 | .ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt.ui-li-has-count { padding-right: 88px; } 2089 | .ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 10px; } 2090 | .ui-li-has-count.ui-li-divider .ui-li-count, .ui-li-has-count .ui-link-inherit .ui-li-count { margin-top: -.95em; } 2091 | .ui-li-has-arrow.ui-li-has-count .ui-li-count { right: 40px; } 2092 | .ui-li-has-alt.ui-li-has-count .ui-li-count { right: 53px; } 2093 | .ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; } 2094 | .ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -13px 0 0 0; border-bottom-width: 1px; z-index: -1;} 2095 | .ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;} 2096 | .ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; } 2097 | .ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; } 2098 | .ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; } 2099 | .ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px } 2100 | .ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; } 2101 | .ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; } 2102 | .ui-li.ui-screen-hidden{display:none;} 2103 | /* Odd iPad positioning issue. */ 2104 | @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { 2105 | .ui-li .ui-btn-text { overflow: visible; } 2106 | } 2107 | label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } 2108 | input.ui-slider-input, 2109 | .ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; outline: 0; } 2110 | input.ui-slider-input.ui-mini, 2111 | .ui-field-contain input.ui-slider-input.ui-mini { width: 45px; margin: .25em 0; font-size: 14px; } 2112 | .ui-field-contain input.ui-slider-input { margin: 0; } 2113 | /* To do: Exclude ui-slider-input from textinput widget initSelector. The class ui-input-text is added to the slider input and label. When this is fixed, the rule below can be deleted. */ 2114 | input.ui-slider-input, .ui-field-contain input.ui-slider-input { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; box-sizing: content-box; } 2115 | select.ui-slider-switch { display: none; } 2116 | div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; } 2117 | div.ui-slider-mini { height: 12px; margin-left: 10px; top: 2px; } 2118 | div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; } 2119 | .ui-controlgroup a.ui-slider-handle, a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; } 2120 | a.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; } 2121 | div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; } 2122 | div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; border-top: none; } 2123 | @media all and (min-width: 450px){ 2124 | .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } 2125 | .ui-field-contain div.ui-slider { width: 43%; } 2126 | .ui-field-contain div.ui-slider-switch { width: 5.5em; } 2127 | } 2128 | div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.0em; } 2129 | a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; } 2130 | div.ui-slider-switch .ui-slider-handle { margin-top: 1px; } 2131 | .ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; } 2132 | div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; } 2133 | div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; } 2134 | div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; } 2135 | div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; } 2136 | span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; } 2137 | .ui-slider-mini span.ui-slider-label { font-size: 14px; } 2138 | span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; } 2139 | span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;} 2140 | .ui-slider-inline { width: 120px; display: inline-block; } 2141 | -------------------------------------------------------------------------------- /example/css/mobiscroll.core-2.0.1.css: -------------------------------------------------------------------------------- 1 | /* Datewheel overlay */ 2 | .dw { 3 | min-width:170px; 4 | padding: 0 10px; 5 | position: absolute; 6 | top: 5%; 7 | left: 0; 8 | z-index: 1001; 9 | color: #000; 10 | font-family: arial, verdana, sans-serif; 11 | font-size: 12px; 12 | text-shadow: none; 13 | } 14 | .dwi { 15 | position: static; 16 | margin: 5px; 17 | display: inline-block; 18 | } 19 | .dwwr { 20 | zoom: 1; 21 | } 22 | /* Datewheel overlay background */ 23 | .dwo { 24 | width: 100%; 25 | background: #000; 26 | position: absolute; 27 | top: 0; 28 | left: 0; 29 | z-index: 1000; 30 | opacity: .7; 31 | filter:Alpha(Opacity=70); 32 | } 33 | /* Datewheel wheel container wrapper */ 34 | .dwc { 35 | float: left; 36 | margin: 0 2px 5px 2px; 37 | padding-top: 30px; 38 | } 39 | .dwcc { 40 | clear: both; 41 | } 42 | /* Datewheel label */ 43 | .dwl { 44 | /*margin: 0 2px;*/ 45 | text-align: center; 46 | line-height: 30px; 47 | height: 30px; 48 | white-space: nowrap; 49 | position: absolute; 50 | top: -30px; 51 | width: 100%; 52 | } 53 | /* Datewheel value */ 54 | .dwv { 55 | padding: 10px 0; 56 | border-bottom: 1px solid #000; 57 | } 58 | /* Datewheel wheel container */ 59 | .dwrc { 60 | -webkit-border-radius: 3px; 61 | -moz-border-radius: 3px; 62 | border-radius: 3px; 63 | } 64 | .dwwc { 65 | margin: 0; 66 | padding: 0 2px; 67 | position: relative; 68 | background: #000; 69 | zoom:1; 70 | } 71 | /* Datewheel wheels */ 72 | .dwwl { 73 | margin: 4px 2px; 74 | position: relative; 75 | background: #888; 76 | background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #000),color-stop(0.35, #333),color-stop(0.50, #888),color-stop(0.65, #333),color-stop(1, #000)); 77 | background: -moz-linear-gradient(#000 0%,#333 35%, #888 50%,#333 65%,#000 100%); 78 | background: -ms-linear-gradient(#000 0%,#333 35%, #888 50%,#333 65%,#000 100%); 79 | background: -o-linear-gradient(#000 0%,#333 35%, #888 50%,#333 65%,#000 100%); 80 | } 81 | .dww { 82 | margin: 0 2px; 83 | overflow: hidden; 84 | position: relative; 85 | /*top: -30px;*/ 86 | } 87 | .dwsc .dww { 88 | color: #fff; 89 | background: #444; 90 | background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #000),color-stop(0.45, #444),color-stop(0.55, #444),color-stop(1, #000)); 91 | background: -moz-linear-gradient(#000 0%,#444 45%, #444 55%, #000 100%); 92 | background: -ms-linear-gradient(#000 0%,#444 45%, #444 55%, #000 100%); 93 | background: -o-linear-gradient(#000 0%,#444 45%, #444 55%, #000 100%); 94 | } 95 | .dww ul { 96 | list-style: none; 97 | margin: 0; 98 | padding: 0; 99 | /*display: block; 100 | width: 100%;*/ 101 | position: relative; 102 | z-index: 2; 103 | } 104 | .dww li { 105 | list-style: none; 106 | margin: 0; 107 | padding: 0 5px; 108 | display: block; 109 | text-align: center; 110 | line-height: 40px; 111 | font-size: 26px; 112 | white-space: nowrap; 113 | text-shadow: 0 1px 1px #000; 114 | opacity: .3; 115 | filter: Alpha(Opacity=30); 116 | } 117 | /* Valid entry */ 118 | .dww li.dw-v { 119 | opacity: 1; 120 | filter: Alpha(Opacity=100); 121 | } 122 | /* Hidden entry */ 123 | .dww li.dw-h { 124 | visibility: hidden; 125 | } 126 | /* Wheel +/- buttons */ 127 | .dwwb { 128 | position: absolute; 129 | z-index: 4; 130 | left: 0; 131 | cursor: pointer; 132 | width: 100%; 133 | height: 40px; 134 | text-align: center; 135 | } 136 | .dwwbp { 137 | top: 0; 138 | -webkit-border-radius: 3px 3px 0 0; 139 | -moz-border-radius: 3px 3px 0 0; 140 | border-radius: 3px 3px 0 0; 141 | font-size: 40px; 142 | } 143 | .dwwbm { 144 | bottom: 0; 145 | -webkit-border-radius: 0 0 3px 3px; 146 | -moz-border-radius: 0 0 3px 3px; 147 | border-radius: 0 0 3px 3px; 148 | font-size: 32px; 149 | font-weight: bold; 150 | } 151 | .dwpm .dwwc { 152 | background: transparent; 153 | } 154 | .dwpm .dww { 155 | margin: -1px; 156 | } 157 | .dwpm .dww li { 158 | text-shadow: none; 159 | } 160 | .dwpm .dwwol { 161 | display: none; 162 | } 163 | /* Datewheel wheel overlay */ 164 | .dwwo { 165 | position: absolute; 166 | z-index: 3; 167 | top: 0; 168 | left: 0; 169 | width: 100%; 170 | height: 100%; 171 | background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #000),color-stop(0.52, rgba(44,44,44,0)),color-stop(0.48, rgba(44,44,44,0)),color-stop(1, #000)); 172 | background: -moz-linear-gradient(#000 0%,rgba(44,44,44,0) 52%, rgba(44,44,44,0) 48%, #000 100%); 173 | background: -ms-linear-gradient(#000 0%,rgba(44,44,44,0) 52%, rgba(44,44,44,0) 48%, #000 100%); 174 | background: -o-linear-gradient(#000 0%,rgba(44,44,44,0) 52%, rgba(44,44,44,0) 48%, #000 100%); 175 | } 176 | /* Background line */ 177 | .dwwol { 178 | position: absolute; 179 | z-index: 1; 180 | top: 50%; 181 | left: 0; 182 | width: 100%; 183 | height: 0; 184 | margin-top: -1px; 185 | border-top: 1px solid #333; 186 | border-bottom: 1px solid #555; 187 | } 188 | /* Datewheel button */ 189 | .dwbg .dwb { 190 | display: block; 191 | height: 40px; 192 | line-height: 40px; 193 | padding: 0 15px; 194 | margin: 0 2px; 195 | font-size: 14px; 196 | font-weight: bold; 197 | text-decoration: none; 198 | text-shadow:0 -1px 1px #000; 199 | border-radius: 5px; 200 | -moz-border-radius: 5px; 201 | -webkit-border-radius:5px; 202 | box-shadow:0 1px 3px rgba(0,0,0,0.5); 203 | -moz-box-shadow:0 1px 3px rgba(0,0,0,0.5); 204 | -webkit-box-shadow:0 1px 3px rgba(0,0,0,0.5); 205 | color: #fff; 206 | background:#000; 207 | background:-webkit-gradient(linear,left bottom,left top,color-stop(0.5, #000),color-stop(0.5, #6e6e6e)); 208 | background:-moz-linear-gradient(#6e6e6e 50%,#000 50%); 209 | background:-ms-linear-gradient(#6e6e6e 50%,#000 50%); 210 | background:-o-linear-gradient(#6e6e6e 50%,#000 50%); 211 | } 212 | /* Datewheel button container */ 213 | .dwbc { 214 | /*margin-top: 5px;*/ 215 | padding: 5px 0; 216 | text-align: center; 217 | clear: both; 218 | } 219 | /* Datewheel button wrapper */ 220 | .dwbw { 221 | display: inline-block; 222 | width: 50%; 223 | } 224 | /* Hidden label */ 225 | .dwhl { 226 | padding-top: 10px; 227 | } 228 | .dwhl .dwl { 229 | display: none; 230 | } 231 | /* Backgrounds */ 232 | .dwbg { 233 | background: #fff; 234 | border-radius: 3px; 235 | -webkit-border-radius: 3px; 236 | -moz-border-radius: 3px; 237 | } 238 | .dwbg .dwpm .dww { 239 | color: #000; 240 | background: #fff; 241 | border: 1px solid #AAA; 242 | } 243 | .dwbg .dwwb { 244 | background: #ccc; 245 | color: #888; 246 | text-shadow: 0 -1px 1px #333; 247 | box-shadow: 0 0 5px #333; 248 | -webkit-box-shadow: 0 0 5px #333; 249 | -moz-box-shadow: 0 0 5px #333; 250 | } 251 | .dwbg .dwwbp { 252 | background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #bdbdbd),color-stop(1, #f7f7f7)); 253 | background: -moz-linear-gradient(#f7f7f7,#bdbdbd); 254 | background: -ms-linear-gradient(#f7f7f7,#bdbdbd); 255 | background: -o-linear-gradient(#f7f7f7,#bdbdbd); 256 | } 257 | .dwbg .dwwbm { 258 | background: -webkit-gradient(linear,left bottom,left top,color-stop(0, #f7f7f7),color-stop(1, #bdbdbd)); 259 | background: -moz-linear-gradient(#bdbdbd,#f7f7f7); 260 | background: -ms-linear-gradient(#bdbdbd,#f7f7f7); 261 | background: -o-linear-gradient(#bdbdbd,#f7f7f7); 262 | } 263 | .dwbg .dwb-a { 264 | background:#3c7500; 265 | background:-webkit-gradient(linear,left bottom,left top,color-stop(0.5, #3c7500),color-stop(0.5, #94c840)); 266 | background:-moz-linear-gradient(#94c840 50%,#3c7500 50%); 267 | background:-ms-linear-gradient(#94c840 50%,#3c7500 50%); 268 | background:-o-linear-gradient(#94c840 50%,#3c7500 50%); 269 | } 270 | .dwbg .dwwl .dwb-a { 271 | background:#3c7500; 272 | background:-webkit-gradient(linear,left bottom,left top,color-stop(0, #3c7500),color-stop(1, #94c840)); 273 | background:-moz-linear-gradient(#94c840,#3c7500); 274 | background:-ms-linear-gradient(#94c840,#3c7500); 275 | background:-o-linear-gradient(#94c840,#3c7500); 276 | } 277 | -------------------------------------------------------------------------------- /example/css/mobiscroll.jqm-2.0.1.css: -------------------------------------------------------------------------------- 1 | /* jQuery Mobile Theme */ 2 | .jqm .dwo { 3 | background: none; 4 | } 5 | .jqm .dw { 6 | padding: 6px; 7 | z-index: 1003; 8 | } 9 | .jqm .dwv { 10 | position: static; 11 | width: auto; 12 | padding: .7em 15px .7em 15px; 13 | border: 0; 14 | } 15 | .jqm .dwwr { 16 | border: 0; 17 | } 18 | .jqm .dwpm .dwwo { 19 | background: none; 20 | } 21 | .jqm .dwc { 22 | margin: 0; 23 | padding: 30px 5px 5px 5px; 24 | } 25 | .jqm .dwhl { 26 | padding: 5px; 27 | } 28 | .jqm .dwwb { 29 | margin: 0; 30 | border: 0; 31 | } 32 | .jqm .dwwb span { 33 | padding: 0; 34 | } 35 | .jqm .dwwbp .ui-btn-inner { 36 | -webkit-border-radius: 3px 3px 0 0; 37 | -moz-border-radius: 3px 3px 0 0; 38 | border-radius: 3px 3px 0 0; 39 | } 40 | .jqm .dwwbm .ui-btn-inner { 41 | -webkit-border-radius: 0 0 3px 3px; 42 | -moz-border-radius: 0 0 3px 3px; 43 | border-radius: 0 0 3px 3px; 44 | } 45 | .jqm .dwwbp span { 46 | font-weight: normal; 47 | } 48 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Phonegap Sample App 8 | 9 | 10 | 11 | 12 | 110 | 111 | 112 |
113 | 114 |
115 |
116 |
117 | 118 |
119 |

JPushPlugin Example

120 |
121 | 122 | 123 |
124 |
125 | 126 | 127 | 128 | 131 | 132 | 133 | 136 | 137 | 138 | 141 | 142 |
129 | 130 |
134 | 135 |
139 | 140 |
143 | 144 | 145 | 146 | 149 | 150 |
147 | 148 |
151 |
152 |
153 | 154 |
155 |
156 | 157 |
158 |
159 |
160 |
161 | 162 |
163 | 164 | 165 | 166 | 167 | -------------------------------------------------------------------------------- /example/js/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/donghongfei/jpush-phonegap-plugin/fb5b6712087ab93908ded4c0cbb65d804a19508b/example/js/.DS_Store -------------------------------------------------------------------------------- /plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | JPush Plugin 8 | JPush for cordova plugin 9 | JPush 10 | JPush,push 11 | Apache 2.0 License 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 75 | 76 | 77 | 78 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 93 | 94 | 95 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | -------------------------------------------------------------------------------- /src/android/JPushPlugin.java: -------------------------------------------------------------------------------- 1 | package cn.jpush.phonegap; 2 | 3 | import java.lang.reflect.Method; 4 | import java.util.Arrays; 5 | import java.util.HashMap; 6 | import java.util.HashSet; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.Set; 10 | import java.util.concurrent.ExecutorService; 11 | import java.util.concurrent.Executors; 12 | 13 | import org.apache.cordova.CallbackContext; 14 | import org.apache.cordova.CordovaInterface; 15 | import org.apache.cordova.CordovaPlugin; 16 | import org.apache.cordova.CordovaWebView; 17 | import org.json.JSONArray; 18 | import org.json.JSONException; 19 | import org.json.JSONObject; 20 | import java.util.Map.Entry; 21 | 22 | import your.package.name.R; 23 | 24 | import cn.jpush.android.api.BasicPushNotificationBuilder; 25 | import cn.jpush.android.api.CustomPushNotificationBuilder; 26 | import cn.jpush.android.api.JPushInterface; 27 | import cn.jpush.android.data.JPushLocalNotification; 28 | import cn.jpush.android.api.TagAliasCallback; 29 | 30 | public class JPushPlugin extends CordovaPlugin { 31 | private final static List methodList = 32 | Arrays.asList( 33 | "getRegistrationID", 34 | "setTags", 35 | "setTagsWithAlias", 36 | "setAlias", 37 | "getNotification", 38 | "setBasicPushNotificationBuilder", 39 | "setCustomPushNotificationBuilder", 40 | "setPushTime", 41 | "init", 42 | "setDebugMode", 43 | "stopPush", 44 | "resumePush", 45 | "isPushStopped", 46 | "setLatestNotificationNum", 47 | "setPushTime", 48 | "clearAllNotification", 49 | "addLocalNotification", 50 | "removeLocalNotification", 51 | "clearLocalNotifications", 52 | "onResume", 53 | "onPause", 54 | "reportNotificationOpened"); 55 | 56 | private ExecutorService threadPool = Executors.newFixedThreadPool(1); 57 | private static JPushPlugin instance; 58 | 59 | public static String notificationAlert; 60 | public static Map notificationExtras=new HashMap(); 61 | 62 | public JPushPlugin() { 63 | instance = this; 64 | } 65 | 66 | @Override 67 | public void initialize(CordovaInterface cordova, CordovaWebView webView) { 68 | super.initialize(cordova, webView); 69 | //JPushInterface.setDebugMode(true); 70 | //JPushInterface.init(cordova.getActivity().getApplicationContext()); 71 | } 72 | 73 | 74 | private static JSONObject notificationObject(String message, 75 | Map extras) { 76 | JSONObject data = new JSONObject(); 77 | try { 78 | data.put("message", message); 79 | JSONObject jExtras = new JSONObject(); 80 | for(Entry entry:extras.entrySet()){ 81 | if(entry.getKey().equals("cn.jpush.android.EXTRA")){ 82 | JSONObject jo = new JSONObject((String)entry.getValue()); 83 | jExtras.put("cn.jpush.android.EXTRA", jo); 84 | } else { 85 | jExtras.put(entry.getKey(),entry.getValue()); 86 | } 87 | } 88 | if(jExtras.length()>0) 89 | { 90 | data.put("extras", jExtras); 91 | } 92 | } catch (JSONException e) { 93 | 94 | } 95 | return data; 96 | } 97 | 98 | private static JSONObject openNotificationObject(String alert, 99 | Map extras){ 100 | JSONObject data = new JSONObject(); 101 | try{ 102 | data.put("alert", alert); 103 | JSONObject jExtras = new JSONObject(); 104 | for(Entry entry:extras.entrySet()){ 105 | if(entry.getKey().equals("cn.jpush.android.EXTRA")){ 106 | JSONObject jo = new JSONObject((String)entry.getValue()); 107 | jExtras.put("cn.jpush.android.EXTRA", jo); 108 | }else{ 109 | jExtras.put(entry.getKey(),entry.getValue()); 110 | } 111 | } 112 | if(jExtras.length()>0) 113 | { 114 | data.put("extras", jExtras); 115 | } 116 | } catch (JSONException e) { 117 | 118 | } 119 | return data; 120 | } 121 | static void transmitPush(String message, Map extras) { 122 | if (instance == null) { 123 | return; 124 | } 125 | JSONObject data = notificationObject(message, extras); 126 | String js = String 127 | .format("window.plugins.jPushPlugin.receiveMessageInAndroidCallback('%s');", 128 | data.toString()); 129 | try { 130 | instance.webView.sendJavascript(js); 131 | } catch (NullPointerException e) { 132 | 133 | } catch (Exception e) { 134 | 135 | } 136 | } 137 | static void transmitOpen(String alert, Map extras) { 138 | if (instance == null) { 139 | return; 140 | } 141 | JSONObject data = openNotificationObject(alert, extras); 142 | String js = String 143 | .format("window.plugins.jPushPlugin.openNotificationInAndroidCallback('%s');", 144 | data.toString()); 145 | try { 146 | instance.webView.sendJavascript(js); 147 | 148 | String jsEvent=String 149 | .format("cordova.fireDocumentEvent('jpush.openNotification',%s)", 150 | data.toString()); 151 | instance.webView.sendJavascript(jsEvent); 152 | } catch (NullPointerException e) { 153 | 154 | } catch (Exception e) { 155 | 156 | } 157 | } 158 | @Override 159 | public boolean execute(final String action, final JSONArray data, 160 | final CallbackContext callbackContext) throws JSONException { 161 | if (!methodList.contains(action)) { 162 | return false; 163 | } 164 | threadPool.execute(new Runnable() { 165 | @Override 166 | public void run() { 167 | try { 168 | Method method = JPushPlugin.class.getDeclaredMethod(action, 169 | JSONArray.class, CallbackContext.class); 170 | method.invoke(JPushPlugin.this, data, callbackContext); 171 | } catch (Exception e) { 172 | System.out.println(e.toString()); 173 | } 174 | } 175 | }); 176 | return true; 177 | } 178 | 179 | void init(JSONArray data,CallbackContext callbackContext){ 180 | JPushInterface.init(this.cordova.getActivity().getApplicationContext()); 181 | //callbackContext.success(); 182 | } 183 | 184 | void setDebugMode(JSONArray data, CallbackContext callbackContext) { 185 | boolean mode; 186 | try { 187 | mode = data.getBoolean(0); 188 | // if (mode.equals("true")) { 189 | // JPushInterface.setDebugMode(true); 190 | // } else if (mode.equals("false")) { 191 | // JPushInterface.setDebugMode(false); 192 | // } else { 193 | // callbackContext.error("error mode"); 194 | // } 195 | JPushInterface.setDebugMode(mode); 196 | callbackContext.success(); 197 | } catch (JSONException e) { 198 | } 199 | } 200 | 201 | void stopPush(JSONArray data, 202 | CallbackContext callbackContext){ 203 | JPushInterface.stopPush(this.cordova.getActivity().getApplicationContext()); 204 | callbackContext.success(); 205 | } 206 | 207 | void resumePush(JSONArray data, 208 | CallbackContext callbackContext){ 209 | JPushInterface.resumePush(this.cordova.getActivity().getApplicationContext()); 210 | callbackContext.success(); 211 | } 212 | 213 | void isPushStopped(JSONArray data, 214 | CallbackContext callbackContext){ 215 | boolean isStopped =JPushInterface.isPushStopped(this.cordova.getActivity().getApplicationContext()); 216 | if(isStopped){ 217 | callbackContext.success(1); 218 | }else{ 219 | callbackContext.success(0); 220 | } 221 | } 222 | 223 | void setLatestNotificationNum(JSONArray data, 224 | CallbackContext callbackContext){ 225 | int num = -1; 226 | try { 227 | num = data.getInt(0); 228 | } catch (JSONException e) { 229 | e.printStackTrace(); 230 | callbackContext.error("error reading num json"); 231 | } 232 | if(num != -1){ 233 | JPushInterface.setLatestNotificationNumber(this.cordova.getActivity().getApplicationContext(), num); 234 | }else{ 235 | callbackContext.error("error num"); 236 | } 237 | } 238 | 239 | void setPushTime(JSONArray data, 240 | CallbackContext callbackContext){ 241 | Set days = new HashSet(); 242 | JSONArray dayArray; 243 | int startHour = -1; 244 | int endHour = -1; 245 | try { 246 | dayArray = data.getJSONArray(0); 247 | for (int i = 0; i < dayArray.length(); i++) { 248 | days.add(dayArray.getInt(i)); 249 | } 250 | } catch (JSONException e) { 251 | e.printStackTrace(); 252 | callbackContext.error("error reading days json"); 253 | } 254 | try{ 255 | startHour = data.getInt(1); 256 | endHour = data.getInt(2); 257 | }catch(JSONException e){ 258 | callbackContext.error("error reading hour json"); 259 | } 260 | JPushInterface.setPushTime(this.cordova.getActivity().getApplicationContext(), days, startHour, endHour); 261 | callbackContext.success(); 262 | } 263 | 264 | void getRegistrationID(JSONArray data, CallbackContext callbackContext) { 265 | String regID= JPushInterface.getRegistrationID(this.cordova.getActivity().getApplicationContext()); 266 | callbackContext.success(regID); 267 | 268 | } 269 | void onResume(JSONArray data, CallbackContext callbackContext) { 270 | JPushInterface.onResume(this.cordova.getActivity()); 271 | } 272 | void onPause(JSONArray data, CallbackContext callbackContext) { 273 | JPushInterface.onPause(this.cordova.getActivity()); 274 | } 275 | void reportNotificationOpened(JSONArray data, CallbackContext callbackContext) { 276 | try { 277 | String msgID; 278 | msgID = data.getString(0); 279 | JPushInterface.reportNotificationOpened(this.cordova.getActivity(),msgID); 280 | } catch (JSONException e) { 281 | // TODO Auto-generated catch block 282 | e.printStackTrace(); 283 | } 284 | 285 | } 286 | void setTags(JSONArray data, CallbackContext callbackContext) { 287 | 288 | HashSet tags=null; 289 | try { 290 | String tagStr; 291 | if(data==null){ 292 | //tags=null; 293 | }else if(data.length()==0) { 294 | tags= new HashSet(); 295 | }else{ 296 | tagStr = data.getString(0); 297 | String[] tagArray = tagStr.split(","); 298 | for (String tag : tagArray) { 299 | if(tags==null){ 300 | tags= new HashSet(); 301 | } 302 | tags.add(tag); 303 | } 304 | } 305 | //Set validTags = JPushInterface.filterValidTags(tags); 306 | JPushInterface.setTags(this.cordova.getActivity() 307 | .getApplicationContext(), tags,mTagWithAliasCallback); 308 | callbackContext.success(); 309 | } catch (JSONException e) { 310 | e.printStackTrace(); 311 | callbackContext.error("Error reading tags JSON"); 312 | } 313 | } 314 | 315 | void setAlias(JSONArray data, CallbackContext callbackContext) { 316 | try { 317 | String alias = data.getString(0); 318 | JPushInterface.setAlias(this.cordova.getActivity() 319 | .getApplicationContext(), alias,mTagWithAliasCallback); 320 | callbackContext.success(); 321 | } catch (JSONException e) { 322 | e.printStackTrace(); 323 | callbackContext.error("Error reading alias JSON"); 324 | } 325 | } 326 | 327 | void setTagsWithAlias(JSONArray data, CallbackContext callbackContext) { 328 | HashSet tags = new HashSet(); 329 | String alias; 330 | try { 331 | alias = data.getString(0); 332 | JSONArray tagsArray = data.getJSONArray(1); 333 | for (int i = 0; i < tagsArray.length(); i++) { 334 | tags.add(tagsArray.getString(i)); 335 | } 336 | 337 | JPushInterface.setAliasAndTags(this.cordova.getActivity() 338 | .getApplicationContext(), alias, tags,mTagWithAliasCallback); 339 | callbackContext.success(); 340 | } catch (JSONException e) { 341 | e.printStackTrace(); 342 | callbackContext.error("Error reading tagAlias JSON"); 343 | } 344 | } 345 | 346 | // void getNotification(JSONArray data, CallbackContext callBackContext) { 347 | // String alert = JPushPlugin.notificationAlert; 348 | // Map extras = JPushPlugin.notificationExtras; 349 | // 350 | // JSONObject jsonData = new JSONObject(); 351 | // try { 352 | // jsonData.put("message", alert); 353 | // jsonData.put("extras", new JSONObject(extras)); 354 | // } catch (JSONException e) { 355 | // e.printStackTrace(); 356 | // } 357 | // 358 | // callBackContext.success(jsonData); 359 | // 360 | // JPushPlugin.notificationAlert = ""; 361 | // JPushPlugin.notificationExtras = new HashMap(); 362 | // } 363 | 364 | void setBasicPushNotificationBuilder(JSONArray data, 365 | CallbackContext callbackContext) { 366 | BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder( 367 | this.cordova.getActivity()); 368 | builder.developerArg0 = "Basic builder 1"; 369 | JPushInterface.setPushNotificationBuilder(1, builder); 370 | JSONObject obj = new JSONObject(); 371 | try { 372 | obj.put("id", 1); 373 | } catch (JSONException e) { 374 | e.printStackTrace(); 375 | } 376 | //callbackContext.success(obj); 377 | } 378 | 379 | void setCustomPushNotificationBuilder(JSONArray data, 380 | CallbackContext callbackContext) { 381 | CustomPushNotificationBuilder builder = new CustomPushNotificationBuilder( 382 | this.cordova.getActivity(), R.layout.test_notification_layout, 383 | R.id.icon, R.id.title, R.id.text); 384 | builder.developerArg0 = "Custom Builder 1"; 385 | builder.layoutIconDrawable = R.drawable.jpush_notification_icon; 386 | JPushInterface.setPushNotificationBuilder(2, builder); 387 | JSONObject obj = new JSONObject(); 388 | try { 389 | obj.put("id", 2); 390 | } catch (JSONException e) { 391 | e.printStackTrace(); 392 | } 393 | //callbackContext.success(obj); 394 | } 395 | 396 | void clearAllNotification(JSONArray data, 397 | CallbackContext callbackContext){ 398 | JPushInterface.clearAllNotifications(this.cordova.getActivity()); 399 | //callbackContext.success(); 400 | } 401 | 402 | void clearNotificationById(JSONArray data, 403 | CallbackContext callbackContext){ 404 | int notificationId=-1; 405 | try { 406 | notificationId = data.getInt(0); 407 | } catch (JSONException e) { 408 | e.printStackTrace(); 409 | callbackContext.error("error reading id json"); 410 | } 411 | if(notificationId != -1){ 412 | JPushInterface.clearNotificationById(this.cordova.getActivity(), notificationId); 413 | }else{ 414 | callbackContext.error("error id"); 415 | } 416 | } 417 | void addLocalNotification(JSONArray data, 418 | CallbackContext callbackContext) throws JSONException{ 419 | //builderId,content,title,notificaitonID,broadcastTime,extras 420 | 421 | int builderId=data.getInt(0); 422 | String content =data.getString(1); 423 | String title = data.getString(2); 424 | int notificationID= data.getInt(3); 425 | int broadcastTime=data.getInt(4); 426 | JSONObject extras=data.getJSONObject(5); 427 | 428 | JPushLocalNotification ln = new JPushLocalNotification(); 429 | ln.setBuilderId(builderId); 430 | ln.setContent(content); 431 | ln.setTitle(title); 432 | ln.setNotificationId(notificationID) ; 433 | ln.setBroadcastTime(System.currentTimeMillis() + broadcastTime); 434 | 435 | ln.setExtras(extras.toString()) ; 436 | JPushInterface.addLocalNotification(this.cordova.getActivity(), ln); 437 | 438 | } 439 | void removeLocalNotification(JSONArray data, 440 | CallbackContext callbackContext) throws JSONException{ 441 | 442 | int notificationID=data.getInt(0); 443 | JPushInterface.removeLocalNotification(this.cordova.getActivity(),notificationID); 444 | 445 | } 446 | void clearLocalNotifications(JSONArray data, 447 | CallbackContext callbackContext){ 448 | 449 | JPushInterface.clearLocalNotifications(this.cordova.getActivity()); 450 | 451 | } 452 | 453 | private final TagAliasCallback mTagWithAliasCallback = new TagAliasCallback() { 454 | 455 | @Override 456 | public void gotResult(int code, String alias, Set tags) { 457 | if (instance == null) { 458 | return; 459 | } 460 | 461 | JSONObject data = new JSONObject(); 462 | try { 463 | data.put("resultCode", code); 464 | data.put("tags", tags); 465 | data.put("alias", alias); 466 | 467 | String jsEvent=String 468 | .format("cordova.fireDocumentEvent('jpush.setTagsWithAlias',%s)", 469 | data.toString()); 470 | instance.webView.sendJavascript(jsEvent); 471 | 472 | 473 | } catch (JSONException e) { 474 | 475 | } 476 | 477 | } 478 | 479 | }; 480 | 481 | 482 | 483 | } 484 | -------------------------------------------------------------------------------- /src/android/MyReceiver.java: -------------------------------------------------------------------------------- 1 | package cn.jpush.phonegap; 2 | 3 | 4 | import java.util.Arrays; 5 | import java.util.HashMap; 6 | import java.util.List; 7 | import java.util.Map; 8 | import cn.jpush.android.api.JPushInterface; 9 | import android.content.BroadcastReceiver; 10 | import android.content.Context; 11 | import android.content.Intent; 12 | import android.util.Log; 13 | 14 | public class MyReceiver extends BroadcastReceiver { 15 | private static String TAG = "Client Receiver"; 16 | @Override 17 | public void onReceive(Context context, Intent intent) { 18 | 19 | if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { 20 | 21 | }else if (JPushInterface.ACTION_UNREGISTER.equals(intent.getAction())){ 22 | 23 | } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { 24 | handlingReceivedMessage(intent); 25 | } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { 26 | 27 | } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { 28 | handlingNotificationOpen(context,intent); 29 | } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) { 30 | 31 | } else { 32 | Log.d(TAG, "Unhandled intent - " + intent.getAction()); 33 | } 34 | 35 | } 36 | private void handlingReceivedMessage(Intent intent) { 37 | String msg = intent.getStringExtra(JPushInterface.EXTRA_MESSAGE); 38 | Map extras = getNotificationExtras(intent); 39 | 40 | JPushPlugin.transmitPush(msg, extras); 41 | } 42 | private void handlingNotificationOpen(Context context,Intent intent){ 43 | String alert = intent.getStringExtra(JPushInterface.EXTRA_ALERT); 44 | Map extras = getNotificationExtras(intent); 45 | 46 | Intent launch = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); 47 | launch.addCategory(Intent.CATEGORY_LAUNCHER); 48 | launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP); 49 | 50 | JPushPlugin.notificationAlert = alert; 51 | JPushPlugin.notificationExtras = extras; 52 | 53 | JPushPlugin.transmitOpen(alert, extras); 54 | 55 | context.startActivity(launch); 56 | } 57 | private Map getNotificationExtras(Intent intent) { 58 | Map extrasMap = new HashMap(); 59 | 60 | for (String key : intent.getExtras().keySet()) { 61 | if (!IGNORED_EXTRAS_KEYS.contains(key)) { 62 | Log.e("key","key:"+key); 63 | if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)){ 64 | extrasMap.put(key, intent.getIntExtra(key,0)); 65 | }else{ 66 | extrasMap.put(key, intent.getStringExtra(key)); 67 | } 68 | } 69 | } 70 | return extrasMap; 71 | } 72 | private static final List IGNORED_EXTRAS_KEYS = 73 | Arrays.asList("cn.jpush.android.TITLE","cn.jpush.android.MESSAGE","cn.jpush.android.APPKEY","cn.jpush.android.NOTIFICATION_CONTENT_TITLE"); 74 | } 75 | -------------------------------------------------------------------------------- /src/android/armeabi-v7a/libjpush172.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/donghongfei/jpush-phonegap-plugin/fb5b6712087ab93908ded4c0cbb65d804a19508b/src/android/armeabi-v7a/libjpush172.so -------------------------------------------------------------------------------- /src/android/armeabi/libjpush172.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/donghongfei/jpush-phonegap-plugin/fb5b6712087ab93908ded4c0cbb65d804a19508b/src/android/armeabi/libjpush172.so -------------------------------------------------------------------------------- /src/android/jpush-sdk-release1.7.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/donghongfei/jpush-phonegap-plugin/fb5b6712087ab93908ded4c0cbb65d804a19508b/src/android/jpush-sdk-release1.7.2.jar -------------------------------------------------------------------------------- /src/android/jpush_notification_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/donghongfei/jpush-phonegap-plugin/fb5b6712087ab93908ded4c0cbb65d804a19508b/src/android/jpush_notification_icon.png -------------------------------------------------------------------------------- /src/android/test_notification_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | 15 | 19 | 23 | 24 | -------------------------------------------------------------------------------- /src/ios/Plugins/JPushPlugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // PushTalkPlugin.h 3 | // PushTalk 4 | // 5 | // Created by zhangqinghe on 13-12-13. 6 | // 7 | // 8 | 9 | #import 10 | 11 | #define kJPushPlugReceiveNotificaiton @"JPushPluginRecieveNotification" 12 | 13 | @interface JPushPlugin : CDVPlugin{ 14 | 15 | } 16 | 17 | -(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command; 18 | -(void)setTags:(CDVInvokedUrlCommand*)command; 19 | -(void)setAlias:(CDVInvokedUrlCommand*)command; 20 | -(void)getRegistrationID:(CDVInvokedUrlCommand*)command; 21 | -(void)startLogPageView:(CDVInvokedUrlCommand*)command; 22 | -(void)stopLogPageView:(CDVInvokedUrlCommand*)command; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /src/ios/Plugins/JPushPlugin.m: -------------------------------------------------------------------------------- 1 | // 2 | // PushTalkPlugin.m 3 | // PushTalk 4 | // 5 | // Created by zhangqinghe on 13-12-13. 6 | // 7 | // 8 | 9 | #import "JPushPlugin.h" 10 | #import "APService.h" 11 | 12 | @implementation JPushPlugin 13 | 14 | - (CDVPlugin*)initWithWebView:(UIWebView*)theWebView{ 15 | if (self=[super initWithWebView:theWebView]) { 16 | 17 | NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; 18 | [defaultCenter addObserver:self 19 | selector:@selector(networkDidReceiveMessage:) 20 | name:kJPFNetworkDidReceiveMessageNotification 21 | object:nil]; 22 | 23 | [defaultCenter addObserver:self 24 | selector:@selector(networkDidReceiveNotification:) 25 | name:kJPushPlugReceiveNotificaiton 26 | object:nil]; 27 | 28 | } 29 | return self; 30 | } 31 | 32 | -(void)setTagsWithAlias:(CDVInvokedUrlCommand*)command{ 33 | 34 | NSArray *arguments=command.arguments; 35 | if (!arguments||[arguments count]<2) { 36 | // [self writeJavascript:[NSString stringWithFormat:@"window.plugins.jPushPlugin.pushCallback('%@')",@""]]; 37 | return ; 38 | } 39 | NSString *alias=[arguments objectAtIndex:0]; 40 | NSArray *arrayTags=[arguments objectAtIndex:1]; 41 | NSSet* set=[NSSet setWithArray:arrayTags]; 42 | [APService setTags:set 43 | alias:alias 44 | callbackSelector:@selector(tagsWithAliasCallback:tags:alias:) 45 | object:self]; 46 | } 47 | 48 | -(void)setTags:(CDVInvokedUrlCommand *)command{ 49 | 50 | 51 | NSArray *arguments=[command arguments]; 52 | NSString *tags=[arguments objectAtIndex:0]; 53 | 54 | NSArray *array=[tags componentsSeparatedByString:@","]; 55 | [APService setTags:[NSSet setWithArray:array] 56 | callbackSelector:@selector(tagsWithAliasCallback:tags:alias:) 57 | object:self]; 58 | 59 | } 60 | 61 | -(void)setAlias:(CDVInvokedUrlCommand *)command{ 62 | 63 | NSArray *arguments=[command arguments]; 64 | [APService setAlias:[arguments objectAtIndex:0] 65 | callbackSelector:@selector(tagsWithAliasCallback:tags:alias:) 66 | object:self]; 67 | 68 | } 69 | 70 | -(void)getRegistrationID:(CDVInvokedUrlCommand*)command{ 71 | 72 | NSString* registrationID = [APService registrationID]; 73 | CDVPluginResult *result=[self pluginResultForValue:registrationID]; 74 | if (result) { 75 | [self succeedWithPluginResult:result withCallbackID:command.callbackId]; 76 | } else { 77 | [self failWithCallbackID:command.callbackId]; 78 | } 79 | } 80 | 81 | 82 | -(void)tagsWithAliasCallback:(int)resultCode tags:(NSSet *)tags alias:(NSString *)alias{ 83 | 84 | NSDictionary *dict=[NSDictionary dictionaryWithObjectsAndKeys: 85 | [NSNumber numberWithInt:resultCode],@"resultCode", 86 | tags==nil?[NSNull null]:[tags allObjects],@"tags", 87 | alias==nil?[NSNull null]:alias,@"alias",nil]; 88 | NSMutableDictionary *data = [NSMutableDictionary dictionary]; 89 | [data setObject:[NSNumber numberWithInt:resultCode] forKey:@"resultCode"]; 90 | [data setObject:tags==nil?[NSNull null]:[tags allObjects] forKey:@"tags"]; 91 | [data setObject:alias==nil?[NSNull null]:alias forKey:@"alias"]; 92 | NSError *error; 93 | 94 | NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error]; 95 | NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding]; 96 | 97 | dispatch_async(dispatch_get_main_queue(), ^{ 98 | [self.commandDelegate evalJs:[NSString stringWithFormat:@"cordova.fireDocumentEvent('jpush.setTagsWithAlias',%@)",jsonString]]; 99 | // [self writeJavascript:[NSString stringWithFormat:@"window.plugins.jPushPlugin.pushCallback('%@')",jsonString]]; 100 | }); 101 | 102 | } 103 | 104 | -(void)startLogPageView:(CDVInvokedUrlCommand*)command{ 105 | NSArray *arguments=command.arguments; 106 | if (!arguments||[arguments count]<1) { 107 | NSLog(@"startLogPageView argument error"); 108 | return ; 109 | } 110 | NSString * pageName=[arguments objectAtIndex:0]; 111 | if (pageName) { 112 | [APService startLogPageView:pageName]; 113 | } 114 | } 115 | -(void)stopLogPageView:(CDVInvokedUrlCommand*)command{ 116 | NSArray *arguments=command.arguments; 117 | if (!arguments||[arguments count]<1) { 118 | NSLog(@"stopLogPageView argument error"); 119 | return ; 120 | } 121 | NSString * pageName=[arguments objectAtIndex:0]; 122 | if (pageName) { 123 | [APService stopLogPageView:pageName]; 124 | } 125 | 126 | } 127 | -(void)beginLogPageView:(CDVInvokedUrlCommand*)command{ 128 | NSArray *arguments=command.arguments; 129 | if (!arguments||[arguments count]<2) { 130 | NSLog(@"beginLogPageView argument error"); 131 | return ; 132 | } 133 | NSString * pageName=[arguments objectAtIndex:0]; 134 | int duration=[[arguments objectAtIndex:0]intValue]; 135 | if (pageName) { 136 | [APService beginLogPageView:pageName duration:duration]; 137 | } 138 | 139 | } 140 | -(void)setBadge:(CDVInvokedUrlCommand*)command{ 141 | NSArray *argument=command.arguments; 142 | if ([argument count]<1) { 143 | NSLog(@"setBadge argument error!"); 144 | return; 145 | } 146 | NSNumber *badge=[argument objectAtIndex:0]; 147 | [APService setBadge:[badge intValue]]; 148 | } 149 | -(void)resetBadge:(CDVInvokedUrlCommand*)command{ 150 | [APService resetBadge]; 151 | } 152 | -(void)setDebugModeFromIos:(CDVInvokedUrlCommand*)command{ 153 | 154 | [APService setDebugMode]; 155 | } 156 | -(void)setLogOFF:(CDVInvokedUrlCommand*)command{ 157 | 158 | [APService setLogOFF]; 159 | } 160 | -(void)stopPush:(CDVInvokedUrlCommand*)command{ 161 | 162 | [[UIApplication sharedApplication]unregisterForRemoteNotifications]; 163 | 164 | } 165 | - (void)failWithCallbackID:(NSString *)callbackID { 166 | CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR]; 167 | [self.commandDelegate sendPluginResult:result callbackId:callbackID]; 168 | } 169 | - (void)succeedWithPluginResult:(CDVPluginResult *)result withCallbackID:(NSString *)callbackID { 170 | [self.commandDelegate sendPluginResult:result callbackId:callbackID]; 171 | } 172 | - (CDVPluginResult *)pluginResultForValue:(id)value { 173 | 174 | CDVPluginResult *result; 175 | if ([value isKindOfClass:[NSString class]]) { 176 | result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK 177 | messageAsString:[value stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 178 | } else if ([value isKindOfClass:[NSNumber class]]) { 179 | CFNumberType numberType = CFNumberGetType((CFNumberRef)value); 180 | //note: underlyingly, BOOL values are typedefed as char 181 | if (numberType == kCFNumberIntType || numberType == kCFNumberCharType) { 182 | result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:[value intValue]]; 183 | } else { 184 | result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDouble:[value doubleValue]]; 185 | } 186 | } else if ([value isKindOfClass:[NSArray class]]) { 187 | result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsArray:value]; 188 | } else if ([value isKindOfClass:[NSDictionary class]]) { 189 | result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:value]; 190 | } else if ([value isKindOfClass:[NSNull class]]) { 191 | result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; 192 | } else { 193 | NSLog(@"Cordova callback block returned unrecognized type: %@", NSStringFromClass([value class])); 194 | return nil; 195 | } 196 | return result; 197 | } 198 | 199 | - (void)networkDidReceiveMessage:(NSNotification *)notification { 200 | 201 | NSDictionary *userInfo = [notification userInfo]; 202 | NSLog(@"%@",userInfo); 203 | 204 | NSError *error; 205 | NSData *jsonData = [NSJSONSerialization dataWithJSONObject:userInfo options:0 error:&error]; 206 | NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding]; 207 | 208 | NSLog(@"%@",jsonString); 209 | 210 | dispatch_async(dispatch_get_main_queue(), ^{ 211 | 212 | [self writeJavascript:[NSString stringWithFormat:@"window.plugins.jPushPlugin.receiveMessageIniOSCallback('%@')",jsonString]]; 213 | 214 | }); 215 | 216 | } 217 | 218 | -(void)networkDidReceiveNotification:(NSNotification *)notification{//viper 219 | NSLog(@"%@",notification);//viper 220 | //here add your ode 221 | NSDictionary *object = [notification object]; 222 | NSError *error; 223 | NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object options:0 error:&error]; 224 | NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding]; 225 | dispatch_async(dispatch_get_main_queue(), ^{ 226 | 227 | [self writeJavascript:[NSString stringWithFormat:@"window.plugins.jPushPlugin.receiveNotificationIniOSCallback('%@')",jsonString]]; 228 | 229 | }); 230 | 231 | }//viper 232 | 233 | @end 234 | -------------------------------------------------------------------------------- /src/ios/PushConfig.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | APP_KEY 6 | 7d431e42dfa6a6d693ac2d04 7 | CHANNEL 8 | Subscription 9 | APS_FOR_PRODUCTION 10 | 0 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/ios/lib/APService.h: -------------------------------------------------------------------------------- 1 | // 2 | // APService.h 3 | // APService 4 | // 5 | // Created by JPush on 12-8-15. 6 | // Copyright (c) 2012年 HXHG. All rights reserved. 7 | // Version: 1.8.1 8 | 9 | @class CLRegion; 10 | @class UILocalNotification; 11 | 12 | extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接 13 | extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接 14 | extern NSString *const kJPFNetworkDidRegisterNotification; // 注册成功 15 | extern NSString *const kJPFNetworkDidLoginNotification; // 登录成功 16 | extern NSString *const 17 | kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS) 18 | extern NSString *const kJPFServiceErrorNotification; // 错误提示 19 | 20 | @class CLLocation; 21 | @interface APService : NSObject 22 | 23 | #pragma - mark 基本功能 24 | // 以下四个接口是必须调用的 25 | + (void)setupWithOption:(NSDictionary *)launchingOption; // 初始化 26 | + (void)registerForRemoteNotificationTypes:(NSUInteger)types 27 | categories:(NSSet *)categories; // 注册APNS类型 28 | + (void)registerDeviceToken:(NSData *)deviceToken; // 向服务器上报Device Token 29 | + (void)handleRemoteNotification:(NSDictionary *) 30 | remoteInfo; // 处理收到的APNS消息,向服务器上报收到APNS消息 31 | 32 | // 下面的接口是可选的 33 | // 设置标签和(或)别名(若参数为nil,则忽略;若是空对象,则清空;详情请参考文档:http://docs.jpush.cn/pages/viewpage.action?pageId=3309913) 34 | + (void)setTags:(NSSet *)tags 35 | alias:(NSString *)alias 36 | callbackSelector:(SEL)cbSelector 37 | target:(id)theTarget; 38 | + (void)setTags:(NSSet *)tags 39 | alias:(NSString *)alias 40 | callbackSelector:(SEL)cbSelector 41 | object:(id)theTarget; 42 | + (void)setTags:(NSSet *)tags 43 | callbackSelector:(SEL)cbSelector 44 | object:(id)theTarget; 45 | + (void)setAlias:(NSString *)alias 46 | callbackSelector:(SEL)cbSelector 47 | object:(id)theTarget; 48 | // 用于过滤出正确可用的tags,如果总数量超出最大限制则返回最大数量的靠前的可用tags 49 | + (NSSet *)filterValidTags:(NSSet *)tags; 50 | 51 | #pragma - mark 上报日志 52 | /** 53 | * 记录页面停留时间功能。 54 | * startLogPageView和stopLogPageView为自动计算停留时间 55 | * beginLogPageView为手动自己输入停留时间 56 | * 57 | * @param pageName 页面名称 58 | * @param seconds 页面停留时间 59 | */ 60 | + (void)startLogPageView:(NSString *)pageName; 61 | + (void)stopLogPageView:(NSString *)pageName; 62 | + (void)beginLogPageView:(NSString *)pageName duration:(int)seconds; 63 | 64 | /** 65 | * 开启Crash日志收集, 默认是关闭状态. 66 | */ 67 | + (void)crashLogON; 68 | 69 | /** 70 | * 地理位置设置 71 | * 为了更精确的统计用户地理位置,可以调用此方法传入经纬度信息 72 | * 需要链接 CoreLocation.framework 并且 #import 73 | * @param latitude 纬度. 74 | * @param longitude 经度. 75 | * @param location 直接传递CLLocation *型的地理信息 76 | */ 77 | + (void)setLatitude:(double)latitude longitude:(double)longitude; 78 | + (void)setLocation:(CLLocation *)location; 79 | 80 | #pragma - mark 本地通知 81 | /** 82 | * 本地推送,最多支持64个 83 | * @param fireDate 本地推送触发的时间 84 | * @param alertBody 本地推送需要显示的内容 85 | * @param badge 角标的数字。如果不需要改变角标传-1 86 | * @param alertAction 弹框的按钮显示的内容(IOS 8默认为"打开",其他默认为"启动") 87 | * @param notificationKey 本地推送标示符 88 | * @param userInfo 自定义参数,可以用来标识推送和增加附加信息 89 | * @param soundName 自定义通知声音,设置为nil为默认声音 90 | 91 | * IOS8新参数 92 | * @param region 自定义参数 93 | * @param regionTriggersOnce 自定义参数 94 | * @param category 自定义参数 95 | */ 96 | + (UILocalNotification *)setLocalNotification:(NSDate *)fireDate 97 | alertBody:(NSString *)alertBody 98 | badge:(int)badge 99 | alertAction:(NSString *)alertAction 100 | identifierKey:(NSString *)notificationKey 101 | userInfo:(NSDictionary *)userInfo 102 | soundName:(NSString *)soundName; 103 | 104 | + (UILocalNotification *)setLocalNotification:(NSDate *)fireDate 105 | alertBody:(NSString *)alertBody 106 | badge:(int)badge 107 | alertAction:(NSString *)alertAction 108 | identifierKey:(NSString *)notificationKey 109 | userInfo:(NSDictionary *)userInfo 110 | soundName:(NSString *)soundName 111 | region:(CLRegion *)region 112 | regionTriggersOnce:(BOOL)regionTriggersOnce 113 | category:(NSString *)category 114 | NS_AVAILABLE_IOS(8_0); 115 | 116 | /** 117 | * 本地推送在前台推送。默认App在前台运行时不会进行弹窗,在程序接收通知调用此接口可实现指定的推送弹窗。 118 | * @param notification 本地推送对象 119 | * @param notificationKey 需要前台显示的本地推送通知的标示符 120 | */ 121 | + (void)showLocalNotificationAtFront:(UILocalNotification *)notification 122 | identifierKey:(NSString *)notificationKey; 123 | /** 124 | * 删除本地推送 125 | * @param notificationKey 本地推送标示符 126 | * @param myUILocalNotification 本地推送对象 127 | */ 128 | + (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey; 129 | + (void)deleteLocalNotification:(UILocalNotification *)localNotification; 130 | 131 | /** 132 | * 获取指定通知 133 | * @param notificationKey 本地推送标示符 134 | * @return 本地推送对象数组,[array count]为0时表示没找到 135 | */ 136 | + (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey; 137 | 138 | /** 139 | * 清除所有本地推送对象 140 | */ 141 | + (void)clearAllLocalNotifications; 142 | 143 | #pragma - mark 设置Badge 144 | /** 145 | * set setBadge 146 | * @param value 设置JPush服务器的badge的值 147 | * 本地仍须调用UIApplication:setApplicationIconBadgeNumber函数,来设置脚标 148 | */ 149 | + (BOOL)setBadge:(NSInteger)value; 150 | /** 151 | * set setBadge 152 | * @param value 清除JPush服务器对badge值的设定. 153 | * 本地仍须调用UIApplication:setApplicationIconBadgeNumber函数,来设置脚标 154 | */ 155 | 156 | + (void)resetBadge; 157 | 158 | #pragma - mark 获取用户标示符 159 | /** 160 | * get the UDID 161 | */ 162 | + (NSString *)openUDID DEPRECATED_ATTRIBUTE; // UDID 163 | 164 | /** 165 | * get RegistrationID 166 | */ 167 | + (NSString *)registrationID; 168 | 169 | #pragma - mark 打印日志信息配置 170 | /** 171 | * setDebugMode获取更多的Log信息 172 | * 开发过程中建议开启DebugMode 173 | * 174 | * setLogOFF关闭除了错误信息外的所有Log 175 | * 发布时建议开启LogOFF用于节省性能开销 176 | * 177 | * 默认为不开启DebugLog,只显示基本的信息 178 | */ 179 | + (void)setDebugMode; 180 | + (void)setLogOFF; 181 | @end 182 | -------------------------------------------------------------------------------- /src/ios/lib/libPushSDK.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/donghongfei/jpush-phonegap-plugin/fb5b6712087ab93908ded4c0cbb65d804a19508b/src/ios/lib/libPushSDK.a -------------------------------------------------------------------------------- /www/JPushPlugin.js: -------------------------------------------------------------------------------- 1 | 2 | var JPushPlugin = function(){ 3 | }; 4 | //private plugin function 5 | 6 | JPushPlugin.prototype.isPlatformIOS = function(){ 7 | return device.platform == "iPhone" || device.platform == "iPad" || device.platform == "iPod touch" || device.platform == "iOS" 8 | } 9 | 10 | JPushPlugin.prototype.error_callback = function(msg){ 11 | console.log("Javascript Callback Error: " + msg) 12 | } 13 | 14 | JPushPlugin.prototype.call_native = function(name, args, callback){ 15 | 16 | ret = cordova.exec(callback,this.error_callback,'JPushPlugin',name,args); 17 | return ret; 18 | } 19 | //public plugin function 20 | 21 | JPushPlugin.prototype.startLogPageView = function(pageName){ 22 | if(this.isPlatformIOS()){ 23 | this.call_native( "startLogPageView",[pageName],null); 24 | } 25 | } 26 | 27 | JPushPlugin.prototype.stopLogPageView = function(pageName){ 28 | if(this.isPlatformIOS()){ 29 | this.call_native( "stopLogPageView",[pageName],null); 30 | } 31 | } 32 | 33 | JPushPlugin.prototype.beginLogPageView = function(pageName,duration){ 34 | if(this.isPlatformIOS()){ 35 | this.call_native( "beginLogPageView",[pageName,duration],null); 36 | } 37 | } 38 | 39 | JPushPlugin.prototype.setTagsWithAlias = function(tags,alias){ 40 | try{ 41 | if(tags==null){ 42 | this.setAlias(alias); 43 | return; 44 | } 45 | if(alias==null){ 46 | this.setTags(tags); 47 | return; 48 | } 49 | var arrayTagWithAlias=[tags]; 50 | arrayTagWithAlias.unshift(alias); 51 | this.call_native( "setTagsWithAlias", arrayTagWithAlias,null); 52 | } 53 | catch(exception){ 54 | console.log(exception); 55 | } 56 | 57 | } 58 | JPushPlugin.prototype.setTags = function(tags){ 59 | 60 | try{ 61 | this.call_native("setTags",tags,null); 62 | } 63 | catch(exception){ 64 | console.log(exception); 65 | } 66 | } 67 | 68 | JPushPlugin.prototype.setAlias = function(alias){ 69 | try{ 70 | this.call_native("setAlias",[alias],null); 71 | } 72 | catch(exception){ 73 | console.log(exception); 74 | } 75 | } 76 | JPushPlugin.prototype.getRegistrationID = function(callback){ 77 | 78 | try{ 79 | var data=[]; 80 | this.call_native("getRegistrationID",[data],callback); 81 | } 82 | catch(exception){ 83 | console.log(exception); 84 | } 85 | } 86 | 87 | JPushPlugin.prototype.setBadge = function(value){ 88 | 89 | if(this.isPlatformIOS()){ 90 | try{ 91 | this.call_native("setBadge",[value],null); 92 | } 93 | catch(exception){ 94 | console.log(exception); 95 | } 96 | 97 | } 98 | } 99 | JPushPlugin.prototype.resetBadge = function(){ 100 | 101 | if(this.isPlatformIOS()){ 102 | try{ 103 | var data=[]; 104 | this.call_native("resetBadge",[data],null); 105 | } 106 | catch(exception){ 107 | console.log(exception); 108 | } 109 | } 110 | } 111 | JPushPlugin.prototype.setDebugModeFromIos = function(){ 112 | if(this.isPlatformIOS()){ 113 | var data=[]; 114 | this.call_native("setDebugModeFromIos",[data],null); 115 | } 116 | 117 | } 118 | JPushPlugin.prototype.setLogOFF = function(){ 119 | if(this.isPlatformIOS()){ 120 | var data=[]; 121 | this.call_native("setLogOFF",[data],null); 122 | } 123 | } 124 | JPushPlugin.prototype.receiveMessageIniOSCallback = function(data){ 125 | try{ 126 | console.log("JPushPlugin:receiveMessageIniOSCallback--data:"+data); 127 | var bToObj = JSON.parse(data); 128 | var content = bToObj.content; 129 | console.log(content); 130 | } 131 | catch(exception){ 132 | console.log("JPushPlugin:receiveMessageIniOSCallback"+exception); 133 | } 134 | }; 135 | JPushPlugin.prototype.receiveNotificationIniOSCallback = function(data){ 136 | try{ 137 | console.log("JPushPlugin:receiveNotificationIniOSCallback--data:"+data); 138 | var bToObj = JSON.parse(data); 139 | var content = bToObj.content; 140 | console.log(content); 141 | } 142 | catch(exception){ 143 | console.log("JPushPlugin:receiveNotificationIniOSCallback"+exception); 144 | } 145 | }; 146 | JPushPlugin.prototype.receiveMessageInAndroidCallback = function(data){ 147 | try{ 148 | console.log("JPushPlugin:receiveMessageInAndroidCallback"); 149 | //console.log(data); 150 | //ecvar bToObj=JSON.parse(data); 151 | //var message = bToObj.message; 152 | //var extras = bToObj.extras; 153 | 154 | //console.log(message); 155 | //console.log(extras['cn.jpush.android.MSG_ID']); 156 | //console.log(extras['cn.jpush.android.CONTENT_TYPE']); 157 | //console.log(extras['cn.jpush.android.EXTRA']); 158 | } 159 | catch(exception){ 160 | console.log("JPushPlugin:pushCallback "+exception); 161 | } 162 | } 163 | 164 | // 165 | JPushPlugin.prototype.openNotificationInAndroidCallback = function(data){ 166 | try{ 167 | console.log("JPushPlugin:openNotificationInAndroidCallback"); 168 | console.log(data); 169 | //var bToObj = JSON.parse(data); 170 | //var alert = bToObj.alert; 171 | //var extras = bToObj.extras; 172 | //console.log(alert); 173 | 174 | //console.log(extras['cn.jpush.android.MSG_ID']); 175 | //console.log(extras['app']); 176 | //console.log(extras['cn.jpush.android.NOTIFICATION_CONTENT_TITLE']); 177 | //console.log(extras['cn.jpush.android.EXTRA']); 178 | //console.log(extras['cn.jpush.android.PUSH_ID']); 179 | //console.log(extras['cn.jpush.android.NOTIFICATION_ID']); 180 | //console.log("JPushPlugin:openNotificationCallback is ready"); 181 | } 182 | catch(exception){ 183 | console.log(exception); 184 | } 185 | } 186 | //android single 187 | 188 | JPushPlugin.prototype.setBasicPushNotificationBuilder = function(){ 189 | if(device.platform == "Android") { 190 | data=[] 191 | this.call_native("setBasicPushNotificationBuilder",data,null); 192 | } 193 | } 194 | 195 | JPushPlugin.prototype.setCustomPushNotificationBuilder = function(){ 196 | if(device.platform == "Android") { 197 | data=[]; 198 | this.call_native("setCustomPushNotificationBuilder",data,null); 199 | } 200 | } 201 | 202 | JPushPlugin.prototype.stopPush = function(){ 203 | data=[]; 204 | this.call_native("stopPush",data,null); 205 | } 206 | 207 | JPushPlugin.prototype.resumePush = function(){ 208 | if(device.platform == "Android") { 209 | data=[] 210 | this.call_native("resumePush",data,null); 211 | } 212 | } 213 | JPushPlugin.prototype.setDebugMode = function(mode){ 214 | if(device.platform == "Android") { 215 | this.call_native("setDebugMode",[mode],null); 216 | } 217 | } 218 | //setDebugMode 219 | JPushPlugin.prototype.clearAllNotification = function(){ 220 | if(device.platform == "Android") { 221 | data=[] 222 | this.call_native("clearAllNotification",data,null); 223 | } 224 | } 225 | 226 | JPushPlugin.prototype.setLatestNotificationNum = function(num){ 227 | if(device.platform == "Android") { 228 | this.call_native("setLatestNotificationNum",[num],null); 229 | } 230 | } 231 | 232 | JPushPlugin.prototype.isPushStopped = function(callback){ 233 | if(device.platform == "Android") { 234 | data=[]; 235 | this.call_native("isPushStopped",data,callback) 236 | } 237 | } 238 | 239 | JPushPlugin.prototype.init = function(){ 240 | if(device.platform == "Android") { 241 | data=[]; 242 | this.call_native("init",data,null); 243 | } 244 | } 245 | 246 | JPushPlugin.prototype.setDebugMode = function(mode){ 247 | if(device.platform == "Android") { 248 | this.call_native("setDebugMode",[mode],null); 249 | } 250 | } 251 | JPushPlugin.prototype.addLocalNotification = function(builderId,content,title,notificaitonID,broadcastTime,extras){ 252 | if(device.platform == "Android") { 253 | data=[builderId,content,title,notificaitonID,broadcastTime,extras]; 254 | this.call_native("addLocalNotification",data,null); 255 | } 256 | } 257 | JPushPlugin.prototype.removeLocalNotification = function(notificationID){ 258 | if(device.platform == "Android") { 259 | this.call_native("removeLocalNotification",[notificationID],null); 260 | } 261 | } 262 | JPushPlugin.prototype.clearLocalNotifications = function(){ 263 | if(device.platform == "Android") { 264 | data=[] 265 | this.call_native("clearLocalNotifications",data,null); 266 | } 267 | } 268 | JPushPlugin.prototype.onResume = function(){ 269 | if(device.platform == "Android") { 270 | data=[] 271 | this.call_native("onResume",data,null); 272 | } 273 | } 274 | JPushPlugin.prototype.onPause = function(){ 275 | if(device.platform == "Android") { 276 | data=[] 277 | this.call_native("onPause",data,null); 278 | } 279 | } 280 | 281 | JPushPlugin.prototype.reportNotificationOpened = function(msgID){ 282 | if(device.platform == "Android") { 283 | 284 | this.call_native("reportNotificationOpened",[msgID],null); 285 | } 286 | } 287 | 288 | //iOS single 289 | 290 | 291 | if(!window.plugins){ 292 | window.plugins = {}; 293 | } 294 | 295 | if(!window.plugins.jPushPlugin){ 296 | window.plugins.jPushPlugin = new JPushPlugin(); 297 | } 298 | 299 | module.exports = new JPushPlugin(); 300 | --------------------------------------------------------------------------------