├── .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 |
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 |
--------------------------------------------------------------------------------