From 722ca3dab4aea8873a80e1432f4a4eaf3ab89800 Mon Sep 17 00:00:00 2001 From: Ambrose Chua Date: Fri, 8 Aug 2014 16:38:51 +0800 Subject: [PATCH] Initial Commit --- .classpath | 9 + .project | 33 + .settings/org.eclipse.jdt.core.prefs | 4 + AndroidManifest.xml | 35 + assets/html/Lato400.woff | Bin 0 -> 35852 bytes assets/html/Lato700.woff | Bin 0 -> 37256 bytes assets/html/app.appcache | 10 + assets/html/idangerous.swiper.css | 107 + assets/html/idangerous.swiper.js | 2705 +++++++++++++ assets/html/index.html | 57 + assets/html/iscroll-zoom.js | 2172 +++++++++++ assets/html/iscroll.js | 1988 ++++++++++ assets/html/jquery-2.1.0.min.js | 4 + assets/html/main.js | 123 + assets/html/styles.css | 214 + assets/webviewchromium.pak | Bin 0 -> 604412 bytes bin/AndroidManifest.xml | 35 + bin/R.txt | 154 + .../com/euricainc/ambc/xkcd/BuildConfig.class | Bin 0 -> 355 bytes .../euricainc/ambc/xkcd/MyActivity$1.class | Bin 0 -> 887 bytes .../euricainc/ambc/xkcd/MyActivity$2.class | Bin 0 -> 770 bytes .../com/euricainc/ambc/xkcd/MyActivity.class | Bin 0 -> 1376 bytes .../com/euricainc/ambc/xkcd/R$attr.class | Bin 0 -> 474 bytes .../com/euricainc/ambc/xkcd/R$color.class | Bin 0 -> 577 bytes .../com/euricainc/ambc/xkcd/R$dimen.class | Bin 0 -> 718 bytes .../com/euricainc/ambc/xkcd/R$drawable.class | Bin 0 -> 1023 bytes .../com/euricainc/ambc/xkcd/R$id.class | Bin 0 -> 2125 bytes .../com/euricainc/ambc/xkcd/R$layout.class | Bin 0 -> 873 bytes .../com/euricainc/ambc/xkcd/R$menu.class | Bin 0 -> 417 bytes .../com/euricainc/ambc/xkcd/R$mipmap.class | Bin 0 -> 413 bytes .../com/euricainc/ambc/xkcd/R$raw.class | Bin 0 -> 406 bytes .../com/euricainc/ambc/xkcd/R$string.class | Bin 0 -> 3514 bytes .../com/euricainc/ambc/xkcd/R$style.class | Bin 0 -> 530 bytes bin/classes/com/euricainc/ambc/xkcd/R.class | Bin 0 -> 880 bytes bin/classes/com/mogoweb/chrome/R$attr.class | Bin 0 -> 459 bytes bin/classes/com/mogoweb/chrome/R$color.class | Bin 0 -> 562 bytes bin/classes/com/mogoweb/chrome/R$dimen.class | Bin 0 -> 605 bytes .../com/mogoweb/chrome/R$drawable.class | Bin 0 -> 1008 bytes bin/classes/com/mogoweb/chrome/R$id.class | Bin 0 -> 2079 bytes bin/classes/com/mogoweb/chrome/R$layout.class | Bin 0 -> 830 bytes bin/classes/com/mogoweb/chrome/R$menu.class | Bin 0 -> 402 bytes bin/classes/com/mogoweb/chrome/R$mipmap.class | Bin 0 -> 398 bytes bin/classes/com/mogoweb/chrome/R$raw.class | Bin 0 -> 391 bytes bin/classes/com/mogoweb/chrome/R$string.class | Bin 0 -> 3499 bytes bin/classes/com/mogoweb/chrome/R$style.class | Bin 0 -> 515 bytes bin/classes/com/mogoweb/chrome/R.class | Bin 0 -> 815 bytes ...rt-v4-32de65ead59d932d70aca8e2c6ff760c.jar | Bin 0 -> 151785 bytes ...valib-cf7671f1f0e0a9bc6cda3a8719348f3b.jar | Bin 0 -> 36423 bytes .../java-8a65c8e2c2a5dcdfbdb165a04d31cf27.jar | Bin 0 -> 388178 bytes ...valib-a1421599825e9b5e9eab4496d8b8c77c.jar | Bin 0 -> 4123 bytes bin/jarlist.cache | 3 + bin/res/crunch/drawable-hdpi/ic_launcher.png | Bin 0 -> 1363 bytes bin/res/crunch/drawable-ldpi/ic_launcher.png | Bin 0 -> 562 bytes bin/res/crunch/drawable-mdpi/ic_launcher.png | Bin 0 -> 712 bytes bin/res/crunch/drawable-xhdpi/ic_launcher.png | Bin 0 -> 1519 bytes chromium_webview/.classpath | 9 + chromium_webview/.project | 33 + .../.settings/org.eclipse.jdt.core.prefs | 4 + chromium_webview/AndroidManifest.xml | 17 + chromium_webview/assets/webviewchromium.pak | Bin 0 -> 604412 bytes chromium_webview/bin/AndroidManifest.xml | 17 + chromium_webview/bin/R.txt | 150 + .../display/BrailleDisplayProperties.aidl | 19 + .../braille/display/BrailleInputEvent.aidl | 19 + .../braille/display/IBrailleService.aidl | 43 + .../display/IBrailleServiceCallback.aidl | 30 + .../selfbraille/ISelfBrailleService.aidl | 28 + .../braille/selfbraille/WriteData.aidl | 19 + .../braille/translate/ITranslatorService.aidl | 47 + .../translate/ITranslatorServiceCallback.aidl | 21 + .../content/common/IChildProcessCallback.aidl | 16 + .../content/common/IChildProcessService.aidl | 15 + .../chromium/net/IRemoteAndroidKeyStore.aidl | 33 + .../net/IRemoteAndroidKeyStoreCallbacks.aidl | 23 + chromium_webview/bin/classes/OWNERS | 14 + .../display/BrailleDisplayProperties$1.class | Bin 0 -> 1406 bytes .../display/BrailleDisplayProperties.aidl | 19 + .../display/BrailleDisplayProperties.class | Bin 0 -> 4253 bytes .../braille/display/BrailleInputEvent$1.class | Bin 0 -> 1350 bytes .../braille/display/BrailleInputEvent.aidl | 19 + .../braille/display/BrailleInputEvent.class | Bin 0 -> 5404 bytes .../braille/display/BrailleKeyBinding$1.class | Bin 0 -> 1350 bytes .../braille/display/BrailleKeyBinding.class | Bin 0 -> 2225 bytes .../braille/display/Display$Connection.class | Bin 0 -> 3222 bytes .../display/Display$DisplayHandler.class | Bin 0 -> 4706 bytes ...play$OnConnectionStateChangeListener.class | Bin 0 -> 327 bytes .../Display$OnInputEventListener.class | Bin 0 -> 351 bytes .../display/Display$ServiceCallback.class | Bin 0 -> 1879 bytes .../eyesfree/braille/display/Display.class | Bin 0 -> 7251 bytes .../display/IBrailleService$Stub$Proxy.class | Bin 0 -> 2618 bytes .../display/IBrailleService$Stub.class | Bin 0 -> 2900 bytes .../braille/display/IBrailleService.aidl | 43 + .../braille/display/IBrailleService.class | Bin 0 -> 587 bytes .../IBrailleServiceCallback$Stub$Proxy.class | Bin 0 -> 2710 bytes .../IBrailleServiceCallback$Stub.class | Bin 0 -> 3016 bytes .../display/IBrailleServiceCallback.aidl | 30 + .../display/IBrailleServiceCallback.class | Bin 0 -> 605 bytes .../ISelfBrailleService$Stub$Proxy.class | Bin 0 -> 2213 bytes .../ISelfBrailleService$Stub.class | Bin 0 -> 2656 bytes .../selfbraille/ISelfBrailleService.aidl | 28 + .../selfbraille/ISelfBrailleService.class | Bin 0 -> 513 bytes .../SelfBrailleClient$Connection.class | Bin 0 -> 3107 bytes ...SelfBrailleClient$SelfBrailleHandler.class | Bin 0 -> 2494 bytes .../selfbraille/SelfBrailleClient.class | Bin 0 -> 7574 bytes .../braille/selfbraille/WriteData$1.class | Bin 0 -> 1314 bytes .../braille/selfbraille/WriteData.aidl | 19 + .../braille/selfbraille/WriteData.class | Bin 0 -> 4186 bytes .../braille/translate/BrailleTranslator.class | Bin 0 -> 251 bytes .../ITranslatorService$Stub$Proxy.class | Bin 0 -> 3219 bytes .../translate/ITranslatorService$Stub.class | Bin 0 -> 3301 bytes .../braille/translate/ITranslatorService.aidl | 47 + .../translate/ITranslatorService.class | Bin 0 -> 655 bytes ...TranslatorServiceCallback$Stub$Proxy.class | Bin 0 -> 1604 bytes .../ITranslatorServiceCallback$Stub.class | Bin 0 -> 2022 bytes .../translate/ITranslatorServiceCallback.aidl | 21 + .../ITranslatorServiceCallback.class | Bin 0 -> 400 bytes ...nslatorManager$BrailleTranslatorImpl.class | Bin 0 -> 2012 bytes .../TranslatorManager$Connection.class | Bin 0 -> 3344 bytes .../TranslatorManager$OnInitListener.class | Bin 0 -> 309 bytes .../TranslatorManager$ServiceCallback.class | Bin 0 -> 1440 bytes ...atorManager$TranslatorManagerHandler.class | Bin 0 -> 3124 bytes .../braille/translate/TranslatorManager.class | Bin 0 -> 6500 bytes .../com/mogoweb/chrome/BuildConfig.class | Bin 0 -> 345 bytes .../com/mogoweb/chrome/CookieManager.class | Bin 0 -> 2437 bytes .../com/mogoweb/chrome/DownloadListener.class | Bin 0 -> 237 bytes .../GeolocationPermissions$Callback.class | Bin 0 -> 285 bytes .../chrome/GeolocationPermissions.class | Bin 0 -> 1692 bytes .../com/mogoweb/chrome/HttpAuthHandler.class | Bin 0 -> 721 bytes .../mogoweb/chrome/JavascriptInterface.class | Bin 0 -> 410 bytes .../com/mogoweb/chrome/JsPromptResult.class | Bin 0 -> 829 bytes .../chrome/JsResult$ResultReceiver.class | Bin 0 -> 276 bytes .../classes/com/mogoweb/chrome/JsResult.class | Bin 0 -> 978 bytes .../chrome/MustOverrideException.class | Bin 0 -> 416 bytes .../classes/com/mogoweb/chrome/R$attr.class | Bin 0 -> 519 bytes .../classes/com/mogoweb/chrome/R$color.class | Bin 0 -> 644 bytes .../classes/com/mogoweb/chrome/R$dimen.class | Bin 0 -> 698 bytes .../com/mogoweb/chrome/R$drawable.class | Bin 0 -> 1200 bytes .../bin/classes/com/mogoweb/chrome/R$id.class | Bin 0 -> 2612 bytes .../classes/com/mogoweb/chrome/R$layout.class | Bin 0 -> 978 bytes .../classes/com/mogoweb/chrome/R$menu.class | Bin 0 -> 451 bytes .../classes/com/mogoweb/chrome/R$mipmap.class | Bin 0 -> 447 bytes .../classes/com/mogoweb/chrome/R$raw.class | Bin 0 -> 440 bytes .../classes/com/mogoweb/chrome/R$string.class | Bin 0 -> 4231 bytes .../classes/com/mogoweb/chrome/R$style.class | Bin 0 -> 597 bytes .../bin/classes/com/mogoweb/chrome/R.class | Bin 0 -> 815 bytes .../com/mogoweb/chrome/SslErrorHandler.class | Bin 0 -> 443 bytes .../mogoweb/chrome/WebBackForwardList.class | Bin 0 -> 1119 bytes .../com/mogoweb/chrome/WebChromeClient.class | Bin 0 -> 5408 bytes .../com/mogoweb/chrome/WebHistoryItem.class | Bin 0 -> 1169 bytes .../chrome/WebIconDatabase$IconListener.class | Bin 0 -> 387 bytes .../com/mogoweb/chrome/WebIconDatabase.class | Bin 0 -> 1864 bytes .../chrome/WebSettings$LayoutAlgorithm.class | Bin 0 -> 1366 bytes .../chrome/WebSettings$PluginState.class | Bin 0 -> 1231 bytes .../chrome/WebSettings$RenderPriority.class | Bin 0 -> 1251 bytes .../mogoweb/chrome/WebSettings$TextSize.class | Bin 0 -> 1446 bytes .../chrome/WebSettings$ZoomDensity.class | Bin 0 -> 1329 bytes .../com/mogoweb/chrome/WebSettings.class | Bin 0 -> 11932 bytes .../mogoweb/chrome/WebStorage$Origin.class | Bin 0 -> 1165 bytes .../chrome/WebStorage$QuotaUpdater.class | Bin 0 -> 327 bytes .../com/mogoweb/chrome/WebStorage.class | Bin 0 -> 1926 bytes .../mogoweb/chrome/WebView$FindListener.class | Bin 0 -> 245 bytes .../WebView$FindListenerDistributor.class | Bin 0 -> 1376 bytes .../chrome/WebView$HitTestResult.class | Bin 0 -> 1359 bytes .../chrome/WebView$PrivateAccess.class | Bin 0 -> 5281 bytes .../chrome/WebView$WebViewTransport.class | Bin 0 -> 732 bytes .../classes/com/mogoweb/chrome/WebView.class | Bin 0 -> 24171 bytes .../com/mogoweb/chrome/WebViewClient.class | Bin 0 -> 3955 bytes .../com/mogoweb/chrome/WebViewDatabase.class | Bin 0 -> 1464 bytes .../com/mogoweb/chrome/WebViewFragment.class | Bin 0 -> 1557 bytes .../chrome/impl/ContentSettingsAdapter.class | Bin 0 -> 12523 bytes .../chrome/impl/CookieManagerAdapter.class | Bin 0 -> 2881 bytes .../com/mogoweb/chrome/impl/DebugFlags.class | Bin 0 -> 531 bytes .../impl/DrawGLFunctor$DestroyRunnable.class | Bin 0 -> 2261 bytes .../mogoweb/chrome/impl/DrawGLFunctor.class | Bin 0 -> 5414 bytes .../impl/GeolocationPermissionsAdapter.class | Bin 0 -> 1714 bytes .../impl/JsDialogHelper$CancelListener.class | Bin 0 -> 1410 bytes .../JsDialogHelper$PositiveListener.class | Bin 0 -> 1401 bytes .../mogoweb/chrome/impl/JsDialogHelper.class | Bin 0 -> 6622 bytes ...Api$UnimplementedWebViewApiException.class | Bin 0 -> 554 bytes .../chrome/impl/UnimplementedWebViewApi.class | Bin 0 -> 1701 bytes .../chrome/impl/WebBackForwardListImpl.class | Bin 0 -> 2302 bytes .../chrome/impl/WebHistoryItemImpl.class | Bin 0 -> 1650 bytes .../chrome/impl/WebIconDatabaseAdapter.class | Bin 0 -> 1505 bytes .../chrome/impl/WebStorageAdapter$1$1.class | Bin 0 -> 1019 bytes .../chrome/impl/WebStorageAdapter$1.class | Bin 0 -> 2074 bytes .../chrome/impl/WebStorageAdapter.class | Bin 0 -> 2048 bytes .../chrome/impl/WebViewChromium$1.class | Bin 0 -> 872 bytes .../chrome/impl/WebViewChromium$10.class | Bin 0 -> 675 bytes .../chrome/impl/WebViewChromium$11.class | Bin 0 -> 742 bytes .../chrome/impl/WebViewChromium$12.class | Bin 0 -> 1120 bytes .../chrome/impl/WebViewChromium$13.class | Bin 0 -> 1122 bytes .../chrome/impl/WebViewChromium$14.class | Bin 0 -> 1143 bytes .../chrome/impl/WebViewChromium$15.class | Bin 0 -> 1095 bytes .../chrome/impl/WebViewChromium$16.class | Bin 0 -> 1044 bytes .../chrome/impl/WebViewChromium$17.class | Bin 0 -> 971 bytes .../chrome/impl/WebViewChromium$18.class | Bin 0 -> 679 bytes .../chrome/impl/WebViewChromium$19.class | Bin 0 -> 674 bytes .../chrome/impl/WebViewChromium$2.class | Bin 0 -> 769 bytes .../chrome/impl/WebViewChromium$20.class | Bin 0 -> 1011 bytes .../chrome/impl/WebViewChromium$21.class | Bin 0 -> 674 bytes .../chrome/impl/WebViewChromium$22.class | Bin 0 -> 1014 bytes .../chrome/impl/WebViewChromium$23.class | Bin 0 -> 677 bytes .../chrome/impl/WebViewChromium$24.class | Bin 0 -> 1065 bytes .../chrome/impl/WebViewChromium$25.class | Bin 0 -> 734 bytes .../chrome/impl/WebViewChromium$26.class | Bin 0 -> 1051 bytes .../chrome/impl/WebViewChromium$27.class | Bin 0 -> 1056 bytes .../chrome/impl/WebViewChromium$28.class | Bin 0 -> 677 bytes .../chrome/impl/WebViewChromium$29.class | Bin 0 -> 953 bytes .../chrome/impl/WebViewChromium$3.class | Bin 0 -> 748 bytes .../chrome/impl/WebViewChromium$30.class | Bin 0 -> 684 bytes .../chrome/impl/WebViewChromium$31.class | Bin 0 -> 1089 bytes .../chrome/impl/WebViewChromium$32.class | Bin 0 -> 798 bytes .../chrome/impl/WebViewChromium$33.class | Bin 0 -> 789 bytes .../chrome/impl/WebViewChromium$34.class | Bin 0 -> 929 bytes .../chrome/impl/WebViewChromium$35.class | Bin 0 -> 937 bytes .../chrome/impl/WebViewChromium$36.class | Bin 0 -> 931 bytes .../chrome/impl/WebViewChromium$37.class | Bin 0 -> 947 bytes .../chrome/impl/WebViewChromium$38.class | Bin 0 -> 679 bytes .../chrome/impl/WebViewChromium$39.class | Bin 0 -> 680 bytes .../chrome/impl/WebViewChromium$4.class | Bin 0 -> 746 bytes .../chrome/impl/WebViewChromium$40.class | Bin 0 -> 675 bytes .../chrome/impl/WebViewChromium$41.class | Bin 0 -> 676 bytes .../chrome/impl/WebViewChromium$42.class | Bin 0 -> 1010 bytes .../chrome/impl/WebViewChromium$43.class | Bin 0 -> 740 bytes .../chrome/impl/WebViewChromium$44.class | Bin 0 -> 681 bytes .../chrome/impl/WebViewChromium$45.class | Bin 0 -> 680 bytes .../chrome/impl/WebViewChromium$46.class | Bin 0 -> 687 bytes .../chrome/impl/WebViewChromium$47.class | Bin 0 -> 984 bytes .../chrome/impl/WebViewChromium$48.class | Bin 0 -> 730 bytes .../chrome/impl/WebViewChromium$49.class | Bin 0 -> 789 bytes .../chrome/impl/WebViewChromium$5.class | Bin 0 -> 1026 bytes .../chrome/impl/WebViewChromium$50.class | Bin 0 -> 693 bytes .../chrome/impl/WebViewChromium$51.class | Bin 0 -> 680 bytes .../chrome/impl/WebViewChromium$52.class | Bin 0 -> 796 bytes .../chrome/impl/WebViewChromium$53.class | Bin 0 -> 894 bytes .../chrome/impl/WebViewChromium$54.class | Bin 0 -> 803 bytes .../chrome/impl/WebViewChromium$55.class | Bin 0 -> 765 bytes .../chrome/impl/WebViewChromium$56.class | Bin 0 -> 1008 bytes .../chrome/impl/WebViewChromium$57.class | Bin 0 -> 1009 bytes .../chrome/impl/WebViewChromium$58.class | Bin 0 -> 1030 bytes .../chrome/impl/WebViewChromium$59.class | Bin 0 -> 1023 bytes .../chrome/impl/WebViewChromium$6.class | Bin 0 -> 1024 bytes .../chrome/impl/WebViewChromium$60.class | Bin 0 -> 898 bytes .../chrome/impl/WebViewChromium$61.class | Bin 0 -> 887 bytes .../chrome/impl/WebViewChromium$62.class | Bin 0 -> 1177 bytes .../chrome/impl/WebViewChromium$63.class | Bin 0 -> 735 bytes .../chrome/impl/WebViewChromium$64.class | Bin 0 -> 736 bytes .../chrome/impl/WebViewChromium$65.class | Bin 0 -> 872 bytes .../chrome/impl/WebViewChromium$66.class | Bin 0 -> 749 bytes .../chrome/impl/WebViewChromium$67.class | Bin 0 -> 798 bytes .../chrome/impl/WebViewChromium$68.class | Bin 0 -> 847 bytes .../chrome/impl/WebViewChromium$69.class | Bin 0 -> 1221 bytes .../chrome/impl/WebViewChromium$7.class | Bin 0 -> 965 bytes .../chrome/impl/WebViewChromium$70.class | Bin 0 -> 1169 bytes .../chrome/impl/WebViewChromium$71.class | Bin 0 -> 1167 bytes .../chrome/impl/WebViewChromium$72.class | Bin 0 -> 688 bytes .../chrome/impl/WebViewChromium$73.class | Bin 0 -> 844 bytes .../chrome/impl/WebViewChromium$74.class | Bin 0 -> 848 bytes .../chrome/impl/WebViewChromium$75.class | Bin 0 -> 748 bytes .../chrome/impl/WebViewChromium$76.class | Bin 0 -> 912 bytes .../chrome/impl/WebViewChromium$77.class | Bin 0 -> 843 bytes .../chrome/impl/WebViewChromium$78.class | Bin 0 -> 1129 bytes .../chrome/impl/WebViewChromium$79.class | Bin 0 -> 1131 bytes .../chrome/impl/WebViewChromium$8.class | Bin 0 -> 1027 bytes .../chrome/impl/WebViewChromium$80.class | Bin 0 -> 1134 bytes .../chrome/impl/WebViewChromium$81.class | Bin 0 -> 1142 bytes .../chrome/impl/WebViewChromium$82.class | Bin 0 -> 1190 bytes .../chrome/impl/WebViewChromium$83.class | Bin 0 -> 792 bytes .../chrome/impl/WebViewChromium$84.class | Bin 0 -> 1290 bytes .../chrome/impl/WebViewChromium$85.class | Bin 0 -> 737 bytes .../chrome/impl/WebViewChromium$86.class | Bin 0 -> 1030 bytes .../chrome/impl/WebViewChromium$87.class | Bin 0 -> 1031 bytes .../chrome/impl/WebViewChromium$88.class | Bin 0 -> 1028 bytes .../chrome/impl/WebViewChromium$89.class | Bin 0 -> 1029 bytes .../chrome/impl/WebViewChromium$9.class | Bin 0 -> 1144 bytes .../chrome/impl/WebViewChromium$90.class | Bin 0 -> 1029 bytes .../chrome/impl/WebViewChromium$91.class | Bin 0 -> 681 bytes ...ebViewChromium$InternalAccessAdapter.class | Bin 0 -> 4029 bytes ...ewChromium$WebViewChromiumRunQueue$1.class | Bin 0 -> 916 bytes ...ViewChromium$WebViewChromiumRunQueue.class | Bin 0 -> 1755 bytes .../mogoweb/chrome/impl/WebViewChromium.class | Bin 0 -> 45265 bytes .../WebViewChromiumFactoryProvider$1.class | Bin 0 -> 1016 bytes .../WebViewChromiumFactoryProvider$2.class | Bin 0 -> 1648 bytes .../impl/WebViewChromiumFactoryProvider.class | Bin 0 -> 12479 bytes .../impl/WebViewContentsClientAdapter$1.class | Bin 0 -> 2068 bytes .../WebViewContentsClientAdapter$2$1.class | Bin 0 -> 1080 bytes .../impl/WebViewContentsClientAdapter$2.class | Bin 0 -> 1330 bytes ...ientAdapter$AwHttpAuthHandlerAdapter.class | Bin 0 -> 1235 bytes ...dapter$JsPromptResultReceiverAdapter.class | Bin 0 -> 1970 bytes ...tentsClientAdapter$NullWebViewClient.class | Bin 0 -> 2583 bytes .../impl/WebViewContentsClientAdapter.class | Bin 0 -> 16268 bytes .../chrome/impl/WebViewDatabaseAdapter.class | Bin 0 -> 1356 bytes .../impl/WebViewFactory$Preloader.class | Bin 0 -> 7420 bytes .../mogoweb/chrome/impl/WebViewFactory.class | Bin 0 -> 3055 bytes .../impl/WebViewFactoryProvider$Statics.class | Bin 0 -> 481 bytes .../chrome/impl/WebViewFactoryProvider.class | Bin 0 -> 949 bytes .../impl/WebViewProvider$ScrollDelegate.class | Bin 0 -> 471 bytes .../impl/WebViewProvider$ViewDelegate.class | Bin 0 -> 2205 bytes .../mogoweb/chrome/impl/WebViewProvider.class | Bin 0 -> 4552 bytes .../AndroidProtocolHandler.class | Bin 0 -> 7593 bytes .../AwAutofillManagerDelegate$1.class | Bin 0 -> 1232 bytes .../AwAutofillManagerDelegate.class | Bin 0 -> 3473 bytes .../android_webview/AwBrowserContext.class | Bin 0 -> 2275 bytes .../android_webview/AwBrowserProcess$1.class | Bin 0 -> 1184 bytes .../android_webview/AwBrowserProcess.class | Bin 0 -> 1319 bytes ...iewClient$AwContentVideoViewClient$1.class | Bin 0 -> 1368 bytes ...tViewClient$AwContentVideoViewClient.class | Bin 0 -> 1952 bytes .../android_webview/AwContentViewClient.class | Bin 0 -> 2410 bytes .../android_webview/AwContents$1.class | Bin 0 -> 1525 bytes .../android_webview/AwContents$2.class | Bin 0 -> 980 bytes .../android_webview/AwContents$3$1.class | Bin 0 -> 1163 bytes .../android_webview/AwContents$3.class | Bin 0 -> 1335 bytes .../android_webview/AwContents$4.class | Bin 0 -> 1577 bytes .../android_webview/AwContents$5.class | Bin 0 -> 1128 bytes .../android_webview/AwContents$6.class | Bin 0 -> 921 bytes .../AwContents$AwComponentCallbacks.class | Bin 0 -> 1350 bytes .../AwContents$AwGeolocationCallback$1.class | Bin 0 -> 1842 bytes .../AwContents$AwGeolocationCallback.class | Bin 0 -> 1493 bytes .../AwContents$AwGestureStateListener.class | Bin 0 -> 1988 bytes .../AwContents$AwLayoutChangeListener.class | Bin 0 -> 1714 bytes .../AwContents$AwLayoutSizerDelegate.class | Bin 0 -> 2123 bytes ...ntents$AwScrollOffsetManagerDelegate.class | Bin 0 -> 2403 bytes .../AwContents$DestroyRunnable.class | Bin 0 -> 809 bytes .../AwContents$HitTestData.class | Bin 0 -> 566 bytes ...ents$InterceptNavigationDelegateImpl.class | Bin 0 -> 2023 bytes .../AwContents$InternalAccessDelegate.class | Bin 0 -> 584 bytes .../AwContents$IoThreadClientImpl.class | Bin 0 -> 3367 bytes .../chromium/android_webview/AwContents.class | Bin 0 -> 50023 bytes ...ContentsClient$AwWebContentsObserver.class | Bin 0 -> 2092 bytes .../AwContentsClient$FileChooserParams.class | Bin 0 -> 595 bytes .../android_webview/AwContentsClient.class | Bin 0 -> 6039 bytes .../AwContentsClientBridge$1.class | Bin 0 -> 1225 bytes .../AwContentsClientBridge.class | Bin 0 -> 4347 bytes ...ntsClientCallbackHelper$DownloadInfo.class | Bin 0 -> 942 bytes ...lientCallbackHelper$LoginRequestInfo.class | Bin 0 -> 771 bytes ...ntentsClientCallbackHelper$MyHandler.class | Bin 0 -> 4221 bytes ...ntCallbackHelper$OnReceivedErrorInfo.class | Bin 0 -> 795 bytes .../AwContentsClientCallbackHelper.class | Bin 0 -> 4667 bytes .../AwContentsIoThreadClient.class | Bin 0 -> 848 bytes .../android_webview/AwCookieManager.class | Bin 0 -> 2182 bytes .../android_webview/AwDevToolsServer.class | Bin 0 -> 893 bytes .../android_webview/AwFormDatabase.class | Bin 0 -> 649 bytes .../AwGeolocationPermissions$1.class | Bin 0 -> 1114 bytes .../AwGeolocationPermissions$2.class | Bin 0 -> 1048 bytes .../AwGeolocationPermissions.class | Bin 0 -> 4417 bytes .../android_webview/AwHttpAuthHandler.class | Bin 0 -> 1509 bytes .../AwLayoutSizer$Delegate.class | Bin 0 -> 381 bytes .../android_webview/AwLayoutSizer.class | Bin 0 -> 4505 bytes .../android_webview/AwPdfExporter.class | Bin 0 -> 4715 bytes .../AwPicture$DestroyRunnable.class | Bin 0 -> 770 bytes .../chromium/android_webview/AwPicture.class | Bin 0 -> 2368 bytes .../AwPrintDocumentAdapter$1.class | Bin 0 -> 1752 bytes .../AwPrintDocumentAdapter.class | Bin 0 -> 2512 bytes .../AwQuotaManagerBridge$Origins.class | Bin 0 -> 685 bytes .../AwQuotaManagerBridge.class | Bin 0 -> 4502 bytes .../chromium/android_webview/AwResource.class | Bin 0 -> 4053 bytes .../AwScrollOffsetManager$Delegate.class | Bin 0 -> 474 bytes .../AwScrollOffsetManager.class | Bin 0 -> 8101 bytes .../android_webview/AwSettings$1.class | Bin 0 -> 826 bytes .../android_webview/AwSettings$2.class | Bin 0 -> 822 bytes .../android_webview/AwSettings$3.class | Bin 0 -> 842 bytes .../android_webview/AwSettings$4.class | Bin 0 -> 862 bytes .../android_webview/AwSettings$5.class | Bin 0 -> 1270 bytes .../AwSettings$EventHandler$1.class | Bin 0 -> 1643 bytes .../AwSettings$EventHandler$2.class | Bin 0 -> 1010 bytes .../AwSettings$EventHandler.class | Bin 0 -> 3194 bytes .../AwSettings$LayoutAlgorithm.class | Bin 0 -> 1402 bytes .../AwSettings$LazyDefaultUserAgent.class | Bin 0 -> 663 bytes ...AwSettings$ZoomSupportChangeListener.class | Bin 0 -> 306 bytes .../chromium/android_webview/AwSettings.class | Bin 0 -> 30362 bytes .../AwWebContentsDelegate.class | Bin 0 -> 935 bytes .../AwWebContentsDelegateAdapter$1.class | Bin 0 -> 1661 bytes .../AwWebContentsDelegateAdapter$2.class | Bin 0 -> 1528 bytes .../AwWebContentsDelegateAdapter.class | Bin 0 -> 5753 bytes .../AwZoomControls$ZoomListener.class | Bin 0 -> 1627 bytes .../android_webview/AwZoomControls.class | Bin 0 -> 3360 bytes ...DefaultVideoPosterRequestHandler$1$1.class | Bin 0 -> 1782 bytes .../DefaultVideoPosterRequestHandler$1.class | Bin 0 -> 1671 bytes .../DefaultVideoPosterRequestHandler.class | Bin 0 -> 2973 bytes .../ErrorCodeConversionHelper.class | Bin 0 -> 1757 bytes .../android_webview/HttpAuthDatabase$1.class | Bin 0 -> 912 bytes .../android_webview/HttpAuthDatabase.class | Bin 0 -> 6019 bytes .../InterceptedRequestData.class | Bin 0 -> 1110 bytes .../JavaBrowserViewRendererHelper.class | Bin 0 -> 3052 bytes .../JsPromptResultReceiver.class | Bin 0 -> 219 bytes .../android_webview/JsResultHandler$1.class | Bin 0 -> 1297 bytes .../android_webview/JsResultHandler$2.class | Bin 0 -> 1168 bytes .../android_webview/JsResultHandler.class | Bin 0 -> 1798 bytes .../android_webview/JsResultReceiver.class | Bin 0 -> 183 bytes .../android_webview/OverScrollGlow.class | Bin 0 -> 3773 bytes ...lAccessibilityHelper$HandlerCallback.class | Bin 0 -> 1605 bytes .../ScrollAccessibilityHelper.class | Bin 0 -> 1737 bytes .../chromium/android_webview/SslUtil.class | Bin 0 -> 2269 bytes .../org/chromium/base/AccessedByNative.class | Bin 0 -> 463 bytes .../org/chromium/base/ActivityState.class | Bin 0 -> 332 bytes .../org/chromium/base/ActivityState.template | 14 + .../org/chromium/base/ActivityStatus$1.class | Bin 0 -> 1491 bytes .../chromium/base/ActivityStatus$2$1.class | Bin 0 -> 804 bytes .../org/chromium/base/ActivityStatus$2.class | Bin 0 -> 880 bytes .../base/ActivityStatus$StateListener.class | Bin 0 -> 265 bytes .../org/chromium/base/ActivityStatus.class | Bin 0 -> 4318 bytes .../chromium/base/ApiCompatibilityUtils.class | Bin 0 -> 5248 bytes .../base/BaseChromiumApplication.class | Bin 0 -> 523 bytes .../org/chromium/base/BaseSwitches.class | Bin 0 -> 622 bytes .../classes/org/chromium/base/BuildInfo.class | Bin 0 -> 3560 bytes .../org/chromium/base/CalledByNative.class | Bin 0 -> 460 bytes .../base/CalledByNativeUnchecked.class | Bin 0 -> 478 bytes .../chromium/base/ChromiumApplication.class | Bin 0 -> 511 bytes .../org/chromium/base/CollectionUtil.class | Bin 0 -> 1768 bytes .../base/CommandLine$JavaCommandLine.class | Bin 0 -> 3674 bytes .../base/CommandLine$NativeCommandLine.class | Bin 0 -> 1447 bytes .../org/chromium/base/CommandLine.class | Bin 0 -> 7099 bytes .../org/chromium/base/ContentUriUtils.class | Bin 0 -> 2165 bytes .../ContextTypes$ContextTypesHolder.class | Bin 0 -> 702 bytes .../org/chromium/base/ContextTypes.class | Bin 0 -> 2240 bytes .../org/chromium/base/CpuFeatures.class | Bin 0 -> 611 bytes .../base/ImportantFileWriterAndroid.class | Bin 0 -> 653 bytes .../org/chromium/base/JNINamespace.class | Bin 0 -> 424 bytes .../chromium/base/JavaHandlerThread$1.class | Bin 0 -> 775 bytes .../org/chromium/base/JavaHandlerThread.class | Bin 0 -> 1388 bytes .../base/MemoryPressureLevelList.class | Bin 0 -> 446 bytes .../base/MemoryPressureLevelList.template | 12 + .../base/MemoryPressureListener$1.class | Bin 0 -> 977 bytes .../base/MemoryPressureListener.class | Bin 0 -> 2319 bytes .../base/NativeClassQualifiedName.class | Bin 0 -> 450 bytes .../ObserverList$ObserverListIterator.class | Bin 0 -> 2021 bytes .../ObserverList$RewindableIterator.class | Bin 0 -> 367 bytes .../org/chromium/base/ObserverList.class | Bin 0 -> 3946 bytes .../org/chromium/base/PathService.class | Bin 0 -> 634 bytes .../classes/org/chromium/base/PathUtils.class | Bin 0 -> 2137 bytes .../base/PerfTraceEvent$EventType.class | Bin 0 -> 1491 bytes .../org/chromium/base/PerfTraceEvent.class | Bin 0 -> 6536 bytes .../org/chromium/base/PowerMonitor$1.class | Bin 0 -> 517 bytes .../base/PowerMonitor$LazyHolder.class | Bin 0 -> 678 bytes .../org/chromium/base/PowerMonitor.class | Bin 0 -> 3042 bytes .../chromium/base/PowerStatusReceiver.class | Bin 0 -> 664 bytes .../classes/org/chromium/base/SysUtils.class | Bin 0 -> 3319 bytes .../chromium/base/SystemMessageHandler.class | Bin 0 -> 1364 bytes .../org/chromium/base/ThreadUtils.class | Bin 0 -> 5303 bytes .../org/chromium/base/TraceEvent$1.class | Bin 0 -> 524 bytes .../base/TraceEvent$BasicLooperMonitor.class | Bin 0 -> 1604 bytes .../TraceEvent$IdleTracingLooperMonitor.class | Bin 0 -> 3581 bytes .../base/TraceEvent$LooperMonitorHolder.class | Bin 0 -> 1275 bytes .../org/chromium/base/TraceEvent.class | Bin 0 -> 6276 bytes .../org/chromium/base/WeakContext$1.class | Bin 0 -> 891 bytes .../org/chromium/base/WeakContext.class | Bin 0 -> 1390 bytes .../base/library_loader/LibraryLoader.class | Bin 0 -> 4893 bytes .../LibraryLoaderHelper$1.class | Bin 0 -> 719 bytes .../library_loader/LibraryLoaderHelper.class | Bin 0 -> 6394 bytes .../library_loader/Linker$LibInfo$1.class | Bin 0 -> 1282 bytes .../base/library_loader/Linker$LibInfo.class | Bin 0 -> 2756 bytes .../library_loader/Linker$TestRunner.class | Bin 0 -> 254 bytes .../chromium/base/library_loader/Linker.class | Bin 0 -> 12237 bytes .../base/library_loader/LoaderErrors.class | Bin 0 -> 646 bytes .../base/library_loader/NativeLibraries.class | Bin 0 -> 670 bytes .../library_loader/ProcessInitException.class | Bin 0 -> 746 bytes .../classes/org/chromium/chrome/R$attr.class | Bin 0 -> 649 bytes .../classes/org/chromium/chrome/R$bool.class | Bin 0 -> 460 bytes .../classes/org/chromium/chrome/R$color.class | Bin 0 -> 3258 bytes .../classes/org/chromium/chrome/R$dimen.class | Bin 0 -> 983 bytes .../org/chromium/chrome/R$drawable.class | Bin 0 -> 4205 bytes .../org/chromium/chrome/R$floats.class | Bin 0 -> 531 bytes .../classes/org/chromium/chrome/R$id.class | Bin 0 -> 2611 bytes .../org/chromium/chrome/R$integer.class | Bin 0 -> 855 bytes .../org/chromium/chrome/R$layout.class | Bin 0 -> 1120 bytes .../org/chromium/chrome/R$mipmap.class | Bin 0 -> 567 bytes .../org/chromium/chrome/R$string.class | Bin 0 -> 4390 bytes .../classes/org/chromium/chrome/R$style.class | Bin 0 -> 561 bytes .../bin/classes/org/chromium/chrome/R.class | Bin 0 -> 887 bytes .../chromium/chrome/browser/ResourceId.class | Bin 0 -> 2161 bytes .../browser/sync/ModelTypeSelection.class | Bin 0 -> 824 bytes .../toolbar/ToolbarModelSecurityLevel.class | Bin 0 -> 657 bytes .../InterceptNavigationDelegate.class | Bin 0 -> 367 bytes .../NavigationParams.class | Bin 0 -> 992 bytes .../ColorChooserAndroid$1.class | Bin 0 -> 1382 bytes .../ColorChooserAndroid.class | Bin 0 -> 3163 bytes .../ValidationMessageBubble.class | Bin 0 -> 5983 bytes .../WebContentsDelegateAndroid.class | Bin 0 -> 3361 bytes .../classes/org/chromium/content/R$attr.class | Bin 0 -> 423 bytes .../org/chromium/content/R$dimen.class | Bin 0 -> 391 bytes .../org/chromium/content/R$drawable.class | Bin 0 -> 389 bytes .../classes/org/chromium/content/R$id.class | Bin 0 -> 924 bytes .../org/chromium/content/R$layout.class | Bin 0 -> 530 bytes .../classes/org/chromium/content/R$menu.class | Bin 0 -> 379 bytes .../org/chromium/content/R$string.class | Bin 0 -> 1531 bytes .../org/chromium/content/R$style.class | Bin 0 -> 381 bytes .../bin/classes/org/chromium/content/R.class | Bin 0 -> 693 bytes .../content/app/ChildProcessService$1.class | Bin 0 -> 3846 bytes .../content/app/ChildProcessService$2.class | Bin 0 -> 4365 bytes .../content/app/ChildProcessService.class | Bin 0 -> 7849 bytes .../content/app/ChromiumLinkerParams.class | Bin 0 -> 2272 bytes .../content/app/ContentApplication$1.class | Bin 0 -> 1161 bytes .../content/app/ContentApplication.class | Bin 0 -> 1433 bytes .../chromium/content/app/ContentMain.class | Bin 0 -> 710 bytes .../chromium/content/app/LinkerParams.class | Bin 0 -> 2248 bytes .../app/PrivilegedProcessService.class | Bin 0 -> 375 bytes .../app/PrivilegedProcessService0.class | Bin 0 -> 383 bytes .../app/PrivilegedProcessService1.class | Bin 0 -> 383 bytes .../app/PrivilegedProcessService2.class | Bin 0 -> 383 bytes .../content/app/SandboxedProcessService.class | Bin 0 -> 372 bytes .../app/SandboxedProcessService0.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService1.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService10.class | Bin 0 -> 382 bytes .../app/SandboxedProcessService11.class | Bin 0 -> 382 bytes .../app/SandboxedProcessService12.class | Bin 0 -> 382 bytes .../app/SandboxedProcessService2.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService3.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService4.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService5.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService6.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService7.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService8.class | Bin 0 -> 379 bytes .../app/SandboxedProcessService9.class | Bin 0 -> 379 bytes .../ActivityContentVideoViewClient.class | Bin 0 -> 1622 bytes .../content/browser/BindingManager.class | Bin 0 -> 391 bytes ...ndingManagerImpl$ManagedConnection$1.class | Bin 0 -> 1189 bytes ...ndingManagerImpl$ManagedConnection$2.class | Bin 0 -> 1187 bytes ...BindingManagerImpl$ManagedConnection.class | Bin 0 -> 3584 bytes .../content/browser/BindingManagerImpl.class | Bin 0 -> 5016 bytes .../browser/BrowserStartupController$1.class | Bin 0 -> 899 bytes .../browser/BrowserStartupController$2.class | Bin 0 -> 1317 bytes ...serStartupController$StartupCallback.class | Bin 0 -> 335 bytes .../browser/BrowserStartupController.class | Bin 0 -> 7269 bytes ...ProcessConnection$ConnectionCallback.class | Bin 0 -> 311 bytes ...ChildProcessConnection$DeathCallback.class | Bin 0 -> 308 bytes .../browser/ChildProcessConnection.class | Bin 0 -> 1546 bytes ...onnectionImpl$ChildServiceConnection.class | Bin 0 -> 5993 bytes ...ocessConnectionImpl$ConnectionParams.class | Bin 0 -> 1075 bytes .../browser/ChildProcessConnectionImpl.class | Bin 0 -> 12246 bytes .../browser/ChildProcessLauncher$1.class | Bin 0 -> 906 bytes .../browser/ChildProcessLauncher$2.class | Bin 0 -> 2069 bytes .../browser/ChildProcessLauncher$3.class | Bin 0 -> 1345 bytes ...essLauncher$ChildConnectionAllocator.class | Bin 0 -> 4288 bytes .../browser/ChildProcessLauncher.class | Bin 0 -> 10908 bytes .../content/browser/ContentSettings.class | Bin 0 -> 1682 bytes .../content/browser/ContentVideoView$1.class | Bin 0 -> 719 bytes .../content/browser/ContentVideoView$2.class | Bin 0 -> 961 bytes .../ContentVideoView$ProgressView.class | Bin 0 -> 1379 bytes .../ContentVideoView$VideoSurfaceView.class | Bin 0 -> 1255 bytes .../content/browser/ContentVideoView.class | Bin 0 -> 11823 bytes .../browser/ContentVideoViewClient.class | Bin 0 -> 310 bytes .../ContentVideoViewControls$Delegate.class | Bin 0 -> 390 bytes .../browser/ContentVideoViewControls.class | Bin 0 -> 514 bytes .../browser/ContentVideoViewLegacy$1.class | Bin 0 -> 1957 bytes .../browser/ContentVideoViewLegacy$2.class | Bin 0 -> 1403 bytes .../browser/ContentVideoViewLegacy$3.class | Bin 0 -> 1931 bytes ...ViewLegacy$FullScreenMediaController.class | Bin 0 -> 1513 bytes ...gacy$MediaControlsVisibilityListener.class | Bin 0 -> 358 bytes .../browser/ContentVideoViewLegacy.class | Bin 0 -> 5696 bytes .../content/browser/ContentView.class | Bin 0 -> 12214 bytes .../content/browser/ContentViewClient.class | Bin 0 -> 4216 bytes .../content/browser/ContentViewCore$1.class | Bin 0 -> 1791 bytes .../content/browser/ContentViewCore$10.class | Bin 0 -> 917 bytes .../content/browser/ContentViewCore$11.class | Bin 0 -> 936 bytes .../content/browser/ContentViewCore$12.class | Bin 0 -> 873 bytes .../content/browser/ContentViewCore$13.class | Bin 0 -> 1840 bytes .../content/browser/ContentViewCore$14.class | Bin 0 -> 2231 bytes .../content/browser/ContentViewCore$15.class | Bin 0 -> 4403 bytes .../content/browser/ContentViewCore$16.class | Bin 0 -> 1393 bytes .../content/browser/ContentViewCore$17.class | Bin 0 -> 1155 bytes .../content/browser/ContentViewCore$2.class | Bin 0 -> 3495 bytes .../content/browser/ContentViewCore$3$1.class | Bin 0 -> 1891 bytes .../content/browser/ContentViewCore$3.class | Bin 0 -> 2152 bytes .../content/browser/ContentViewCore$4.class | Bin 0 -> 1266 bytes .../content/browser/ContentViewCore$5.class | Bin 0 -> 1173 bytes .../content/browser/ContentViewCore$6.class | Bin 0 -> 1196 bytes .../content/browser/ContentViewCore$7$1.class | Bin 0 -> 1530 bytes .../content/browser/ContentViewCore$7$2.class | Bin 0 -> 1574 bytes .../content/browser/ContentViewCore$7.class | Bin 0 -> 1682 bytes .../content/browser/ContentViewCore$8.class | Bin 0 -> 1647 bytes .../content/browser/ContentViewCore$9.class | Bin 0 -> 1313 bytes ...ntentViewCore$InternalAccessDelegate.class | Bin 0 -> 754 bytes .../ContentViewCore$JavaScriptCallback.class | Bin 0 -> 318 bytes ...ontentViewCore$SmartClipDataListener.class | Bin 0 -> 326 bytes ...tentViewCore$UMAActionAfterDoubleTap.class | Bin 0 -> 639 bytes .../ContentViewCore$UMASingleTapType.class | Bin 0 -> 583 bytes ...ContentViewCore$ZoomControlsDelegate.class | Bin 0 -> 355 bytes .../content/browser/ContentViewCore.class | Bin 0 -> 70660 bytes .../browser/ContentViewDownloadDelegate.class | Bin 0 -> 371 bytes .../browser/ContentViewGestureHandler$1.class | Bin 0 -> 7646 bytes ...ewGestureHandler$MotionEventDelegate.class | Bin 0 -> 462 bytes ...wGestureHandler$ScaleGestureListener.class | Bin 0 -> 2906 bytes .../browser/ContentViewGestureHandler.class | Bin 0 -> 18334 bytes .../browser/ContentViewRenderView$1.class | Bin 0 -> 735 bytes .../browser/ContentViewRenderView$2.class | Bin 0 -> 2372 bytes .../browser/ContentViewRenderView$3.class | Bin 0 -> 1712 bytes .../browser/ContentViewRenderView$4.class | Bin 0 -> 908 bytes .../ContentViewRenderView$VSyncAdapter.class | Bin 0 -> 3049 bytes .../browser/ContentViewRenderView.class | Bin 0 -> 8475 bytes .../content/browser/ContentViewStatics.class | Bin 0 -> 1165 bytes ...ionAndOrientation$SensorManagerProxy.class | Bin 0 -> 461 bytes ...ndOrientation$SensorManagerProxyImpl.class | Bin 0 -> 1898 bytes .../browser/DeviceMotionAndOrientation.class | Bin 0 -> 10193 bytes .../content/browser/DeviceUtils.class | Bin 0 -> 1498 bytes ...ntroller$DownloadNotificationService.class | Bin 0 -> 395 bytes .../content/browser/DownloadController.class | Bin 0 -> 5118 bytes .../browser/DownloadInfo$Builder.class | Bin 0 -> 5740 bytes .../content/browser/DownloadInfo.class | Bin 0 -> 3330 bytes .../content/browser/FileDescriptorInfo.class | Bin 0 -> 516 bytes .../browser/GenericTouchGesture$1$1.class | Bin 0 -> 1441 bytes .../browser/GenericTouchGesture$1.class | Bin 0 -> 1513 bytes .../browser/GenericTouchGesture$2.class | Bin 0 -> 1052 bytes .../GenericTouchGesture$TouchPointer.class | Bin 0 -> 2430 bytes .../content/browser/GenericTouchGesture.class | Bin 0 -> 6684 bytes .../content/browser/GestureEventType.class | Bin 0 -> 985 bytes .../content/browser/GestureEventType.template | 13 + ...tsLogger$HeapStatsLoggerIntentFilter.class | Bin 0 -> 618 bytes ...pStatsLogger$HeapStatsLoggerReceiver.class | Bin 0 -> 1606 bytes .../content/browser/HeapStatsLogger.class | Bin 0 -> 2671 bytes .../InterstitialPageDelegateAndroid.class | Bin 0 -> 1460 bytes .../content/browser/JavascriptInterface.class | Bin 0 -> 420 bytes .../browser/JellyBeanContentView.class | Bin 0 -> 1460 bytes .../content/browser/LoadUrlParams.class | Bin 0 -> 6510 bytes .../content/browser/LocationProvider$1.class | Bin 0 -> 1096 bytes .../content/browser/LocationProvider$2.class | Bin 0 -> 1038 bytes ...ationProvider$LocationProviderImpl$1.class | Bin 0 -> 1030 bytes ...ocationProvider$LocationProviderImpl.class | Bin 0 -> 6276 bytes .../content/browser/LocationProvider.class | Bin 0 -> 2731 bytes .../browser/LocationProviderAdapter$1.class | Bin 0 -> 1128 bytes .../browser/LocationProviderAdapter$2.class | Bin 0 -> 1059 bytes .../browser/LocationProviderAdapter.class | Bin 0 -> 3276 bytes ...tionProviderFactory$LocationProvider.class | Bin 0 -> 351 bytes ...oviderFactory$LocationProviderImpl$1.class | Bin 0 -> 1079 bytes ...ProviderFactory$LocationProviderImpl.class | Bin 0 -> 5376 bytes .../browser/LocationProviderFactory.class | Bin 0 -> 1531 bytes .../LongPressDetector$LongPressDelegate.class | Bin 0 -> 319 bytes .../LongPressDetector$LongPressHandler.class | Bin 0 -> 1155 bytes .../content/browser/LongPressDetector.class | Bin 0 -> 4497 bytes ...er$MediaDrmCredentialManagerCallback.class | Bin 0 -> 456 bytes .../browser/MediaDrmCredentialManager.class | Bin 0 -> 991 bytes .../MediaResourceGetter$MediaMetadata.class | Bin 0 -> 1350 bytes .../content/browser/MediaResourceGetter.class | Bin 0 -> 4537 bytes .../content/browser/NavigationClient.class | Bin 0 -> 273 bytes .../content/browser/NavigationEntry.class | Bin 0 -> 1463 bytes .../content/browser/NavigationHistory.class | Bin 0 -> 1370 bytes .../org/chromium/content/browser/OWNERS | 10 + .../chromium/content/browser/PageInfo.class | Bin 0 -> 245 bytes .../content/browser/PageTransitionTypes.class | Bin 0 -> 1578 bytes .../browser/PageTransitionTypes.template | 12 + .../content/browser/PepperPluginManager.class | Bin 0 -> 4072 bytes .../content/browser/PopupZoomer$1.class | Bin 0 -> 2616 bytes .../browser/PopupZoomer$OnTapListener.class | Bin 0 -> 334 bytes ...upZoomer$OnVisibilityChangedListener.class | Bin 0 -> 374 bytes .../PopupZoomer$ReverseInterpolator.class | Bin 0 -> 813 bytes .../content/browser/PopupZoomer.class | Bin 0 -> 12537 bytes .../browser/PositionObserver$Listener.class | Bin 0 -> 280 bytes .../content/browser/PositionObserver.class | Bin 0 -> 405 bytes .../content/browser/PowerSaveBlocker.class | Bin 0 -> 779 bytes .../RenderCoordinates$NormalizedPoint.class | Bin 0 -> 1995 bytes .../content/browser/RenderCoordinates.class | Bin 0 -> 5580 bytes .../ResourceExtractor$ExtractTask$1.class | Bin 0 -> 1072 bytes .../ResourceExtractor$ExtractTask.class | Bin 0 -> 8248 bytes .../content/browser/ResourceExtractor.class | Bin 0 -> 4707 bytes ...lectActionModeCallback$ActionHandler.class | Bin 0 -> 506 bytes .../browser/SelectActionModeCallback.class | Bin 0 -> 3747 bytes .../browser/SnapScrollController.class | Bin 0 -> 2984 bytes .../browser/SpeechRecognition$Listener.class | Bin 0 -> 3401 bytes .../content/browser/SpeechRecognition.class | Bin 0 -> 6446 bytes .../browser/SpeechRecognitionError.class | Bin 0 -> 646 bytes .../browser/SpeechRecognitionError.template | 11 + .../browser/TouchEventSynthesizer.class | Bin 0 -> 3294 bytes .../chromium/content/browser/TouchPoint.class | Bin 0 -> 3605 bytes ...llerAndroid$TracingBroadcastReceiver.class | Bin 0 -> 2276 bytes ...ontrollerAndroid$TracingIntentFilter.class | Bin 0 -> 1061 bytes .../browser/TracingControllerAndroid.class | Bin 0 -> 6311 bytes .../browser/TracingIntentHandler.class | Bin 0 -> 716 bytes .../browser/VSyncManager$Listener.class | Bin 0 -> 287 bytes .../browser/VSyncManager$Provider.class | Bin 0 -> 431 bytes .../content/browser/VSyncManager.class | Bin 0 -> 492 bytes .../content/browser/VSyncMonitor$1.class | Bin 0 -> 1298 bytes .../content/browser/VSyncMonitor$2.class | Bin 0 -> 1134 bytes .../content/browser/VSyncMonitor$3.class | Bin 0 -> 1216 bytes .../browser/VSyncMonitor$Listener.class | Bin 0 -> 300 bytes .../content/browser/VSyncMonitor.class | Bin 0 -> 5505 bytes .../browser/VibrationMessageFilter.class | Bin 0 -> 1239 bytes .../content/browser/VibrationProvider.class | Bin 0 -> 1901 bytes .../browser/ViewPositionObserver$1.class | Bin 0 -> 864 bytes .../browser/ViewPositionObserver.class | Bin 0 -> 2771 bytes .../browser/WebContentsObserverAndroid.class | Bin 0 -> 3230 bytes ...sibilityInjector$TextToSpeechWrapper.class | Bin 0 -> 4242 bytes ...ccessibilityInjector$VibratorWrapper.class | Bin 0 -> 1599 bytes .../accessibility/AccessibilityInjector.class | Bin 0 -> 8540 bytes .../BrowserAccessibilityManager.class | Bin 0 -> 17585 bytes ...ccessibilityInjector$CallbackHandler.class | Bin 0 -> 3970 bytes .../JellyBeanAccessibilityInjector.class | Bin 0 -> 4598 bytes ...llyBeanBrowserAccessibilityManager$1.class | Bin 0 -> 1824 bytes ...JellyBeanBrowserAccessibilityManager.class | Bin 0 -> 1421 bytes .../KitKatBrowserAccessibilityManager.class | Bin 0 -> 4014 bytes .../framehost/NavigationControllerImpl.class | Bin 0 -> 2118 bytes .../AdapterInputConnection$ImeState.class | Bin 0 -> 897 bytes .../input/AdapterInputConnection.class | Bin 0 -> 9194 bytes .../browser/input/CursorController.class | Bin 0 -> 544 bytes .../browser/input/DateDialogNormalizer.class | Bin 0 -> 2375 bytes .../input/DateTimeChooserAndroid$1.class | Bin 0 -> 1343 bytes .../input/DateTimeChooserAndroid.class | Bin 0 -> 3690 bytes ...mePickerDialog$OnDateTimeSetListener.class | Bin 0 -> 383 bytes .../browser/input/DateTimePickerDialog.class | Bin 0 -> 5293 bytes .../browser/input/DateTimeSuggestion.class | Bin 0 -> 1252 bytes .../input/DateTimeSuggestionListAdapter.class | Bin 0 -> 2599 bytes .../content/browser/input/HandleView$1.class | Bin 0 -> 1047 bytes .../content/browser/input/HandleView.class | Bin 0 -> 10569 bytes ...dapter$AdapterInputConnectionFactory.class | Bin 0 -> 1094 bytes .../ImeAdapter$DelayedDismissInput.class | Bin 0 -> 957 bytes .../input/ImeAdapter$ImeAdapterDelegate.class | Bin 0 -> 462 bytes .../content/browser/input/ImeAdapter.class | Bin 0 -> 11685 bytes .../input/InputDialogContainer$1.class | Bin 0 -> 2568 bytes .../input/InputDialogContainer$2.class | Bin 0 -> 1072 bytes .../input/InputDialogContainer$3.class | Bin 0 -> 1677 bytes .../input/InputDialogContainer$4.class | Bin 0 -> 1413 bytes .../input/InputDialogContainer$5.class | Bin 0 -> 1505 bytes .../InputDialogContainer$DateListener.class | Bin 0 -> 1113 bytes ...nputDialogContainer$DateTimeListener.class | Bin 0 -> 1456 bytes ...nputDialogContainer$FullTimeListener.class | Bin 0 -> 1160 bytes ...tDialogContainer$InputActionDelegate.class | Bin 0 -> 360 bytes ...tDialogContainer$MonthOrWeekListener.class | Bin 0 -> 1208 bytes .../browser/input/InputDialogContainer.class | Bin 0 -> 11818 bytes .../input/InputMethodManagerWrapper.class | Bin 0 -> 1850 bytes ...rtionHandleController$PastePopupMenu.class | Bin 0 -> 5484 bytes .../input/InsertionHandleController.class | Bin 0 -> 4859 bytes .../content/browser/input/MonthPicker.class | Bin 0 -> 3707 bytes .../browser/input/MonthPickerDialog.class | Bin 0 -> 1576 bytes ...ieldTimePickerDialog$NumberFormatter.class | Bin 0 -> 1005 bytes ...erDialog$OnMultiFieldTimeSetListener.class | Bin 0 -> 354 bytes .../input/MultiFieldTimePickerDialog.class | Bin 0 -> 6470 bytes .../content/browser/input/PopupItemType.class | Bin 0 -> 446 bytes .../browser/input/PopupItemType.template | 11 + .../browser/input/SelectPopupAdapter.class | Bin 0 -> 2284 bytes .../browser/input/SelectPopupDialog$1.class | Bin 0 -> 1438 bytes .../browser/input/SelectPopupDialog$2.class | Bin 0 -> 1230 bytes .../browser/input/SelectPopupDialog$3.class | Bin 0 -> 1908 bytes .../browser/input/SelectPopupDialog$4.class | Bin 0 -> 1210 bytes .../browser/input/SelectPopupDialog$5.class | Bin 0 -> 1128 bytes .../browser/input/SelectPopupDialog.class | Bin 0 -> 6664 bytes .../browser/input/SelectPopupItem.class | Bin 0 -> 672 bytes .../input/SelectionHandleController.class | Bin 0 -> 4525 bytes .../browser/input/TwoFieldDatePicker$1.class | Bin 0 -> 1726 bytes ...ePicker$OnMonthOrWeekChangedListener.class | Bin 0 -> 396 bytes .../browser/input/TwoFieldDatePicker.class | Bin 0 -> 5966 bytes ...dDatePickerDialog$OnValueSetListener.class | Bin 0 -> 329 bytes .../input/TwoFieldDatePickerDialog.class | Bin 0 -> 3514 bytes .../content/browser/input/WeekPicker.class | Bin 0 -> 3809 bytes .../browser/input/WeekPickerDialog.class | Bin 0 -> 1822 bytes .../GestureDetector$GestureHandler.class | Bin 0 -> 2546 bytes .../GestureDetector$OnDoubleTapListener.class | Bin 0 -> 399 bytes .../GestureDetector$OnGestureListener.class | Bin 0 -> 529 bytes ...tureDetector$SimpleOnGestureListener.class | Bin 0 -> 1763 bytes .../browser/third_party/GestureDetector.class | Bin 0 -> 10518 bytes .../browser/webcontents/WebContentsImpl.class | Bin 0 -> 1456 bytes .../content/common/CleanupReference$1.class | Bin 0 -> 1539 bytes .../CleanupReference$LazyHolder$1.class | Bin 0 -> 1923 bytes .../common/CleanupReference$LazyHolder.class | Bin 0 -> 767 bytes .../content/common/CleanupReference.class | Bin 0 -> 3052 bytes .../common/CommandLine$JavaCommandLine.class | Bin 0 -> 3724 bytes .../CommandLine$NativeCommandLine.class | Bin 0 -> 1497 bytes .../chromium/content/common/CommandLine.class | Bin 0 -> 8299 bytes .../content/common/ContentSwitches.class | Bin 0 -> 1734 bytes .../content/common/DeviceTelephonyInfo.class | Bin 0 -> 1129 bytes .../IChildProcessCallback$Stub$Proxy.class | Bin 0 -> 2487 bytes .../common/IChildProcessCallback$Stub.class | Bin 0 -> 2718 bytes .../content/common/IChildProcessCallback.aidl | 16 + .../common/IChildProcessCallback.class | Bin 0 -> 458 bytes .../IChildProcessService$Stub$Proxy.class | Bin 0 -> 2089 bytes .../common/IChildProcessService$Stub.class | Bin 0 -> 2707 bytes .../content/common/IChildProcessService.aidl | 15 + .../content/common/IChildProcessService.class | Bin 0 -> 432 bytes .../common/PerfTraceEvent$EventType.class | Bin 0 -> 1561 bytes .../content/common/PerfTraceEvent.class | Bin 0 -> 6606 bytes .../chromium/content/common/ResultCodes.class | Bin 0 -> 517 bytes .../content/common/ResultCodes.template | 13 + .../content/common/TopControlsState.class | Bin 0 -> 436 bytes .../content/common/TopControlsState.template | 12 + .../content/common/TraceEvent$1.class | Bin 0 -> 554 bytes .../TraceEvent$LooperMonitor$Holder.class | Bin 0 -> 865 bytes .../common/TraceEvent$LooperMonitor.class | Bin 0 -> 4185 bytes .../chromium/content/common/TraceEvent.class | Bin 0 -> 6004 bytes .../classes/org/chromium/content_public/DEPS | 3 + .../browser/GestureStateListener.class | Bin 0 -> 1355 bytes .../browser/NavigationController.class | Bin 0 -> 338 bytes .../content_public/browser/WebContents.class | Bin 0 -> 236 bytes .../media/AndroidImageFormatList.class | Bin 0 -> 485 bytes .../media/AudioManagerAndroid$1.class | Bin 0 -> 1787 bytes .../media/AudioManagerAndroid$2.class | Bin 0 -> 1677 bytes .../media/AudioManagerAndroid$3.class | Bin 0 -> 1249 bytes .../AudioManagerAndroid$AudioDeviceName.class | Bin 0 -> 1066 bytes ...AudioManagerAndroid$SettingsObserver.class | Bin 0 -> 1594 bytes .../chromium/media/AudioManagerAndroid.class | Bin 0 -> 17115 bytes .../AudioRecordInput$AudioRecordThread.class | Bin 0 -> 2433 bytes .../org/chromium/media/AudioRecordInput.class | Bin 0 -> 5086 bytes .../org/chromium/media/ImageFormat.template | 12 + .../media/MediaCodecBridge$CodecInfo.class | Bin 0 -> 1165 bytes .../MediaCodecBridge$DequeueInputResult.class | Bin 0 -> 932 bytes ...MediaCodecBridge$DequeueOutputResult.class | Bin 0 -> 1546 bytes .../org/chromium/media/MediaCodecBridge.class | Bin 0 -> 14916 bytes .../org/chromium/media/MediaDrmBridge$1.class | Bin 0 -> 674 bytes .../org/chromium/media/MediaDrmBridge$2.class | Bin 0 -> 957 bytes .../org/chromium/media/MediaDrmBridge$3.class | Bin 0 -> 1187 bytes .../org/chromium/media/MediaDrmBridge$4.class | Bin 0 -> 834 bytes .../org/chromium/media/MediaDrmBridge$5.class | Bin 0 -> 835 bytes .../org/chromium/media/MediaDrmBridge$6.class | Bin 0 -> 834 bytes .../MediaDrmBridge$MediaDrmListener.class | Bin 0 -> 3583 bytes ...iaDrmBridge$PendingCreateSessionData.class | Bin 0 -> 1497 bytes .../MediaDrmBridge$PostRequestTask.class | Bin 0 -> 3743 bytes .../org/chromium/media/MediaDrmBridge.class | Bin 0 -> 18795 bytes .../MediaPlayerBridge$AllowedOperations.class | Bin 0 -> 981 bytes .../MediaPlayerBridge$LoadDataUriTask.class | Bin 0 -> 3991 bytes .../chromium/media/MediaPlayerBridge.class | Bin 0 -> 10347 bytes .../chromium/media/MediaPlayerListener.class | Bin 0 -> 4805 bytes .../chromium/media/UsbMidiDeviceAndroid.class | Bin 0 -> 3740 bytes .../media/UsbMidiDeviceFactoryAndroid$1.class | Bin 0 -> 1245 bytes .../media/UsbMidiDeviceFactoryAndroid.class | Bin 0 -> 4840 bytes ...eoCapture$BuggyDeviceHack$IdAndSizes.class | Bin 0 -> 819 bytes .../media/VideoCapture$BuggyDeviceHack.class | Bin 0 -> 2106 bytes .../media/VideoCapture$CaptureFormat.class | Bin 0 -> 1116 bytes .../VideoCapture$ChromiumCameraInfo.class | Bin 0 -> 1807 bytes .../org/chromium/media/VideoCapture.class | Bin 0 -> 11913 bytes .../media/WebAudioMediaCodecBridge.class | Bin 0 -> 6075 bytes .../net/AndroidCertVerifyResult.class | Bin 0 -> 1956 bytes .../org/chromium/net/AndroidKeyStore.class | Bin 0 -> 806 bytes .../chromium/net/AndroidNetworkLibrary.class | Bin 0 -> 5838 bytes .../org/chromium/net/AndroidPrivateKey.class | Bin 0 -> 375 bytes .../net/CertVerifyResultAndroid.class | Bin 0 -> 642 bytes .../net/CertVerifyStatusAndroid.class | Bin 0 -> 642 bytes .../chromium/net/CertificateMimeType.class | Bin 0 -> 479 bytes ...oidKeyStore$DefaultAndroidPrivateKey.class | Bin 0 -> 993 bytes .../chromium/net/DefaultAndroidKeyStore.class | Bin 0 -> 6234 bytes .../classes/org/chromium/net/GURLUtils.class | Bin 0 -> 666 bytes .../IRemoteAndroidKeyStore$Stub$Proxy.class | Bin 0 -> 5142 bytes .../net/IRemoteAndroidKeyStore$Stub.class | Bin 0 -> 4192 bytes .../chromium/net/IRemoteAndroidKeyStore.aidl | 33 + .../chromium/net/IRemoteAndroidKeyStore.class | Bin 0 -> 906 bytes ...eAndroidKeyStoreCallbacks$Stub$Proxy.class | Bin 0 -> 1774 bytes ...IRemoteAndroidKeyStoreCallbacks$Stub.class | Bin 0 -> 2007 bytes .../net/IRemoteAndroidKeyStoreCallbacks.aidl | 23 + .../net/IRemoteAndroidKeyStoreCallbacks.class | Bin 0 -> 403 bytes .../classes/org/chromium/net/NetError.class | Bin 0 -> 9284 bytes .../net/NetworkChangeNotifier$1.class | Bin 0 -> 949 bytes ...hangeNotifier$ConnectionTypeObserver.class | Bin 0 -> 304 bytes .../chromium/net/NetworkChangeNotifier.class | Bin 0 -> 6091 bytes ...toDetect$ConnectivityManagerDelegate.class | Bin 0 -> 1462 bytes ...tect$NetworkConnectivityIntentFilter.class | Bin 0 -> 649 bytes ...orkChangeNotifierAutoDetect$Observer.class | Bin 0 -> 306 bytes ...tifierAutoDetect$WifiManagerDelegate.class | Bin 0 -> 1292 bytes .../net/NetworkChangeNotifierAutoDetect.class | Bin 0 -> 4650 bytes .../org/chromium/net/PrivateKeyType.class | Bin 0 -> 435 bytes .../net/ProxyChangeListener$Delegate.class | Bin 0 -> 266 bytes .../net/ProxyChangeListener$ProxyConfig.class | Bin 0 -> 585 bytes .../ProxyChangeListener$ProxyReceiver.class | Bin 0 -> 3286 bytes .../chromium/net/ProxyChangeListener.class | Bin 0 -> 3882 bytes ...moteAndroidKeyStore$RemotePrivateKey.class | Bin 0 -> 893 bytes .../chromium/net/RemoteAndroidKeyStore.class | Bin 0 -> 3473 bytes .../net/X509Util$TrustStorageListener.class | Bin 0 -> 1542 bytes ...til$X509TrustManagerIceCreamSandwich.class | Bin 0 -> 1400 bytes ...9Util$X509TrustManagerImplementation.class | Bin 0 -> 583 bytes .../X509Util$X509TrustManagerJellyBean.class | Bin 0 -> 1431 bytes .../classes/org/chromium/net/X509Util.class | Bin 0 -> 9216 bytes .../classes/org/chromium/ui/Clipboard.class | Bin 0 -> 2283 bytes .../org/chromium/ui/ColorPickerAdvanced.class | Bin 0 -> 5344 bytes .../ui/ColorPickerAdvancedComponent.class | Bin 0 -> 3122 bytes .../org/chromium/ui/ColorPickerDialog$1.class | Bin 0 -> 1086 bytes .../org/chromium/ui/ColorPickerDialog$2.class | Bin 0 -> 1086 bytes .../org/chromium/ui/ColorPickerDialog$3.class | Bin 0 -> 1059 bytes .../org/chromium/ui/ColorPickerDialog$4.class | Bin 0 -> 886 bytes .../org/chromium/ui/ColorPickerDialog.class | Bin 0 -> 4709 bytes .../chromium/ui/ColorPickerMoreButton.class | Bin 0 -> 1534 bytes .../org/chromium/ui/ColorPickerSimple.class | Bin 0 -> 3024 bytes .../org/chromium/ui/ColorSuggestion.class | Bin 0 -> 464 bytes ...apter$OnColorSuggestionClickListener.class | Bin 0 -> 364 bytes .../ui/ColorSuggestionListAdapter.class | Bin 0 -> 5241 bytes .../org/chromium/ui/LocalizationUtils.class | Bin 0 -> 2590 bytes .../chromium/ui/OnColorChangedListener.class | Bin 0 -> 173 bytes .../bin/classes/org/chromium/ui/R$color.class | Bin 0 -> 445 bytes .../bin/classes/org/chromium/ui/R$dimen.class | Bin 0 -> 438 bytes .../classes/org/chromium/ui/R$drawable.class | Bin 0 -> 427 bytes .../bin/classes/org/chromium/ui/R$id.class | Bin 0 -> 707 bytes .../classes/org/chromium/ui/R$layout.class | Bin 0 -> 481 bytes .../classes/org/chromium/ui/R$string.class | Bin 0 -> 960 bytes .../bin/classes/org/chromium/ui/R$style.class | Bin 0 -> 368 bytes .../bin/classes/org/chromium/ui/R.class | Bin 0 -> 602 bytes .../org/chromium/ui/SelectFileDialog.class | Bin 0 -> 7929 bytes .../bin/classes/org/chromium/ui/UiUtils.class | Bin 0 -> 5987 bytes .../classes/org/chromium/ui/ViewAndroid.class | Bin 0 -> 2074 bytes .../org/chromium/ui/ViewAndroidDelegate.class | Bin 0 -> 301 bytes .../ui/WindowAndroid$IntentCallback.class | Bin 0 -> 344 bytes .../org/chromium/ui/WindowAndroid.class | Bin 0 -> 6667 bytes .../chromium/ui/WindowOpenDisposition.class | Bin 0 -> 789 bytes .../ui/autofill/AutofillDividerDrawable.class | Bin 0 -> 1602 bytes .../ui/autofill/AutofillListAdapter.class | Bin 0 -> 4101 bytes .../ui/autofill/AutofillPopup$1.class | Bin 0 -> 1336 bytes .../AutofillPopup$AutofillLogger.class | Bin 0 -> 295 bytes .../AutofillPopup$AutofillPopupDelegate.class | Bin 0 -> 317 bytes .../chromium/ui/autofill/AutofillPopup.class | Bin 0 -> 8672 bytes .../ui/autofill/AutofillSuggestion.class | Bin 0 -> 571 bytes .../ui/base/ActivityWindowAndroid.class | Bin 0 -> 5959 bytes .../org/chromium/ui/base/Clipboard.class | Bin 0 -> 3447 bytes .../chromium/ui/base/LocalizationUtils.class | Bin 0 -> 2768 bytes .../chromium/ui/base/SelectFileDialog.class | Bin 0 -> 8768 bytes .../org/chromium/ui/base/ViewAndroid.class | Bin 0 -> 2125 bytes .../ui/base/ViewAndroidDelegate.class | Bin 0 -> 306 bytes .../base/WindowAndroid$IntentCallback.class | Bin 0 -> 359 bytes .../org/chromium/ui/base/WindowAndroid.class | Bin 0 -> 6049 bytes .../org/chromium/ui/gfx/BitmapHelper.class | Bin 0 -> 2292 bytes .../chromium/ui/gfx/DeviceDisplayInfo$1.class | Bin 0 -> 901 bytes .../chromium/ui/gfx/DeviceDisplayInfo.class | Bin 0 -> 4213 bytes .../ui/gfx/SurfaceTextureListener.class | Bin 0 -> 1436 bytes .../gfx/SurfaceTexturePlatformWrapper.class | Bin 0 -> 2518 bytes .../ui/gl/SurfaceTextureListener.class | Bin 0 -> 1436 bytes .../ui/gl/SurfaceTexturePlatformWrapper.class | Bin 0 -> 2917 bytes chromium_webview/bin/jarlist.cache | 3 + chromium_webview/bin/java.jar | Bin 0 -> 1059228 bytes .../autofill_popup_background_down.9.png | Bin 0 -> 393 bytes .../autofill_popup_background_up.9.png | Bin 0 -> 383 bytes .../bin/res/crunch/drawable-hdpi/bubble.9.png | Bin 0 -> 887 bytes .../crunch/drawable-hdpi/bubble_arrow_up.png | Bin 0 -> 386 bytes .../color_picker_advanced_select_handle.png | Bin 0 -> 1522 bytes .../res/crunch/drawable-hdpi/ic_launcher.png | Bin 0 -> 9193 bytes .../drawable-hdpi/ic_media_video_poster.png | Bin 0 -> 6623 bytes .../ic_menu_search_holo_light.png | Bin 0 -> 1269 bytes .../ic_menu_share_holo_light.png | Bin 0 -> 607 bytes .../drawable-hdpi/ondemand_overlay.9.png | Bin 0 -> 6236 bytes .../drawable-hdpi/pageinfo_warning_major.png | Bin 0 -> 1418 bytes .../drawable-ldpi/ic_media_video_poster.png | Bin 0 -> 3308 bytes .../res/crunch/drawable-mdpi/ic_launcher.png | Bin 0 -> 5057 bytes .../drawable-mdpi/ic_media_video_poster.png | Bin 0 -> 3425 bytes .../autofill_popup_background_down.9.png | Bin 0 -> 559 bytes .../autofill_popup_background_up.9.png | Bin 0 -> 545 bytes .../res/crunch/drawable-xhdpi/bubble.9.png | Bin 0 -> 1149 bytes .../crunch/drawable-xhdpi/bubble_arrow_up.png | Bin 0 -> 458 bytes .../color_picker_advanced_select_handle.png | Bin 0 -> 2090 bytes .../res/crunch/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14068 bytes .../drawable-xhdpi/ic_media_video_poster.png | Bin 0 -> 8958 bytes .../ic_menu_search_holo_light.png | Bin 0 -> 1665 bytes .../ic_menu_share_holo_light.png | Bin 0 -> 869 bytes .../drawable-xhdpi/ondemand_overlay.9.png | Bin 0 -> 7935 bytes .../drawable-xhdpi/pageinfo_warning_major.png | Bin 0 -> 1893 bytes .../autofill_popup_background_down.9.png | Bin 0 -> 321 bytes .../autofill_popup_background_up.9.png | Bin 0 -> 326 bytes .../bin/res/crunch/drawable/bubble.9.png | Bin 0 -> 471 bytes .../res/crunch/drawable/bubble_arrow_up.png | Bin 0 -> 138 bytes .../color_picker_advanced_select_handle.png | Bin 0 -> 910 bytes .../drawable/ic_menu_search_holo_light.png | Bin 0 -> 831 bytes .../drawable/ic_menu_share_holo_light.png | Bin 0 -> 479 bytes .../crunch/drawable/ondemand_overlay.9.png | Bin 0 -> 3843 bytes .../drawable/pageinfo_warning_major.png | Bin 0 -> 938 bytes .../bin/res/crunch/mipmap-hdpi/app_icon.png | Bin 0 -> 3823 bytes .../bin/res/crunch/mipmap-mdpi/app_icon.png | Bin 0 -> 2393 bytes .../bin/res/crunch/mipmap-xhdpi/app_icon.png | Bin 0 -> 5242 bytes .../bin/res/crunch/mipmap-xxhdpi/app_icon.png | Bin 0 -> 8105 bytes .../braille/display/IBrailleService.java | 172 + .../display/IBrailleServiceCallback.java | 166 + .../selfbraille/ISelfBrailleService.java | 131 + .../braille/translate/ITranslatorService.java | 223 ++ .../translate/ITranslatorServiceCallback.java | 87 + .../gen/com/mogoweb/chrome/BuildConfig.java | 6 + .../gen/com/mogoweb/chrome/R.java | 238 ++ .../content/common/IChildProcessCallback.java | 156 + .../content/common/IChildProcessService.java | 113 + .../chromium/net/IRemoteAndroidKeyStore.java | 410 ++ .../net/IRemoteAndroidKeyStoreCallbacks.java | 132 + chromium_webview/libs/android-support-v4.jar | Bin 0 -> 393154 bytes chromium_webview/libs/armeabi-v7a/gdbserver | Bin 0 -> 268812 bytes .../libs/armeabi-v7a/libchromeview.so | Bin 0 -> 34282288 bytes chromium_webview/libs/guava_javalib.jar | Bin 0 -> 99622 bytes chromium_webview/libs/jsr_305_javalib.jar | Bin 0 -> 27210 bytes chromium_webview/proguard-project.txt | 20 + chromium_webview/project.properties | 15 + .../autofill_popup_background_down.9.png | Bin 0 -> 341 bytes .../autofill_popup_background_up.9.png | Bin 0 -> 354 bytes .../res/drawable-hdpi/bubble.9.png | Bin 0 -> 580 bytes .../res/drawable-hdpi/bubble_arrow_up.png | Bin 0 -> 263 bytes .../color_picker_advanced_select_handle.png | Bin 0 -> 1800 bytes .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes .../drawable-hdpi/ic_media_video_poster.png | Bin 0 -> 7060 bytes .../ic_menu_search_holo_light.png | Bin 0 -> 801 bytes .../ic_menu_share_holo_light.png | Bin 0 -> 408 bytes .../res/drawable-hdpi/ondemand_overlay.9.png | Bin 0 -> 4965 bytes .../drawable-hdpi/pageinfo_warning_major.png | Bin 0 -> 1327 bytes .../drawable-ldpi/ic_media_video_poster.png | Bin 0 -> 3523 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes .../drawable-mdpi/ic_media_video_poster.png | Bin 0 -> 3499 bytes .../autofill_popup_background_down.9.png | Bin 0 -> 514 bytes .../autofill_popup_background_up.9.png | Bin 0 -> 501 bytes .../res/drawable-xhdpi/bubble.9.png | Bin 0 -> 742 bytes .../res/drawable-xhdpi/bubble_arrow_up.png | Bin 0 -> 313 bytes .../color_picker_advanced_select_handle.png | Bin 0 -> 2422 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes .../drawable-xhdpi/ic_media_video_poster.png | Bin 0 -> 9589 bytes .../ic_menu_search_holo_light.png | Bin 0 -> 1131 bytes .../ic_menu_share_holo_light.png | Bin 0 -> 597 bytes .../res/drawable-xhdpi/ondemand_overlay.9.png | Bin 0 -> 6331 bytes .../drawable-xhdpi/pageinfo_warning_major.png | Bin 0 -> 1715 bytes .../drawable/autofill_popup_background.xml | 13 + .../autofill_popup_background_down.9.png | Bin 0 -> 289 bytes .../autofill_popup_background_up.9.png | Bin 0 -> 288 bytes chromium_webview/res/drawable/bubble.9.png | Bin 0 -> 262 bytes .../res/drawable/bubble_arrow_up.png | Bin 0 -> 99 bytes .../res/drawable/color_button_background.xml | 36 + .../color_picker_advanced_select_handle.png | Bin 0 -> 1176 bytes .../res/drawable/color_picker_border.xml | 12 + .../drawable/ic_menu_search_holo_light.png | Bin 0 -> 538 bytes .../res/drawable/ic_menu_share_holo_light.png | Bin 0 -> 297 bytes .../res/drawable/ondemand_overlay.9.png | Bin 0 -> 3097 bytes .../res/drawable/pageinfo_warning_major.png | Bin 0 -> 877 bytes .../layout-land/date_time_picker_dialog.xml | 33 + chromium_webview/res/layout/autofill_text.xml | 32 + .../color_picker_advanced_component.xml | 46 + .../layout/color_picker_dialog_content.xml | 51 + .../res/layout/color_picker_dialog_title.xml | 41 + .../res/layout/date_time_picker_dialog.xml | 33 + .../res/layout/date_time_suggestion.xml | 35 + chromium_webview/res/layout/js_prompt.xml | 44 + .../layout/multi_field_time_picker_dialog.xml | 122 + .../res/layout/two_field_date_picker.xml | 48 + .../res/layout/validation_message_bubble.xml | 71 + .../res/menu/select_action_menu.xml | 50 + chromium_webview/res/mipmap-hdpi/app_icon.png | Bin 0 -> 3097 bytes chromium_webview/res/mipmap-mdpi/app_icon.png | Bin 0 -> 1977 bytes .../res/mipmap-xhdpi/app_icon.png | Bin 0 -> 4068 bytes .../res/mipmap-xxhdpi/app_icon.png | Bin 0 -> 6223 bytes chromium_webview/res/raw/blank_html.html | 5 + chromium_webview/res/values-v11/styles.xml | 11 + chromium_webview/res/values-v14/styles.xml | 12 + .../res/values-v17/styles_content.xml | 13 + chromium_webview/res/values-v17/styles_ui.xml | 13 + .../values-zh-rCN/android_content_strings.xml | 38 + .../res/values-zh-rCN/android_ui_strings.xml | 21 + .../res/values-zh-rCN/strings.xml | 34 + .../res/values/android_content_strings.xml | 38 + .../res/values/android_ui_strings.xml | 21 + chromium_webview/res/values/attrs_content.xml | 11 + chromium_webview/res/values/colors_ui.xml | 13 + .../res/values/dimens_content.xml | 11 + chromium_webview/res/values/dimens_ui.xml | 18 + chromium_webview/res/values/strings.xml | 49 + .../res/values/strings_content.xml | 16 + chromium_webview/res/values/strings_ui.xml | 16 + chromium_webview/res/values/styles.xml | 20 + chromium_webview/res/values/values_ui.xml | 11 + chromium_webview/src/OWNERS | 14 + .../display/BrailleDisplayProperties.aidl | 19 + .../display/BrailleDisplayProperties.java | 128 + .../braille/display/BrailleInputEvent.aidl | 19 + .../braille/display/BrailleInputEvent.java | 300 ++ .../braille/display/BrailleKeyBinding.java | 100 + .../eyesfree/braille/display/Display.java | 321 ++ .../braille/display/IBrailleService.aidl | 43 + .../display/IBrailleServiceCallback.aidl | 30 + .../selfbraille/ISelfBrailleService.aidl | 28 + .../selfbraille/SelfBrailleClient.java | 267 ++ .../braille/selfbraille/WriteData.aidl | 19 + .../braille/selfbraille/WriteData.java | 185 + .../braille/translate/BrailleTranslator.java | 35 + .../braille/translate/ITranslatorService.aidl | 47 + .../translate/ITranslatorServiceCallback.aidl | 21 + .../braille/translate/TranslatorManager.java | 278 ++ .../src/com/mogoweb/chrome/CookieManager.java | 222 ++ .../com/mogoweb/chrome/DownloadListener.java | 36 + .../chrome/GeolocationPermissions.java | 147 + .../com/mogoweb/chrome/HttpAuthHandler.java | 75 + .../mogoweb/chrome/JavascriptInterface.java | 36 + .../com/mogoweb/chrome/JsPromptResult.java | 53 + .../src/com/mogoweb/chrome/JsResult.java | 73 + .../mogoweb/chrome/MustOverrideException.java | 25 + .../com/mogoweb/chrome/SslErrorHandler.java | 48 + .../mogoweb/chrome/WebBackForwardList.java | 74 + .../com/mogoweb/chrome/WebChromeClient.java | 359 ++ .../com/mogoweb/chrome/WebHistoryItem.java | 100 + .../com/mogoweb/chrome/WebIconDatabase.java | 126 + .../src/com/mogoweb/chrome/WebSettings.java | 1294 +++++++ .../src/com/mogoweb/chrome/WebStorage.java | 221 ++ .../src/com/mogoweb/chrome/WebView.java | 1866 +++++++++ .../src/com/mogoweb/chrome/WebViewClient.java | 265 ++ .../com/mogoweb/chrome/WebViewDatabase.java | 120 + .../com/mogoweb/chrome/WebViewFragment.java | 100 + .../chrome/impl/ContentSettingsAdapter.java | 521 +++ .../chrome/impl/CookieManagerAdapter.java | 128 + .../com/mogoweb/chrome/impl/DebugFlags.java | 41 + .../mogoweb/chrome/impl/DrawGLFunctor.java | 177 + .../impl/GeolocationPermissionsAdapter.java | 66 + .../mogoweb/chrome/impl/JsDialogHelper.java | 194 + .../chrome/impl/UnimplementedWebViewApi.java | 57 + .../chrome/impl/WebBackForwardListImpl.java | 91 + .../chrome/impl/WebHistoryItemImpl.java | 103 + .../chrome/impl/WebIconDatabaseAdapter.java | 68 + .../chrome/impl/WebStorageAdapter.java | 85 + .../mogoweb/chrome/impl/WebViewChromium.java | 2108 ++++++++++ .../impl/WebViewChromiumFactoryProvider.java | 354 ++ .../impl/WebViewContentsClientAdapter.java | 800 ++++ .../chrome/impl/WebViewDatabaseAdapter.java | 71 + .../mogoweb/chrome/impl/WebViewFactory.java | 205 + .../chrome/impl/WebViewFactoryProvider.java | 118 + .../mogoweb/chrome/impl/WebViewProvider.java | 405 ++ .../AndroidProtocolHandler.java | 221 ++ .../AwAutofillManagerDelegate.java | 92 + .../android_webview/AwBrowserContext.java | 77 + .../android_webview/AwBrowserProcess.java | 57 + .../android_webview/AwContentViewClient.java | 86 + .../chromium/android_webview/AwContents.java | 2071 ++++++++++ .../android_webview/AwContentsClient.java | 245 ++ .../AwContentsClientBridge.java | 117 + .../AwContentsClientCallbackHelper.java | 196 + .../AwContentsIoThreadClient.java | 42 + .../android_webview/AwCookieManager.java | 122 + .../android_webview/AwDevToolsServer.java | 33 + .../android_webview/AwFormDatabase.java | 30 + .../AwGeolocationPermissions.java | 135 + .../android_webview/AwHttpAuthHandler.java | 52 + .../android_webview/AwLayoutSizer.java | 275 ++ .../android_webview/AwPdfExporter.java | 140 + .../chromium/android_webview/AwPicture.java | 94 + .../AwPrintDocumentAdapter.java | 68 + .../android_webview/AwQuotaManagerBridge.java | 163 + .../chromium/android_webview/AwResource.java | 130 + .../AwScrollOffsetManager.java | 431 +++ .../chromium/android_webview/AwSettings.java | 1504 ++++++++ .../AwWebContentsDelegate.java | 41 + .../AwWebContentsDelegateAdapter.java | 189 + .../android_webview/AwZoomControls.java | 103 + .../DefaultVideoPosterRequestHandler.java | 112 + .../ErrorCodeConversionHelper.java | 143 + .../android_webview/HttpAuthDatabase.java | 253 ++ .../InterceptedRequestData.java | 41 + .../JavaBrowserViewRendererHelper.java | 84 + .../JsPromptResultReceiver.java | 17 + .../android_webview/JsResultHandler.java | 46 + .../android_webview/JsResultReceiver.java | 18 + .../android_webview/OverScrollGlow.java | 208 + .../ScrollAccessibilityHelper.java | 79 + .../org/chromium/android_webview/SslUtil.java | 62 + .../org/chromium/base/AccessedByNative.java | 20 + .../src/org/chromium/base/ActivityState.java | 17 + .../org/chromium/base/ActivityState.template | 14 + .../src/org/chromium/base/ActivityStatus.java | 259 ++ .../chromium/base/ApiCompatibilityUtils.java | 241 ++ .../base/BaseChromiumApplication.java | 20 + .../src/org/chromium/base/BaseSwitches.java | 26 + .../src/org/chromium/base/BuildInfo.java | 120 + .../src/org/chromium/base/CalledByNative.java | 23 + .../base/CalledByNativeUnchecked.java | 27 + .../chromium/base/ChromiumApplication.java | 20 + .../src/org/chromium/base/CollectionUtil.java | 39 + .../src/org/chromium/base/CommandLine.java | 378 ++ .../org/chromium/base/ContentUriUtils.java | 74 + .../src/org/chromium/base/ContextTypes.java | 96 + .../src/org/chromium/base/CpuFeatures.java | 40 + .../base/ImportantFileWriterAndroid.java | 29 + .../src/org/chromium/base/JNINamespace.java | 20 + .../org/chromium/base/JavaHandlerThread.java | 39 + .../base/MemoryPressureLevelList.java | 20 + .../base/MemoryPressureLevelList.template | 12 + .../chromium/base/MemoryPressureListener.java | 114 + .../base/NativeClassQualifiedName.java | 25 + .../src/org/chromium/base/ObserverList.java | 207 + .../src/org/chromium/base/PathService.java | 24 + .../src/org/chromium/base/PathUtils.java | 94 + .../src/org/chromium/base/PerfTraceEvent.java | 366 ++ .../src/org/chromium/base/PowerMonitor.java | 92 + .../chromium/base/PowerStatusReceiver.java | 23 + .../src/org/chromium/base/SysUtils.java | 128 + .../chromium/base/SystemMessageHandler.java | 52 + .../src/org/chromium/base/ThreadUtils.java | 208 + .../src/org/chromium/base/TraceEvent.java | 411 ++ .../src/org/chromium/base/WeakContext.java | 47 + .../base/library_loader/LibraryLoader.java | 232 ++ .../library_loader/LibraryLoaderHelper.java | 259 ++ .../chromium/base/library_loader/Linker.java | 1013 +++++ .../base/library_loader/LoaderErrors.java | 16 + .../base/library_loader/NativeLibraries.java | 16 + .../library_loader/ProcessInitException.java | 35 + .../src/org/chromium/chrome/R.java | 397 ++ .../chromium/chrome/browser/ResourceId.java | 54 + .../browser/sync/ModelTypeSelection.java | 36 + .../ui/toolbar/ToolbarModelSecurityLevel.java | 34 + .../InterceptNavigationDelegate.java | 21 + .../NavigationParams.java | 36 + .../ColorChooserAndroid.java | 79 + .../ValidationMessageBubble.java | 162 + .../WebContentsDelegateAndroid.java | 151 + .../src/org/chromium/content/R.java | 107 + .../content/app/ChildProcessService.java | 308 ++ .../content/app/ChromiumLinkerParams.java | 75 + .../content/app/ContentApplication.java | 66 + .../org/chromium/content/app/ContentMain.java | 39 + .../chromium/content/app/LinkerParams.java | 75 + .../content/app/PrivilegedProcessService.java | 13 + .../app/PrivilegedProcessService0.java | 13 + .../app/PrivilegedProcessService1.java | 13 + .../app/PrivilegedProcessService2.java | 13 + .../content/app/SandboxedProcessService.java | 13 + .../content/app/SandboxedProcessService0.java | 13 + .../content/app/SandboxedProcessService1.java | 13 + .../app/SandboxedProcessService10.java | 13 + .../app/SandboxedProcessService11.java | 13 + .../app/SandboxedProcessService12.java | 13 + .../content/app/SandboxedProcessService2.java | 13 + .../content/app/SandboxedProcessService3.java | 13 + .../content/app/SandboxedProcessService4.java | 13 + .../content/app/SandboxedProcessService5.java | 13 + .../content/app/SandboxedProcessService6.java | 13 + .../content/app/SandboxedProcessService7.java | 13 + .../content/app/SandboxedProcessService8.java | 13 + .../content/app/SandboxedProcessService9.java | 13 + .../ActivityContentVideoViewClient.java | 51 + .../content/browser/BindingManager.java | 76 + .../content/browser/BindingManagerImpl.java | 291 ++ .../browser/BrowserStartupController.java | 313 ++ .../browser/ChildProcessConnection.java | 133 + .../browser/ChildProcessConnectionImpl.java | 426 ++ .../content/browser/ChildProcessLauncher.java | 441 +++ .../content/browser/ContentSettings.java | 62 + .../content/browser/ContentVideoView.java | 470 +++ .../browser/ContentVideoViewClient.java | 37 + .../browser/ContentVideoViewControls.java | 66 + .../browser/ContentVideoViewLegacy.java | 302 ++ .../chromium/content/browser/ContentView.java | 563 +++ .../content/browser/ContentViewClient.java | 183 + .../content/browser/ContentViewCore.java | 3429 +++++++++++++++++ .../browser/ContentViewDownloadDelegate.java | 32 + .../browser/ContentViewGestureHandler.java | 993 +++++ .../browser/ContentViewRenderView.java | 331 ++ .../content/browser/ContentViewStatics.java | 61 + .../browser/DeviceMotionAndOrientation.java | 508 +++ .../chromium/content/browser/DeviceUtils.java | 48 + .../content/browser/DownloadController.java | 168 + .../content/browser/DownloadInfo.java | 245 ++ .../content/browser/FileDescriptorInfo.java | 17 + .../content/browser/GenericTouchGesture.java | 294 ++ .../content/browser/GestureEventType.java | 26 + .../content/browser/GestureEventType.template | 13 + .../content/browser/HeapStatsLogger.java | 73 + .../InterstitialPageDelegateAndroid.java | 79 + .../content/browser/JavascriptInterface.java | 21 + .../content/browser/JellyBeanContentView.java | 41 + .../content/browser/LoadUrlParams.java | 323 ++ .../content/browser/LocationProvider.java | 273 ++ .../browser/LocationProviderAdapter.java | 100 + .../browser/LocationProviderFactory.java | 209 + .../content/browser/LongPressDetector.java | 188 + .../browser/MediaDrmCredentialManager.java | 38 + .../content/browser/MediaResourceGetter.java | 138 + .../content/browser/NavigationClient.java | 26 + .../content/browser/NavigationEntry.java | 95 + .../content/browser/NavigationHistory.java | 49 + .../src/org/chromium/content/browser/OWNERS | 10 + .../chromium/content/browser/PageInfo.java | 29 + .../content/browser/PageTransitionTypes.java | 32 + .../browser/PageTransitionTypes.template | 12 + .../content/browser/PepperPluginManager.java | 130 + .../chromium/content/browser/PopupZoomer.java | 555 +++ .../content/browser/PositionObserver.java | 37 + .../content/browser/PowerSaveBlocker.java | 20 + .../content/browser/RenderCoordinates.java | 336 ++ .../content/browser/ResourceExtractor.java | 331 ++ .../browser/SelectActionModeCallback.java | 167 + .../content/browser/SnapScrollController.java | 138 + .../content/browser/SpeechRecognition.java | 296 ++ .../browser/SpeechRecognitionError.java | 38 + .../browser/SpeechRecognitionError.template | 11 + .../browser/TouchEventSynthesizer.java | 116 + .../chromium/content/browser/TouchPoint.java | 155 + .../browser/TracingControllerAndroid.java | 272 ++ .../content/browser/TracingIntentHandler.java | 33 + .../content/browser/VSyncManager.java | 36 + .../content/browser/VSyncMonitor.java | 224 ++ .../browser/VibrationMessageFilter.java | 39 + .../content/browser/VibrationProvider.java | 54 + .../content/browser/ViewPositionObserver.java | 103 + .../browser/WebContentsObserverAndroid.java | 169 + .../accessibility/AccessibilityInjector.java | 466 +++ .../BrowserAccessibilityManager.java | 631 +++ .../JellyBeanAccessibilityInjector.java | 263 ++ .../JellyBeanBrowserAccessibilityManager.java | 52 + .../KitKatBrowserAccessibilityManager.java | 93 + .../framehost/NavigationControllerImpl.java | 91 + .../browser/input/AdapterInputConnection.java | 460 +++ .../browser/input/CursorController.java | 41 + .../browser/input/DateDialogNormalizer.java | 77 + .../browser/input/DateTimeChooserAndroid.java | 94 + .../browser/input/DateTimePickerDialog.java | 160 + .../browser/input/DateTimeSuggestion.java | 59 + .../input/DateTimeSuggestionListAdapter.java | 54 + .../content/browser/input/HandleView.java | 430 +++ .../content/browser/input/ImeAdapter.java | 546 +++ .../browser/input/InputDialogContainer.java | 384 ++ .../input/InputMethodManagerWrapper.java | 64 + .../input/InsertionHandleController.java | 332 ++ .../content/browser/input/MonthPicker.java | 117 + .../browser/input/MonthPickerDialog.java | 38 + .../input/MultiFieldTimePickerDialog.java | 288 ++ .../content/browser/input/PopupItemType.java | 11 + .../browser/input/PopupItemType.template | 11 + .../browser/input/SelectPopupAdapter.java | 82 + .../browser/input/SelectPopupDialog.java | 168 + .../browser/input/SelectPopupItem.java | 27 + .../input/SelectionHandleController.java | 216 ++ .../browser/input/TwoFieldDatePicker.java | 250 ++ .../input/TwoFieldDatePickerDialog.java | 126 + .../content/browser/input/WeekPicker.java | 141 + .../browser/input/WeekPickerDialog.java | 56 + .../browser/third_party/GestureDetector.java | 719 ++++ .../browser/webcontents/WebContentsImpl.java | 51 + .../content/common/CleanupReference.java | 165 + .../chromium/content/common/CommandLine.java | 429 +++ .../content/common/ContentSwitches.java | 80 + .../content/common/DeviceTelephonyInfo.java | 43 + .../content/common/IChildProcessCallback.aidl | 16 + .../content/common/IChildProcessService.aidl | 15 + .../content/common/PerfTraceEvent.java | 366 ++ .../chromium/content/common/ResultCodes.java | 12 + .../content/common/ResultCodes.template | 13 + .../content/common/TopControlsState.java | 17 + .../content/common/TopControlsState.template | 12 + .../chromium/content/common/TraceEvent.java | 403 ++ .../src/org/chromium/content_public/DEPS | 3 + .../browser/GestureStateListener.java | 64 + .../browser/NavigationController.java | 50 + .../content_public/browser/WebContents.java | 15 + .../chromium/media/AudioManagerAndroid.java | 990 +++++ .../org/chromium/media/AudioRecordInput.java | 250 ++ .../src/org/chromium/media/ImageFormat.java | 19 + .../org/chromium/media/ImageFormat.template | 12 + .../org/chromium/media/MediaCodecBridge.java | 563 +++ .../org/chromium/media/MediaDrmBridge.java | 891 +++++ .../org/chromium/media/MediaPlayerBridge.java | 335 ++ .../chromium/media/MediaPlayerListener.java | 167 + .../chromium/media/UsbMidiDeviceAndroid.java | 126 + .../media/UsbMidiDeviceFactoryAndroid.java | 164 + .../src/org/chromium/media/VideoCapture.java | 535 +++ .../media/WebAudioMediaCodecBridge.java | 209 + .../chromium/net/AndroidCertVerifyResult.java | 73 + .../src/org/chromium/net/AndroidKeyStore.java | 145 + .../chromium/net/AndroidNetworkLibrary.java | 241 ++ .../org/chromium/net/AndroidPrivateKey.java | 18 + .../chromium/net/CertVerifyResultAndroid.java | 32 + .../chromium/net/CertVerifyStatusAndroid.java | 32 + .../org/chromium/net/CertificateMimeType.java | 14 + .../chromium/net/DefaultAndroidKeyStore.java | 232 ++ .../src/org/chromium/net/GURLUtils.java | 38 + .../chromium/net/IRemoteAndroidKeyStore.aidl | 33 + .../net/IRemoteAndroidKeyStoreCallbacks.aidl | 23 + .../src/org/chromium/net/NetError.java | 188 + .../chromium/net/NetworkChangeNotifier.java | 219 ++ .../net/NetworkChangeNotifierAutoDetect.java | 240 ++ .../src/org/chromium/net/PrivateKeyType.java | 13 + .../org/chromium/net/ProxyChangeListener.java | 174 + .../chromium/net/RemoteAndroidKeyStore.java | 139 + .../src/org/chromium/net/X509Util.java | 392 ++ .../src/org/chromium/ui/Clipboard.java | 111 + .../org/chromium/ui/ColorPickerAdvanced.java | 250 ++ .../ui/ColorPickerAdvancedComponent.java | 95 + .../org/chromium/ui/ColorPickerDialog.java | 165 + .../chromium/ui/ColorPickerMoreButton.java | 55 + .../org/chromium/ui/ColorPickerSimple.java | 86 + .../src/org/chromium/ui/ColorSuggestion.java | 24 + .../ui/ColorSuggestionListAdapter.java | 142 + .../org/chromium/ui/LocalizationUtils.java | 96 + .../chromium/ui/OnColorChangedListener.java | 18 + chromium_webview/src/org/chromium/ui/R.java | 77 + .../src/org/chromium/ui/SelectFileDialog.java | 248 ++ .../src/org/chromium/ui/UiUtils.java | 182 + .../src/org/chromium/ui/ViewAndroid.java | 87 + .../org/chromium/ui/ViewAndroidDelegate.java | 34 + .../src/org/chromium/ui/WindowAndroid.java | 259 ++ .../chromium/ui/WindowOpenDisposition.java | 22 + .../ui/autofill/AutofillDividerDrawable.java | 54 + .../ui/autofill/AutofillListAdapter.java | 80 + .../chromium/ui/autofill/AutofillPopup.java | 245 ++ .../ui/autofill/AutofillSuggestion.java | 26 + .../ui/base/ActivityWindowAndroid.java | 143 + .../src/org/chromium/ui/base/Clipboard.java | 165 + .../chromium/ui/base/LocalizationUtils.java | 108 + .../chromium/ui/base/SelectFileDialog.java | 268 ++ .../src/org/chromium/ui/base/ViewAndroid.java | 85 + .../chromium/ui/base/ViewAndroidDelegate.java | 34 + .../org/chromium/ui/base/WindowAndroid.java | 271 ++ .../src/org/chromium/ui/gfx/BitmapHelper.java | 78 + .../chromium/ui/gfx/DeviceDisplayInfo.java | 208 + .../ui/gfx/SurfaceTextureListener.java | 40 + .../ui/gfx/SurfaceTexturePlatformWrapper.java | 64 + .../ui/gl/SurfaceTextureListener.java | 40 + .../ui/gl/SurfaceTexturePlatformWrapper.java | 72 + gen/com/euricainc/ambc/xkcd/BuildConfig.java | 6 + gen/com/euricainc/ambc/xkcd/R.java | 248 ++ gen/com/mogoweb/chrome/R.java | 182 + project.properties | 15 + res/drawable-hdpi/ic_launcher.png | Bin 0 -> 3368 bytes res/drawable-ldpi/ic_launcher.png | Bin 0 -> 1434 bytes res/drawable-mdpi/ic_launcher.png | Bin 0 -> 1776 bytes res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 3653 bytes res/layout/main.xml | 14 + res/values-sw600dp/dimens.xml | 8 + res/values-sw720dp-land/dimens.xml | 9 + res/values/dimens.xml | 7 + res/values/strings.xml | 6 + src/com/euricainc/ambc/xkcd/MyActivity.java | 40 + 1394 files changed, 72639 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 AndroidManifest.xml create mode 100644 assets/html/Lato400.woff create mode 100644 assets/html/Lato700.woff create mode 100644 assets/html/app.appcache create mode 100755 assets/html/idangerous.swiper.css create mode 100755 assets/html/idangerous.swiper.js create mode 100644 assets/html/index.html create mode 100644 assets/html/iscroll-zoom.js create mode 100644 assets/html/iscroll.js create mode 100644 assets/html/jquery-2.1.0.min.js create mode 100644 assets/html/main.js create mode 100644 assets/html/styles.css create mode 100755 assets/webviewchromium.pak create mode 100644 bin/AndroidManifest.xml create mode 100644 bin/R.txt create mode 100644 bin/classes/com/euricainc/ambc/xkcd/BuildConfig.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/MyActivity$1.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/MyActivity$2.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/MyActivity.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$attr.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$color.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$dimen.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$drawable.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$id.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$layout.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$menu.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$mipmap.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$raw.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$string.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R$style.class create mode 100644 bin/classes/com/euricainc/ambc/xkcd/R.class create mode 100644 bin/classes/com/mogoweb/chrome/R$attr.class create mode 100644 bin/classes/com/mogoweb/chrome/R$color.class create mode 100644 bin/classes/com/mogoweb/chrome/R$dimen.class create mode 100644 bin/classes/com/mogoweb/chrome/R$drawable.class create mode 100644 bin/classes/com/mogoweb/chrome/R$id.class create mode 100644 bin/classes/com/mogoweb/chrome/R$layout.class create mode 100644 bin/classes/com/mogoweb/chrome/R$menu.class create mode 100644 bin/classes/com/mogoweb/chrome/R$mipmap.class create mode 100644 bin/classes/com/mogoweb/chrome/R$raw.class create mode 100644 bin/classes/com/mogoweb/chrome/R$string.class create mode 100644 bin/classes/com/mogoweb/chrome/R$style.class create mode 100644 bin/classes/com/mogoweb/chrome/R.class create mode 100644 bin/dexedLibs/android-support-v4-32de65ead59d932d70aca8e2c6ff760c.jar create mode 100644 bin/dexedLibs/guava_javalib-cf7671f1f0e0a9bc6cda3a8719348f3b.jar create mode 100644 bin/dexedLibs/java-8a65c8e2c2a5dcdfbdb165a04d31cf27.jar create mode 100644 bin/dexedLibs/jsr_305_javalib-a1421599825e9b5e9eab4496d8b8c77c.jar create mode 100644 bin/jarlist.cache create mode 100644 bin/res/crunch/drawable-hdpi/ic_launcher.png create mode 100644 bin/res/crunch/drawable-ldpi/ic_launcher.png create mode 100644 bin/res/crunch/drawable-mdpi/ic_launcher.png create mode 100644 bin/res/crunch/drawable-xhdpi/ic_launcher.png create mode 100644 chromium_webview/.classpath create mode 100644 chromium_webview/.project create mode 100644 chromium_webview/.settings/org.eclipse.jdt.core.prefs create mode 100755 chromium_webview/AndroidManifest.xml create mode 100755 chromium_webview/assets/webviewchromium.pak create mode 100644 chromium_webview/bin/AndroidManifest.xml create mode 100644 chromium_webview/bin/R.txt create mode 100644 chromium_webview/bin/aidl/com/googlecode/eyesfree/braille/display/BrailleDisplayProperties.aidl create mode 100644 chromium_webview/bin/aidl/com/googlecode/eyesfree/braille/display/BrailleInputEvent.aidl create mode 100644 chromium_webview/bin/aidl/com/googlecode/eyesfree/braille/display/IBrailleService.aidl create mode 100644 chromium_webview/bin/aidl/com/googlecode/eyesfree/braille/display/IBrailleServiceCallback.aidl create mode 100644 chromium_webview/bin/aidl/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.aidl create mode 100644 chromium_webview/bin/aidl/com/googlecode/eyesfree/braille/selfbraille/WriteData.aidl create mode 100644 chromium_webview/bin/aidl/com/googlecode/eyesfree/braille/translate/ITranslatorService.aidl create mode 100644 chromium_webview/bin/aidl/com/googlecode/eyesfree/braille/translate/ITranslatorServiceCallback.aidl create mode 100644 chromium_webview/bin/aidl/org/chromium/content/common/IChildProcessCallback.aidl create mode 100644 chromium_webview/bin/aidl/org/chromium/content/common/IChildProcessService.aidl create mode 100644 chromium_webview/bin/aidl/org/chromium/net/IRemoteAndroidKeyStore.aidl create mode 100644 chromium_webview/bin/aidl/org/chromium/net/IRemoteAndroidKeyStoreCallbacks.aidl create mode 100755 chromium_webview/bin/classes/OWNERS create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/BrailleDisplayProperties$1.class create mode 100755 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/BrailleDisplayProperties.aidl create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/BrailleDisplayProperties.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/BrailleInputEvent$1.class create mode 100755 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/BrailleInputEvent.aidl create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/BrailleInputEvent.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/BrailleKeyBinding$1.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/BrailleKeyBinding.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/Display$Connection.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/Display$DisplayHandler.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/Display$OnConnectionStateChangeListener.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/Display$OnInputEventListener.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/Display$ServiceCallback.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/Display.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/IBrailleService$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/IBrailleService$Stub.class create mode 100755 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/IBrailleService.aidl create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/IBrailleService.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/IBrailleServiceCallback$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/IBrailleServiceCallback$Stub.class create mode 100755 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/IBrailleServiceCallback.aidl create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/display/IBrailleServiceCallback.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService$Stub.class create mode 100755 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.aidl create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient$Connection.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient$SelfBrailleHandler.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/WriteData$1.class create mode 100755 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/WriteData.aidl create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/selfbraille/WriteData.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/BrailleTranslator.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/ITranslatorService$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/ITranslatorService$Stub.class create mode 100755 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/ITranslatorService.aidl create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/ITranslatorService.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/ITranslatorServiceCallback$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/ITranslatorServiceCallback$Stub.class create mode 100755 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/ITranslatorServiceCallback.aidl create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/ITranslatorServiceCallback.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/TranslatorManager$BrailleTranslatorImpl.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/TranslatorManager$Connection.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/TranslatorManager$OnInitListener.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/TranslatorManager$ServiceCallback.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/TranslatorManager$TranslatorManagerHandler.class create mode 100644 chromium_webview/bin/classes/com/googlecode/eyesfree/braille/translate/TranslatorManager.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/BuildConfig.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/CookieManager.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/DownloadListener.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/GeolocationPermissions$Callback.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/GeolocationPermissions.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/HttpAuthHandler.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/JavascriptInterface.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/JsPromptResult.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/JsResult$ResultReceiver.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/JsResult.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/MustOverrideException.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$attr.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$color.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$dimen.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$drawable.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$id.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$layout.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$menu.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$mipmap.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$raw.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$string.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R$style.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/R.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/SslErrorHandler.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebBackForwardList.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebChromeClient.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebHistoryItem.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebIconDatabase$IconListener.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebIconDatabase.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebSettings$LayoutAlgorithm.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebSettings$PluginState.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebSettings$RenderPriority.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebSettings$TextSize.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebSettings$ZoomDensity.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebSettings.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebStorage$Origin.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebStorage$QuotaUpdater.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebStorage.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebView$FindListener.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebView$FindListenerDistributor.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebView$HitTestResult.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebView$PrivateAccess.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebView$WebViewTransport.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebView.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebViewClient.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebViewDatabase.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/WebViewFragment.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/ContentSettingsAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/CookieManagerAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/DebugFlags.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/DrawGLFunctor$DestroyRunnable.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/DrawGLFunctor.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/GeolocationPermissionsAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/JsDialogHelper$CancelListener.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/JsDialogHelper$PositiveListener.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/JsDialogHelper.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/UnimplementedWebViewApi$UnimplementedWebViewApiException.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/UnimplementedWebViewApi.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebBackForwardListImpl.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebHistoryItemImpl.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebIconDatabaseAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebStorageAdapter$1$1.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebStorageAdapter$1.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebStorageAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$1.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$10.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$11.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$12.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$13.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$14.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$15.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$16.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$17.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$18.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$19.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$2.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$20.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$21.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$22.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$23.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$24.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$25.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$26.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$27.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$28.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$29.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$3.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$30.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$31.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$32.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$33.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$34.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$35.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$36.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$37.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$38.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$39.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$4.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$40.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$41.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$42.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$43.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$44.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$45.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$46.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$47.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$48.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$49.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$5.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$50.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$51.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$52.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$53.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$54.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$55.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$56.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$57.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$58.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$59.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$6.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$60.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$61.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$62.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$63.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$64.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$65.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$66.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$67.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$68.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$69.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$7.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$70.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$71.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$72.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$73.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$74.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$75.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$76.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$77.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$78.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$79.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$8.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$80.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$81.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$82.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$83.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$84.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$85.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$86.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$87.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$88.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$89.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$9.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$90.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$91.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$InternalAccessAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$WebViewChromiumRunQueue$1.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium$WebViewChromiumRunQueue.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromium.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromiumFactoryProvider$1.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromiumFactoryProvider$2.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewChromiumFactoryProvider.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewContentsClientAdapter$1.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewContentsClientAdapter$2$1.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewContentsClientAdapter$2.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewContentsClientAdapter$AwHttpAuthHandlerAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewContentsClientAdapter$JsPromptResultReceiverAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewContentsClientAdapter$NullWebViewClient.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewContentsClientAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewDatabaseAdapter.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewFactory$Preloader.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewFactory.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewFactoryProvider$Statics.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewFactoryProvider.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewProvider$ScrollDelegate.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewProvider$ViewDelegate.class create mode 100644 chromium_webview/bin/classes/com/mogoweb/chrome/impl/WebViewProvider.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AndroidProtocolHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwAutofillManagerDelegate$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwAutofillManagerDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwBrowserContext.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwBrowserProcess$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwBrowserProcess.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentViewClient$AwContentVideoViewClient$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentViewClient$AwContentVideoViewClient.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentViewClient.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$3$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$4.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$5.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$6.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$AwComponentCallbacks.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$AwGeolocationCallback$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$AwGeolocationCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$AwGestureStateListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$AwLayoutChangeListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$AwLayoutSizerDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$AwScrollOffsetManagerDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$DestroyRunnable.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$HitTestData.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$InterceptNavigationDelegateImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$InternalAccessDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents$IoThreadClientImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContents.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClient$AwWebContentsObserver.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClient$FileChooserParams.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClient.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClientBridge$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClientBridge.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClientCallbackHelper$DownloadInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClientCallbackHelper$LoginRequestInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClientCallbackHelper$MyHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClientCallbackHelper$OnReceivedErrorInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsClientCallbackHelper.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwContentsIoThreadClient.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwCookieManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwDevToolsServer.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwFormDatabase.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwGeolocationPermissions$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwGeolocationPermissions$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwGeolocationPermissions.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwHttpAuthHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwLayoutSizer$Delegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwLayoutSizer.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwPdfExporter.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwPicture$DestroyRunnable.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwPicture.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwPrintDocumentAdapter$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwPrintDocumentAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwQuotaManagerBridge$Origins.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwQuotaManagerBridge.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwResource.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwScrollOffsetManager$Delegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwScrollOffsetManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$4.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$5.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$EventHandler$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$EventHandler$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$EventHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$LayoutAlgorithm.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$LazyDefaultUserAgent.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings$ZoomSupportChangeListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwSettings.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwWebContentsDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwWebContentsDelegateAdapter$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwWebContentsDelegateAdapter$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwWebContentsDelegateAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwZoomControls$ZoomListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/AwZoomControls.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/DefaultVideoPosterRequestHandler$1$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/DefaultVideoPosterRequestHandler$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/DefaultVideoPosterRequestHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/ErrorCodeConversionHelper.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/HttpAuthDatabase$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/HttpAuthDatabase.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/InterceptedRequestData.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/JavaBrowserViewRendererHelper.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/JsPromptResultReceiver.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/JsResultHandler$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/JsResultHandler$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/JsResultHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/JsResultReceiver.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/OverScrollGlow.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/ScrollAccessibilityHelper$HandlerCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/ScrollAccessibilityHelper.class create mode 100644 chromium_webview/bin/classes/org/chromium/android_webview/SslUtil.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/AccessedByNative.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ActivityState.class create mode 100755 chromium_webview/bin/classes/org/chromium/base/ActivityState.template create mode 100644 chromium_webview/bin/classes/org/chromium/base/ActivityStatus$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ActivityStatus$2$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ActivityStatus$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ActivityStatus$StateListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ActivityStatus.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ApiCompatibilityUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/BaseChromiumApplication.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/BaseSwitches.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/BuildInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/CalledByNative.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/CalledByNativeUnchecked.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ChromiumApplication.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/CollectionUtil.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/CommandLine$JavaCommandLine.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/CommandLine$NativeCommandLine.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/CommandLine.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ContentUriUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ContextTypes$ContextTypesHolder.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ContextTypes.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/CpuFeatures.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ImportantFileWriterAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/JNINamespace.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/JavaHandlerThread$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/JavaHandlerThread.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/MemoryPressureLevelList.class create mode 100755 chromium_webview/bin/classes/org/chromium/base/MemoryPressureLevelList.template create mode 100644 chromium_webview/bin/classes/org/chromium/base/MemoryPressureListener$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/MemoryPressureListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/NativeClassQualifiedName.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ObserverList$ObserverListIterator.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ObserverList$RewindableIterator.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ObserverList.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/PathService.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/PathUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/PerfTraceEvent$EventType.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/PerfTraceEvent.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/PowerMonitor$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/PowerMonitor$LazyHolder.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/PowerMonitor.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/PowerStatusReceiver.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/SysUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/SystemMessageHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/ThreadUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/TraceEvent$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/TraceEvent$BasicLooperMonitor.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/TraceEvent$IdleTracingLooperMonitor.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/TraceEvent$LooperMonitorHolder.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/TraceEvent.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/WeakContext$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/WeakContext.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/LibraryLoader.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/LibraryLoaderHelper$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/LibraryLoaderHelper.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/Linker$LibInfo$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/Linker$LibInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/Linker$TestRunner.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/Linker.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/LoaderErrors.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/NativeLibraries.class create mode 100644 chromium_webview/bin/classes/org/chromium/base/library_loader/ProcessInitException.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$attr.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$bool.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$color.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$dimen.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$drawable.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$floats.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$id.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$integer.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$layout.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$mipmap.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$string.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R$style.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/R.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/browser/ResourceId.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/browser/sync/ModelTypeSelection.class create mode 100644 chromium_webview/bin/classes/org/chromium/chrome/browser/ui/toolbar/ToolbarModelSecurityLevel.class create mode 100644 chromium_webview/bin/classes/org/chromium/components/navigation_interception/InterceptNavigationDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/components/navigation_interception/NavigationParams.class create mode 100644 chromium_webview/bin/classes/org/chromium/components/web_contents_delegate_android/ColorChooserAndroid$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/components/web_contents_delegate_android/ColorChooserAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/components/web_contents_delegate_android/ValidationMessageBubble.class create mode 100644 chromium_webview/bin/classes/org/chromium/components/web_contents_delegate_android/WebContentsDelegateAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R$attr.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R$dimen.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R$drawable.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R$id.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R$layout.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R$menu.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R$string.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R$style.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/R.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/ChildProcessService$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/ChildProcessService$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/ChildProcessService.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/ChromiumLinkerParams.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/ContentApplication$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/ContentApplication.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/ContentMain.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/LinkerParams.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/PrivilegedProcessService.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/PrivilegedProcessService0.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/PrivilegedProcessService1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/PrivilegedProcessService2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService0.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService10.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService11.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService12.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService3.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService4.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService5.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService6.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService7.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService8.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/app/SandboxedProcessService9.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ActivityContentVideoViewClient.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BindingManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BindingManagerImpl$ManagedConnection$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BindingManagerImpl$ManagedConnection$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BindingManagerImpl$ManagedConnection.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BindingManagerImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BrowserStartupController$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BrowserStartupController$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BrowserStartupController$StartupCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/BrowserStartupController.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessConnection$ConnectionCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessConnection$DeathCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessConnection.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessConnectionImpl$ChildServiceConnection.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessConnectionImpl$ConnectionParams.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessConnectionImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessLauncher$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessLauncher$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessLauncher$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessLauncher$ChildConnectionAllocator.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ChildProcessLauncher.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentSettings.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoView$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoView$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoView$ProgressView.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoView$VideoSurfaceView.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoView.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewClient.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewControls$Delegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewControls.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewLegacy$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewLegacy$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewLegacy$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewLegacy$FullScreenMediaController.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewLegacy$MediaControlsVisibilityListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentVideoViewLegacy.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentView.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewClient.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$10.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$11.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$12.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$13.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$14.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$15.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$16.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$17.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$3$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$4.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$5.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$6.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$7$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$7$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$7.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$8.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$9.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$InternalAccessDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$JavaScriptCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$SmartClipDataListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$UMAActionAfterDoubleTap.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$UMASingleTapType.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore$ZoomControlsDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewCore.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewDownloadDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewGestureHandler$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewGestureHandler$MotionEventDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewGestureHandler$ScaleGestureListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewGestureHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewRenderView$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewRenderView$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewRenderView$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewRenderView$4.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewRenderView$VSyncAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewRenderView.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ContentViewStatics.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/DeviceMotionAndOrientation$SensorManagerProxy.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/DeviceMotionAndOrientation$SensorManagerProxyImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/DeviceMotionAndOrientation.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/DeviceUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/DownloadController$DownloadNotificationService.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/DownloadController.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/DownloadInfo$Builder.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/DownloadInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/FileDescriptorInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/GenericTouchGesture$1$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/GenericTouchGesture$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/GenericTouchGesture$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/GenericTouchGesture$TouchPointer.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/GenericTouchGesture.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/GestureEventType.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/browser/GestureEventType.template create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/HeapStatsLogger$HeapStatsLoggerIntentFilter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/HeapStatsLogger$HeapStatsLoggerReceiver.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/HeapStatsLogger.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/InterstitialPageDelegateAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/JavascriptInterface.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/JellyBeanContentView.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LoadUrlParams.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProvider$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProvider$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProvider$LocationProviderImpl$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProvider$LocationProviderImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProvider.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProviderAdapter$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProviderAdapter$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProviderAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProviderFactory$LocationProvider.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProviderFactory$LocationProviderImpl$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProviderFactory$LocationProviderImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LocationProviderFactory.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LongPressDetector$LongPressDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LongPressDetector$LongPressHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/LongPressDetector.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/MediaDrmCredentialManager$MediaDrmCredentialManagerCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/MediaDrmCredentialManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/MediaResourceGetter$MediaMetadata.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/MediaResourceGetter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/NavigationClient.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/NavigationEntry.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/NavigationHistory.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/browser/OWNERS create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PageInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PageTransitionTypes.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/browser/PageTransitionTypes.template create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PepperPluginManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PopupZoomer$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PopupZoomer$OnTapListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PopupZoomer$OnVisibilityChangedListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PopupZoomer$ReverseInterpolator.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PopupZoomer.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PositionObserver$Listener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PositionObserver.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/PowerSaveBlocker.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/RenderCoordinates$NormalizedPoint.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/RenderCoordinates.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ResourceExtractor$ExtractTask$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ResourceExtractor$ExtractTask.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ResourceExtractor.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/SelectActionModeCallback$ActionHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/SelectActionModeCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/SnapScrollController.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/SpeechRecognition$Listener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/SpeechRecognition.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/SpeechRecognitionError.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/browser/SpeechRecognitionError.template create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/TouchEventSynthesizer.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/TouchPoint.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/TracingControllerAndroid$TracingBroadcastReceiver.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/TracingControllerAndroid$TracingIntentFilter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/TracingControllerAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/TracingIntentHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VSyncManager$Listener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VSyncManager$Provider.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VSyncManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VSyncMonitor$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VSyncMonitor$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VSyncMonitor$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VSyncMonitor$Listener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VSyncMonitor.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VibrationMessageFilter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/VibrationProvider.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ViewPositionObserver$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/ViewPositionObserver.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/WebContentsObserverAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/AccessibilityInjector$TextToSpeechWrapper.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/AccessibilityInjector$VibratorWrapper.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/AccessibilityInjector.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/JellyBeanAccessibilityInjector$CallbackHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/JellyBeanAccessibilityInjector.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/JellyBeanBrowserAccessibilityManager$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/JellyBeanBrowserAccessibilityManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/accessibility/KitKatBrowserAccessibilityManager.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/framehost/NavigationControllerImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/AdapterInputConnection$ImeState.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/AdapterInputConnection.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/CursorController.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/DateDialogNormalizer.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/DateTimeChooserAndroid$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/DateTimeChooserAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/DateTimePickerDialog$OnDateTimeSetListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/DateTimePickerDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/DateTimeSuggestion.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/DateTimeSuggestionListAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/HandleView$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/HandleView.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/ImeAdapter$AdapterInputConnectionFactory.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/ImeAdapter$DelayedDismissInput.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/ImeAdapter$ImeAdapterDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/ImeAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$4.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$5.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$DateListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$DateTimeListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$FullTimeListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$InputActionDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer$MonthOrWeekListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputDialogContainer.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InputMethodManagerWrapper.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InsertionHandleController$PastePopupMenu.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/InsertionHandleController.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/MonthPicker.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/MonthPickerDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/MultiFieldTimePickerDialog$NumberFormatter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/MultiFieldTimePickerDialog$OnMultiFieldTimeSetListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/MultiFieldTimePickerDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/PopupItemType.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/browser/input/PopupItemType.template create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectPopupAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectPopupDialog$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectPopupDialog$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectPopupDialog$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectPopupDialog$4.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectPopupDialog$5.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectPopupDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectPopupItem.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/SelectionHandleController.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/TwoFieldDatePicker$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/TwoFieldDatePicker$OnMonthOrWeekChangedListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/TwoFieldDatePicker.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/TwoFieldDatePickerDialog$OnValueSetListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/TwoFieldDatePickerDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/WeekPicker.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/input/WeekPickerDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/third_party/GestureDetector$GestureHandler.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/third_party/GestureDetector$OnDoubleTapListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/third_party/GestureDetector$OnGestureListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/third_party/GestureDetector$SimpleOnGestureListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/third_party/GestureDetector.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/browser/webcontents/WebContentsImpl.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/CleanupReference$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/CleanupReference$LazyHolder$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/CleanupReference$LazyHolder.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/CleanupReference.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/CommandLine$JavaCommandLine.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/CommandLine$NativeCommandLine.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/CommandLine.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/ContentSwitches.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/DeviceTelephonyInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/IChildProcessCallback$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/IChildProcessCallback$Stub.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/common/IChildProcessCallback.aidl create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/IChildProcessCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/IChildProcessService$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/IChildProcessService$Stub.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/common/IChildProcessService.aidl create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/IChildProcessService.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/PerfTraceEvent$EventType.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/PerfTraceEvent.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/ResultCodes.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/common/ResultCodes.template create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/TopControlsState.class create mode 100755 chromium_webview/bin/classes/org/chromium/content/common/TopControlsState.template create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/TraceEvent$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/TraceEvent$LooperMonitor$Holder.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/TraceEvent$LooperMonitor.class create mode 100644 chromium_webview/bin/classes/org/chromium/content/common/TraceEvent.class create mode 100755 chromium_webview/bin/classes/org/chromium/content_public/DEPS create mode 100644 chromium_webview/bin/classes/org/chromium/content_public/browser/GestureStateListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/content_public/browser/NavigationController.class create mode 100644 chromium_webview/bin/classes/org/chromium/content_public/browser/WebContents.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AndroidImageFormatList.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AudioManagerAndroid$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AudioManagerAndroid$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AudioManagerAndroid$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AudioManagerAndroid$AudioDeviceName.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AudioManagerAndroid$SettingsObserver.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AudioManagerAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AudioRecordInput$AudioRecordThread.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/AudioRecordInput.class create mode 100755 chromium_webview/bin/classes/org/chromium/media/ImageFormat.template create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaCodecBridge$CodecInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaCodecBridge$DequeueInputResult.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaCodecBridge$DequeueOutputResult.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaCodecBridge.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$4.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$5.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$6.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$MediaDrmListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$PendingCreateSessionData.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge$PostRequestTask.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaDrmBridge.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaPlayerBridge$AllowedOperations.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaPlayerBridge$LoadDataUriTask.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaPlayerBridge.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/MediaPlayerListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/UsbMidiDeviceAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/UsbMidiDeviceFactoryAndroid$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/UsbMidiDeviceFactoryAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/VideoCapture$BuggyDeviceHack$IdAndSizes.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/VideoCapture$BuggyDeviceHack.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/VideoCapture$CaptureFormat.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/VideoCapture$ChromiumCameraInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/VideoCapture.class create mode 100644 chromium_webview/bin/classes/org/chromium/media/WebAudioMediaCodecBridge.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/AndroidCertVerifyResult.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/AndroidKeyStore.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/AndroidNetworkLibrary.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/AndroidPrivateKey.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/CertVerifyResultAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/CertVerifyStatusAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/CertificateMimeType.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/DefaultAndroidKeyStore$DefaultAndroidPrivateKey.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/DefaultAndroidKeyStore.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/GURLUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/IRemoteAndroidKeyStore$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/IRemoteAndroidKeyStore$Stub.class create mode 100755 chromium_webview/bin/classes/org/chromium/net/IRemoteAndroidKeyStore.aidl create mode 100644 chromium_webview/bin/classes/org/chromium/net/IRemoteAndroidKeyStore.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/IRemoteAndroidKeyStoreCallbacks$Stub$Proxy.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/IRemoteAndroidKeyStoreCallbacks$Stub.class create mode 100755 chromium_webview/bin/classes/org/chromium/net/IRemoteAndroidKeyStoreCallbacks.aidl create mode 100644 chromium_webview/bin/classes/org/chromium/net/IRemoteAndroidKeyStoreCallbacks.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetError.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetworkChangeNotifier$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetworkChangeNotifier$ConnectionTypeObserver.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetworkChangeNotifier.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetworkChangeNotifierAutoDetect$ConnectivityManagerDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetworkChangeNotifierAutoDetect$NetworkConnectivityIntentFilter.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetworkChangeNotifierAutoDetect$Observer.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetworkChangeNotifierAutoDetect$WifiManagerDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/NetworkChangeNotifierAutoDetect.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/PrivateKeyType.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/ProxyChangeListener$Delegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/ProxyChangeListener$ProxyConfig.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/ProxyChangeListener$ProxyReceiver.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/ProxyChangeListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/RemoteAndroidKeyStore$RemotePrivateKey.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/RemoteAndroidKeyStore.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/X509Util$TrustStorageListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/X509Util$X509TrustManagerIceCreamSandwich.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/X509Util$X509TrustManagerImplementation.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/X509Util$X509TrustManagerJellyBean.class create mode 100644 chromium_webview/bin/classes/org/chromium/net/X509Util.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/Clipboard.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerAdvanced.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerAdvancedComponent.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerDialog$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerDialog$2.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerDialog$3.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerDialog$4.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerMoreButton.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorPickerSimple.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorSuggestion.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorSuggestionListAdapter$OnColorSuggestionClickListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ColorSuggestionListAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/LocalizationUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/OnColorChangedListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/R$color.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/R$dimen.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/R$drawable.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/R$id.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/R$layout.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/R$string.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/R$style.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/R.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/SelectFileDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/UiUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ViewAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/ViewAndroidDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/WindowAndroid$IntentCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/WindowAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/WindowOpenDisposition.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/autofill/AutofillDividerDrawable.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/autofill/AutofillListAdapter.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/autofill/AutofillPopup$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/autofill/AutofillPopup$AutofillLogger.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/autofill/AutofillPopup$AutofillPopupDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/autofill/AutofillPopup.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/autofill/AutofillSuggestion.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/base/ActivityWindowAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/base/Clipboard.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/base/LocalizationUtils.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/base/SelectFileDialog.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/base/ViewAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/base/ViewAndroidDelegate.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/base/WindowAndroid$IntentCallback.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/base/WindowAndroid.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/gfx/BitmapHelper.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/gfx/DeviceDisplayInfo$1.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/gfx/DeviceDisplayInfo.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/gfx/SurfaceTextureListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/gfx/SurfaceTexturePlatformWrapper.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/gl/SurfaceTextureListener.class create mode 100644 chromium_webview/bin/classes/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.class create mode 100644 chromium_webview/bin/jarlist.cache create mode 100644 chromium_webview/bin/java.jar create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/autofill_popup_background_down.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/autofill_popup_background_up.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/bubble.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/bubble_arrow_up.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/color_picker_advanced_select_handle.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/ic_launcher.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/ic_media_video_poster.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/ic_menu_search_holo_light.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/ic_menu_share_holo_light.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/ondemand_overlay.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable-hdpi/pageinfo_warning_major.png create mode 100644 chromium_webview/bin/res/crunch/drawable-ldpi/ic_media_video_poster.png create mode 100644 chromium_webview/bin/res/crunch/drawable-mdpi/ic_launcher.png create mode 100644 chromium_webview/bin/res/crunch/drawable-mdpi/ic_media_video_poster.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/autofill_popup_background_down.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/autofill_popup_background_up.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/bubble.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/bubble_arrow_up.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/color_picker_advanced_select_handle.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/ic_launcher.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/ic_media_video_poster.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/ic_menu_search_holo_light.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/ic_menu_share_holo_light.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/ondemand_overlay.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable-xhdpi/pageinfo_warning_major.png create mode 100644 chromium_webview/bin/res/crunch/drawable/autofill_popup_background_down.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable/autofill_popup_background_up.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable/bubble.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable/bubble_arrow_up.png create mode 100644 chromium_webview/bin/res/crunch/drawable/color_picker_advanced_select_handle.png create mode 100644 chromium_webview/bin/res/crunch/drawable/ic_menu_search_holo_light.png create mode 100644 chromium_webview/bin/res/crunch/drawable/ic_menu_share_holo_light.png create mode 100644 chromium_webview/bin/res/crunch/drawable/ondemand_overlay.9.png create mode 100644 chromium_webview/bin/res/crunch/drawable/pageinfo_warning_major.png create mode 100644 chromium_webview/bin/res/crunch/mipmap-hdpi/app_icon.png create mode 100644 chromium_webview/bin/res/crunch/mipmap-mdpi/app_icon.png create mode 100644 chromium_webview/bin/res/crunch/mipmap-xhdpi/app_icon.png create mode 100644 chromium_webview/bin/res/crunch/mipmap-xxhdpi/app_icon.png create mode 100644 chromium_webview/gen/com/googlecode/eyesfree/braille/display/IBrailleService.java create mode 100644 chromium_webview/gen/com/googlecode/eyesfree/braille/display/IBrailleServiceCallback.java create mode 100644 chromium_webview/gen/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.java create mode 100644 chromium_webview/gen/com/googlecode/eyesfree/braille/translate/ITranslatorService.java create mode 100644 chromium_webview/gen/com/googlecode/eyesfree/braille/translate/ITranslatorServiceCallback.java create mode 100644 chromium_webview/gen/com/mogoweb/chrome/BuildConfig.java create mode 100644 chromium_webview/gen/com/mogoweb/chrome/R.java create mode 100644 chromium_webview/gen/org/chromium/content/common/IChildProcessCallback.java create mode 100644 chromium_webview/gen/org/chromium/content/common/IChildProcessService.java create mode 100644 chromium_webview/gen/org/chromium/net/IRemoteAndroidKeyStore.java create mode 100644 chromium_webview/gen/org/chromium/net/IRemoteAndroidKeyStoreCallbacks.java create mode 100755 chromium_webview/libs/android-support-v4.jar create mode 100755 chromium_webview/libs/armeabi-v7a/gdbserver create mode 100755 chromium_webview/libs/armeabi-v7a/libchromeview.so create mode 100755 chromium_webview/libs/guava_javalib.jar create mode 100755 chromium_webview/libs/jsr_305_javalib.jar create mode 100755 chromium_webview/proguard-project.txt create mode 100755 chromium_webview/project.properties create mode 100755 chromium_webview/res/drawable-hdpi/autofill_popup_background_down.9.png create mode 100755 chromium_webview/res/drawable-hdpi/autofill_popup_background_up.9.png create mode 100755 chromium_webview/res/drawable-hdpi/bubble.9.png create mode 100755 chromium_webview/res/drawable-hdpi/bubble_arrow_up.png create mode 100755 chromium_webview/res/drawable-hdpi/color_picker_advanced_select_handle.png create mode 100755 chromium_webview/res/drawable-hdpi/ic_launcher.png create mode 100755 chromium_webview/res/drawable-hdpi/ic_media_video_poster.png create mode 100755 chromium_webview/res/drawable-hdpi/ic_menu_search_holo_light.png create mode 100755 chromium_webview/res/drawable-hdpi/ic_menu_share_holo_light.png create mode 100755 chromium_webview/res/drawable-hdpi/ondemand_overlay.9.png create mode 100755 chromium_webview/res/drawable-hdpi/pageinfo_warning_major.png create mode 100755 chromium_webview/res/drawable-ldpi/ic_media_video_poster.png create mode 100755 chromium_webview/res/drawable-mdpi/ic_launcher.png create mode 100755 chromium_webview/res/drawable-mdpi/ic_media_video_poster.png create mode 100755 chromium_webview/res/drawable-xhdpi/autofill_popup_background_down.9.png create mode 100755 chromium_webview/res/drawable-xhdpi/autofill_popup_background_up.9.png create mode 100755 chromium_webview/res/drawable-xhdpi/bubble.9.png create mode 100755 chromium_webview/res/drawable-xhdpi/bubble_arrow_up.png create mode 100755 chromium_webview/res/drawable-xhdpi/color_picker_advanced_select_handle.png create mode 100755 chromium_webview/res/drawable-xhdpi/ic_launcher.png create mode 100755 chromium_webview/res/drawable-xhdpi/ic_media_video_poster.png create mode 100755 chromium_webview/res/drawable-xhdpi/ic_menu_search_holo_light.png create mode 100755 chromium_webview/res/drawable-xhdpi/ic_menu_share_holo_light.png create mode 100755 chromium_webview/res/drawable-xhdpi/ondemand_overlay.9.png create mode 100755 chromium_webview/res/drawable-xhdpi/pageinfo_warning_major.png create mode 100755 chromium_webview/res/drawable/autofill_popup_background.xml create mode 100755 chromium_webview/res/drawable/autofill_popup_background_down.9.png create mode 100755 chromium_webview/res/drawable/autofill_popup_background_up.9.png create mode 100755 chromium_webview/res/drawable/bubble.9.png create mode 100755 chromium_webview/res/drawable/bubble_arrow_up.png create mode 100755 chromium_webview/res/drawable/color_button_background.xml create mode 100755 chromium_webview/res/drawable/color_picker_advanced_select_handle.png create mode 100755 chromium_webview/res/drawable/color_picker_border.xml create mode 100755 chromium_webview/res/drawable/ic_menu_search_holo_light.png create mode 100755 chromium_webview/res/drawable/ic_menu_share_holo_light.png create mode 100755 chromium_webview/res/drawable/ondemand_overlay.9.png create mode 100755 chromium_webview/res/drawable/pageinfo_warning_major.png create mode 100755 chromium_webview/res/layout-land/date_time_picker_dialog.xml create mode 100755 chromium_webview/res/layout/autofill_text.xml create mode 100755 chromium_webview/res/layout/color_picker_advanced_component.xml create mode 100755 chromium_webview/res/layout/color_picker_dialog_content.xml create mode 100755 chromium_webview/res/layout/color_picker_dialog_title.xml create mode 100755 chromium_webview/res/layout/date_time_picker_dialog.xml create mode 100755 chromium_webview/res/layout/date_time_suggestion.xml create mode 100755 chromium_webview/res/layout/js_prompt.xml create mode 100755 chromium_webview/res/layout/multi_field_time_picker_dialog.xml create mode 100755 chromium_webview/res/layout/two_field_date_picker.xml create mode 100755 chromium_webview/res/layout/validation_message_bubble.xml create mode 100755 chromium_webview/res/menu/select_action_menu.xml create mode 100755 chromium_webview/res/mipmap-hdpi/app_icon.png create mode 100755 chromium_webview/res/mipmap-mdpi/app_icon.png create mode 100755 chromium_webview/res/mipmap-xhdpi/app_icon.png create mode 100755 chromium_webview/res/mipmap-xxhdpi/app_icon.png create mode 100755 chromium_webview/res/raw/blank_html.html create mode 100755 chromium_webview/res/values-v11/styles.xml create mode 100755 chromium_webview/res/values-v14/styles.xml create mode 100755 chromium_webview/res/values-v17/styles_content.xml create mode 100755 chromium_webview/res/values-v17/styles_ui.xml create mode 100755 chromium_webview/res/values-zh-rCN/android_content_strings.xml create mode 100755 chromium_webview/res/values-zh-rCN/android_ui_strings.xml create mode 100755 chromium_webview/res/values-zh-rCN/strings.xml create mode 100755 chromium_webview/res/values/android_content_strings.xml create mode 100755 chromium_webview/res/values/android_ui_strings.xml create mode 100755 chromium_webview/res/values/attrs_content.xml create mode 100755 chromium_webview/res/values/colors_ui.xml create mode 100755 chromium_webview/res/values/dimens_content.xml create mode 100755 chromium_webview/res/values/dimens_ui.xml create mode 100755 chromium_webview/res/values/strings.xml create mode 100755 chromium_webview/res/values/strings_content.xml create mode 100755 chromium_webview/res/values/strings_ui.xml create mode 100755 chromium_webview/res/values/styles.xml create mode 100755 chromium_webview/res/values/values_ui.xml create mode 100755 chromium_webview/src/OWNERS create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/display/BrailleDisplayProperties.aidl create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/display/BrailleDisplayProperties.java create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/display/BrailleInputEvent.aidl create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/display/BrailleInputEvent.java create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/display/BrailleKeyBinding.java create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/display/Display.java create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/display/IBrailleService.aidl create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/display/IBrailleServiceCallback.aidl create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.aidl create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient.java create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/selfbraille/WriteData.aidl create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/selfbraille/WriteData.java create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/translate/BrailleTranslator.java create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/translate/ITranslatorService.aidl create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/translate/ITranslatorServiceCallback.aidl create mode 100755 chromium_webview/src/com/googlecode/eyesfree/braille/translate/TranslatorManager.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/CookieManager.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/DownloadListener.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/GeolocationPermissions.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/HttpAuthHandler.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/JavascriptInterface.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/JsPromptResult.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/JsResult.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/MustOverrideException.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/SslErrorHandler.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebBackForwardList.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebChromeClient.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebHistoryItem.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebIconDatabase.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebSettings.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebStorage.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebView.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebViewClient.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebViewDatabase.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/WebViewFragment.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/ContentSettingsAdapter.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/CookieManagerAdapter.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/DebugFlags.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/DrawGLFunctor.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/GeolocationPermissionsAdapter.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/JsDialogHelper.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/UnimplementedWebViewApi.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebBackForwardListImpl.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebHistoryItemImpl.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebIconDatabaseAdapter.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebStorageAdapter.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebViewChromium.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebViewChromiumFactoryProvider.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebViewContentsClientAdapter.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebViewDatabaseAdapter.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebViewFactory.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebViewFactoryProvider.java create mode 100755 chromium_webview/src/com/mogoweb/chrome/impl/WebViewProvider.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AndroidProtocolHandler.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwAutofillManagerDelegate.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwBrowserContext.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwBrowserProcess.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwContentViewClient.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwContents.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwContentsClient.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwContentsClientBridge.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwContentsClientCallbackHelper.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwContentsIoThreadClient.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwCookieManager.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwDevToolsServer.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwFormDatabase.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwGeolocationPermissions.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwHttpAuthHandler.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwLayoutSizer.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwPdfExporter.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwPicture.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwPrintDocumentAdapter.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwQuotaManagerBridge.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwResource.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwScrollOffsetManager.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwSettings.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwWebContentsDelegate.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java create mode 100755 chromium_webview/src/org/chromium/android_webview/AwZoomControls.java create mode 100755 chromium_webview/src/org/chromium/android_webview/DefaultVideoPosterRequestHandler.java create mode 100755 chromium_webview/src/org/chromium/android_webview/ErrorCodeConversionHelper.java create mode 100755 chromium_webview/src/org/chromium/android_webview/HttpAuthDatabase.java create mode 100755 chromium_webview/src/org/chromium/android_webview/InterceptedRequestData.java create mode 100755 chromium_webview/src/org/chromium/android_webview/JavaBrowserViewRendererHelper.java create mode 100755 chromium_webview/src/org/chromium/android_webview/JsPromptResultReceiver.java create mode 100755 chromium_webview/src/org/chromium/android_webview/JsResultHandler.java create mode 100755 chromium_webview/src/org/chromium/android_webview/JsResultReceiver.java create mode 100755 chromium_webview/src/org/chromium/android_webview/OverScrollGlow.java create mode 100755 chromium_webview/src/org/chromium/android_webview/ScrollAccessibilityHelper.java create mode 100755 chromium_webview/src/org/chromium/android_webview/SslUtil.java create mode 100755 chromium_webview/src/org/chromium/base/AccessedByNative.java create mode 100755 chromium_webview/src/org/chromium/base/ActivityState.java create mode 100755 chromium_webview/src/org/chromium/base/ActivityState.template create mode 100755 chromium_webview/src/org/chromium/base/ActivityStatus.java create mode 100755 chromium_webview/src/org/chromium/base/ApiCompatibilityUtils.java create mode 100755 chromium_webview/src/org/chromium/base/BaseChromiumApplication.java create mode 100755 chromium_webview/src/org/chromium/base/BaseSwitches.java create mode 100755 chromium_webview/src/org/chromium/base/BuildInfo.java create mode 100755 chromium_webview/src/org/chromium/base/CalledByNative.java create mode 100755 chromium_webview/src/org/chromium/base/CalledByNativeUnchecked.java create mode 100755 chromium_webview/src/org/chromium/base/ChromiumApplication.java create mode 100755 chromium_webview/src/org/chromium/base/CollectionUtil.java create mode 100755 chromium_webview/src/org/chromium/base/CommandLine.java create mode 100755 chromium_webview/src/org/chromium/base/ContentUriUtils.java create mode 100755 chromium_webview/src/org/chromium/base/ContextTypes.java create mode 100755 chromium_webview/src/org/chromium/base/CpuFeatures.java create mode 100755 chromium_webview/src/org/chromium/base/ImportantFileWriterAndroid.java create mode 100755 chromium_webview/src/org/chromium/base/JNINamespace.java create mode 100755 chromium_webview/src/org/chromium/base/JavaHandlerThread.java create mode 100755 chromium_webview/src/org/chromium/base/MemoryPressureLevelList.java create mode 100755 chromium_webview/src/org/chromium/base/MemoryPressureLevelList.template create mode 100755 chromium_webview/src/org/chromium/base/MemoryPressureListener.java create mode 100755 chromium_webview/src/org/chromium/base/NativeClassQualifiedName.java create mode 100755 chromium_webview/src/org/chromium/base/ObserverList.java create mode 100755 chromium_webview/src/org/chromium/base/PathService.java create mode 100755 chromium_webview/src/org/chromium/base/PathUtils.java create mode 100755 chromium_webview/src/org/chromium/base/PerfTraceEvent.java create mode 100755 chromium_webview/src/org/chromium/base/PowerMonitor.java create mode 100755 chromium_webview/src/org/chromium/base/PowerStatusReceiver.java create mode 100755 chromium_webview/src/org/chromium/base/SysUtils.java create mode 100755 chromium_webview/src/org/chromium/base/SystemMessageHandler.java create mode 100755 chromium_webview/src/org/chromium/base/ThreadUtils.java create mode 100755 chromium_webview/src/org/chromium/base/TraceEvent.java create mode 100755 chromium_webview/src/org/chromium/base/WeakContext.java create mode 100755 chromium_webview/src/org/chromium/base/library_loader/LibraryLoader.java create mode 100755 chromium_webview/src/org/chromium/base/library_loader/LibraryLoaderHelper.java create mode 100755 chromium_webview/src/org/chromium/base/library_loader/Linker.java create mode 100755 chromium_webview/src/org/chromium/base/library_loader/LoaderErrors.java create mode 100755 chromium_webview/src/org/chromium/base/library_loader/NativeLibraries.java create mode 100755 chromium_webview/src/org/chromium/base/library_loader/ProcessInitException.java create mode 100755 chromium_webview/src/org/chromium/chrome/R.java create mode 100755 chromium_webview/src/org/chromium/chrome/browser/ResourceId.java create mode 100755 chromium_webview/src/org/chromium/chrome/browser/sync/ModelTypeSelection.java create mode 100755 chromium_webview/src/org/chromium/chrome/browser/ui/toolbar/ToolbarModelSecurityLevel.java create mode 100755 chromium_webview/src/org/chromium/components/navigation_interception/InterceptNavigationDelegate.java create mode 100755 chromium_webview/src/org/chromium/components/navigation_interception/NavigationParams.java create mode 100755 chromium_webview/src/org/chromium/components/web_contents_delegate_android/ColorChooserAndroid.java create mode 100755 chromium_webview/src/org/chromium/components/web_contents_delegate_android/ValidationMessageBubble.java create mode 100755 chromium_webview/src/org/chromium/components/web_contents_delegate_android/WebContentsDelegateAndroid.java create mode 100755 chromium_webview/src/org/chromium/content/R.java create mode 100755 chromium_webview/src/org/chromium/content/app/ChildProcessService.java create mode 100755 chromium_webview/src/org/chromium/content/app/ChromiumLinkerParams.java create mode 100755 chromium_webview/src/org/chromium/content/app/ContentApplication.java create mode 100755 chromium_webview/src/org/chromium/content/app/ContentMain.java create mode 100755 chromium_webview/src/org/chromium/content/app/LinkerParams.java create mode 100755 chromium_webview/src/org/chromium/content/app/PrivilegedProcessService.java create mode 100755 chromium_webview/src/org/chromium/content/app/PrivilegedProcessService0.java create mode 100755 chromium_webview/src/org/chromium/content/app/PrivilegedProcessService1.java create mode 100755 chromium_webview/src/org/chromium/content/app/PrivilegedProcessService2.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService0.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService1.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService10.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService11.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService12.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService2.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService3.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService4.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService5.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService6.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService7.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService8.java create mode 100755 chromium_webview/src/org/chromium/content/app/SandboxedProcessService9.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ActivityContentVideoViewClient.java create mode 100755 chromium_webview/src/org/chromium/content/browser/BindingManager.java create mode 100755 chromium_webview/src/org/chromium/content/browser/BindingManagerImpl.java create mode 100755 chromium_webview/src/org/chromium/content/browser/BrowserStartupController.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ChildProcessConnection.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ChildProcessConnectionImpl.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ChildProcessLauncher.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentSettings.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentVideoView.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentVideoViewClient.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentVideoViewControls.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentVideoViewLegacy.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentView.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentViewClient.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentViewCore.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentViewDownloadDelegate.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentViewGestureHandler.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentViewRenderView.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ContentViewStatics.java create mode 100755 chromium_webview/src/org/chromium/content/browser/DeviceMotionAndOrientation.java create mode 100755 chromium_webview/src/org/chromium/content/browser/DeviceUtils.java create mode 100755 chromium_webview/src/org/chromium/content/browser/DownloadController.java create mode 100755 chromium_webview/src/org/chromium/content/browser/DownloadInfo.java create mode 100755 chromium_webview/src/org/chromium/content/browser/FileDescriptorInfo.java create mode 100755 chromium_webview/src/org/chromium/content/browser/GenericTouchGesture.java create mode 100755 chromium_webview/src/org/chromium/content/browser/GestureEventType.java create mode 100755 chromium_webview/src/org/chromium/content/browser/GestureEventType.template create mode 100755 chromium_webview/src/org/chromium/content/browser/HeapStatsLogger.java create mode 100755 chromium_webview/src/org/chromium/content/browser/InterstitialPageDelegateAndroid.java create mode 100755 chromium_webview/src/org/chromium/content/browser/JavascriptInterface.java create mode 100755 chromium_webview/src/org/chromium/content/browser/JellyBeanContentView.java create mode 100755 chromium_webview/src/org/chromium/content/browser/LoadUrlParams.java create mode 100755 chromium_webview/src/org/chromium/content/browser/LocationProvider.java create mode 100755 chromium_webview/src/org/chromium/content/browser/LocationProviderAdapter.java create mode 100755 chromium_webview/src/org/chromium/content/browser/LocationProviderFactory.java create mode 100755 chromium_webview/src/org/chromium/content/browser/LongPressDetector.java create mode 100755 chromium_webview/src/org/chromium/content/browser/MediaDrmCredentialManager.java create mode 100755 chromium_webview/src/org/chromium/content/browser/MediaResourceGetter.java create mode 100755 chromium_webview/src/org/chromium/content/browser/NavigationClient.java create mode 100755 chromium_webview/src/org/chromium/content/browser/NavigationEntry.java create mode 100755 chromium_webview/src/org/chromium/content/browser/NavigationHistory.java create mode 100755 chromium_webview/src/org/chromium/content/browser/OWNERS create mode 100755 chromium_webview/src/org/chromium/content/browser/PageInfo.java create mode 100755 chromium_webview/src/org/chromium/content/browser/PageTransitionTypes.java create mode 100755 chromium_webview/src/org/chromium/content/browser/PageTransitionTypes.template create mode 100755 chromium_webview/src/org/chromium/content/browser/PepperPluginManager.java create mode 100755 chromium_webview/src/org/chromium/content/browser/PopupZoomer.java create mode 100755 chromium_webview/src/org/chromium/content/browser/PositionObserver.java create mode 100755 chromium_webview/src/org/chromium/content/browser/PowerSaveBlocker.java create mode 100755 chromium_webview/src/org/chromium/content/browser/RenderCoordinates.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ResourceExtractor.java create mode 100755 chromium_webview/src/org/chromium/content/browser/SelectActionModeCallback.java create mode 100755 chromium_webview/src/org/chromium/content/browser/SnapScrollController.java create mode 100755 chromium_webview/src/org/chromium/content/browser/SpeechRecognition.java create mode 100755 chromium_webview/src/org/chromium/content/browser/SpeechRecognitionError.java create mode 100755 chromium_webview/src/org/chromium/content/browser/SpeechRecognitionError.template create mode 100755 chromium_webview/src/org/chromium/content/browser/TouchEventSynthesizer.java create mode 100755 chromium_webview/src/org/chromium/content/browser/TouchPoint.java create mode 100755 chromium_webview/src/org/chromium/content/browser/TracingControllerAndroid.java create mode 100755 chromium_webview/src/org/chromium/content/browser/TracingIntentHandler.java create mode 100755 chromium_webview/src/org/chromium/content/browser/VSyncManager.java create mode 100755 chromium_webview/src/org/chromium/content/browser/VSyncMonitor.java create mode 100755 chromium_webview/src/org/chromium/content/browser/VibrationMessageFilter.java create mode 100755 chromium_webview/src/org/chromium/content/browser/VibrationProvider.java create mode 100755 chromium_webview/src/org/chromium/content/browser/ViewPositionObserver.java create mode 100755 chromium_webview/src/org/chromium/content/browser/WebContentsObserverAndroid.java create mode 100755 chromium_webview/src/org/chromium/content/browser/accessibility/AccessibilityInjector.java create mode 100755 chromium_webview/src/org/chromium/content/browser/accessibility/BrowserAccessibilityManager.java create mode 100755 chromium_webview/src/org/chromium/content/browser/accessibility/JellyBeanAccessibilityInjector.java create mode 100755 chromium_webview/src/org/chromium/content/browser/accessibility/JellyBeanBrowserAccessibilityManager.java create mode 100755 chromium_webview/src/org/chromium/content/browser/accessibility/KitKatBrowserAccessibilityManager.java create mode 100755 chromium_webview/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/AdapterInputConnection.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/CursorController.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/DateDialogNormalizer.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/DateTimePickerDialog.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/DateTimeSuggestion.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/DateTimeSuggestionListAdapter.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/HandleView.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/ImeAdapter.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/InputDialogContainer.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/InputMethodManagerWrapper.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/InsertionHandleController.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/MonthPicker.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/MonthPickerDialog.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/MultiFieldTimePickerDialog.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/PopupItemType.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/PopupItemType.template create mode 100755 chromium_webview/src/org/chromium/content/browser/input/SelectPopupAdapter.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/SelectPopupDialog.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/SelectPopupItem.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/SelectionHandleController.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/TwoFieldDatePicker.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/TwoFieldDatePickerDialog.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/WeekPicker.java create mode 100755 chromium_webview/src/org/chromium/content/browser/input/WeekPickerDialog.java create mode 100755 chromium_webview/src/org/chromium/content/browser/third_party/GestureDetector.java create mode 100755 chromium_webview/src/org/chromium/content/browser/webcontents/WebContentsImpl.java create mode 100755 chromium_webview/src/org/chromium/content/common/CleanupReference.java create mode 100755 chromium_webview/src/org/chromium/content/common/CommandLine.java create mode 100755 chromium_webview/src/org/chromium/content/common/ContentSwitches.java create mode 100755 chromium_webview/src/org/chromium/content/common/DeviceTelephonyInfo.java create mode 100755 chromium_webview/src/org/chromium/content/common/IChildProcessCallback.aidl create mode 100755 chromium_webview/src/org/chromium/content/common/IChildProcessService.aidl create mode 100755 chromium_webview/src/org/chromium/content/common/PerfTraceEvent.java create mode 100755 chromium_webview/src/org/chromium/content/common/ResultCodes.java create mode 100755 chromium_webview/src/org/chromium/content/common/ResultCodes.template create mode 100755 chromium_webview/src/org/chromium/content/common/TopControlsState.java create mode 100755 chromium_webview/src/org/chromium/content/common/TopControlsState.template create mode 100755 chromium_webview/src/org/chromium/content/common/TraceEvent.java create mode 100755 chromium_webview/src/org/chromium/content_public/DEPS create mode 100755 chromium_webview/src/org/chromium/content_public/browser/GestureStateListener.java create mode 100755 chromium_webview/src/org/chromium/content_public/browser/NavigationController.java create mode 100755 chromium_webview/src/org/chromium/content_public/browser/WebContents.java create mode 100755 chromium_webview/src/org/chromium/media/AudioManagerAndroid.java create mode 100755 chromium_webview/src/org/chromium/media/AudioRecordInput.java create mode 100755 chromium_webview/src/org/chromium/media/ImageFormat.java create mode 100755 chromium_webview/src/org/chromium/media/ImageFormat.template create mode 100755 chromium_webview/src/org/chromium/media/MediaCodecBridge.java create mode 100755 chromium_webview/src/org/chromium/media/MediaDrmBridge.java create mode 100755 chromium_webview/src/org/chromium/media/MediaPlayerBridge.java create mode 100755 chromium_webview/src/org/chromium/media/MediaPlayerListener.java create mode 100755 chromium_webview/src/org/chromium/media/UsbMidiDeviceAndroid.java create mode 100755 chromium_webview/src/org/chromium/media/UsbMidiDeviceFactoryAndroid.java create mode 100755 chromium_webview/src/org/chromium/media/VideoCapture.java create mode 100755 chromium_webview/src/org/chromium/media/WebAudioMediaCodecBridge.java create mode 100755 chromium_webview/src/org/chromium/net/AndroidCertVerifyResult.java create mode 100755 chromium_webview/src/org/chromium/net/AndroidKeyStore.java create mode 100755 chromium_webview/src/org/chromium/net/AndroidNetworkLibrary.java create mode 100755 chromium_webview/src/org/chromium/net/AndroidPrivateKey.java create mode 100755 chromium_webview/src/org/chromium/net/CertVerifyResultAndroid.java create mode 100755 chromium_webview/src/org/chromium/net/CertVerifyStatusAndroid.java create mode 100755 chromium_webview/src/org/chromium/net/CertificateMimeType.java create mode 100755 chromium_webview/src/org/chromium/net/DefaultAndroidKeyStore.java create mode 100755 chromium_webview/src/org/chromium/net/GURLUtils.java create mode 100755 chromium_webview/src/org/chromium/net/IRemoteAndroidKeyStore.aidl create mode 100755 chromium_webview/src/org/chromium/net/IRemoteAndroidKeyStoreCallbacks.aidl create mode 100755 chromium_webview/src/org/chromium/net/NetError.java create mode 100755 chromium_webview/src/org/chromium/net/NetworkChangeNotifier.java create mode 100755 chromium_webview/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java create mode 100755 chromium_webview/src/org/chromium/net/PrivateKeyType.java create mode 100755 chromium_webview/src/org/chromium/net/ProxyChangeListener.java create mode 100755 chromium_webview/src/org/chromium/net/RemoteAndroidKeyStore.java create mode 100755 chromium_webview/src/org/chromium/net/X509Util.java create mode 100755 chromium_webview/src/org/chromium/ui/Clipboard.java create mode 100755 chromium_webview/src/org/chromium/ui/ColorPickerAdvanced.java create mode 100755 chromium_webview/src/org/chromium/ui/ColorPickerAdvancedComponent.java create mode 100755 chromium_webview/src/org/chromium/ui/ColorPickerDialog.java create mode 100755 chromium_webview/src/org/chromium/ui/ColorPickerMoreButton.java create mode 100755 chromium_webview/src/org/chromium/ui/ColorPickerSimple.java create mode 100755 chromium_webview/src/org/chromium/ui/ColorSuggestion.java create mode 100755 chromium_webview/src/org/chromium/ui/ColorSuggestionListAdapter.java create mode 100755 chromium_webview/src/org/chromium/ui/LocalizationUtils.java create mode 100755 chromium_webview/src/org/chromium/ui/OnColorChangedListener.java create mode 100755 chromium_webview/src/org/chromium/ui/R.java create mode 100755 chromium_webview/src/org/chromium/ui/SelectFileDialog.java create mode 100755 chromium_webview/src/org/chromium/ui/UiUtils.java create mode 100755 chromium_webview/src/org/chromium/ui/ViewAndroid.java create mode 100755 chromium_webview/src/org/chromium/ui/ViewAndroidDelegate.java create mode 100755 chromium_webview/src/org/chromium/ui/WindowAndroid.java create mode 100755 chromium_webview/src/org/chromium/ui/WindowOpenDisposition.java create mode 100755 chromium_webview/src/org/chromium/ui/autofill/AutofillDividerDrawable.java create mode 100755 chromium_webview/src/org/chromium/ui/autofill/AutofillListAdapter.java create mode 100755 chromium_webview/src/org/chromium/ui/autofill/AutofillPopup.java create mode 100755 chromium_webview/src/org/chromium/ui/autofill/AutofillSuggestion.java create mode 100755 chromium_webview/src/org/chromium/ui/base/ActivityWindowAndroid.java create mode 100755 chromium_webview/src/org/chromium/ui/base/Clipboard.java create mode 100755 chromium_webview/src/org/chromium/ui/base/LocalizationUtils.java create mode 100755 chromium_webview/src/org/chromium/ui/base/SelectFileDialog.java create mode 100755 chromium_webview/src/org/chromium/ui/base/ViewAndroid.java create mode 100755 chromium_webview/src/org/chromium/ui/base/ViewAndroidDelegate.java create mode 100755 chromium_webview/src/org/chromium/ui/base/WindowAndroid.java create mode 100755 chromium_webview/src/org/chromium/ui/gfx/BitmapHelper.java create mode 100755 chromium_webview/src/org/chromium/ui/gfx/DeviceDisplayInfo.java create mode 100755 chromium_webview/src/org/chromium/ui/gfx/SurfaceTextureListener.java create mode 100755 chromium_webview/src/org/chromium/ui/gfx/SurfaceTexturePlatformWrapper.java create mode 100755 chromium_webview/src/org/chromium/ui/gl/SurfaceTextureListener.java create mode 100755 chromium_webview/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java create mode 100644 gen/com/euricainc/ambc/xkcd/BuildConfig.java create mode 100644 gen/com/euricainc/ambc/xkcd/R.java create mode 100644 gen/com/mogoweb/chrome/R.java create mode 100644 project.properties create mode 100644 res/drawable-hdpi/ic_launcher.png create mode 100644 res/drawable-ldpi/ic_launcher.png create mode 100644 res/drawable-mdpi/ic_launcher.png create mode 100644 res/drawable-xhdpi/ic_launcher.png create mode 100644 res/layout/main.xml create mode 100644 res/values-sw600dp/dimens.xml create mode 100644 res/values-sw720dp-land/dimens.xml create mode 100644 res/values/dimens.xml create mode 100644 res/values/strings.xml create mode 100644 src/com/euricainc/ambc/xkcd/MyActivity.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..7bc01d9 --- /dev/null +++ b/.classpath @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..f29c2c3 --- /dev/null +++ b/.project @@ -0,0 +1,33 @@ + + + MyActivity + + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..b080d2d --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..ce30bc2 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/html/Lato400.woff b/assets/html/Lato400.woff new file mode 100644 index 0000000000000000000000000000000000000000..ad1a467b71314d434d54b786887d3bf91b465368 GIT binary patch literal 35852 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 literal 0 HcmV?d00001 diff --git a/assets/html/Lato700.woff b/assets/html/Lato700.woff new file mode 100644 index 0000000000000000000000000000000000000000..35934a9bba114241684184cc2f1cd470a2d00df7 GIT binary patch literal 37256 zcmZs>1C%B)w=Uc^rfu7{J#F{2ZQHhO+qP|+Gi@7hTYrD&-gEzR*SbmeljO;+)K0Br zuT-ksvfj9#JfgLL?=dGC; zIQ?)a3O_n<|0VE1m}b@|C^B?ku zEB>hy{Rk=I6XdSBjkEg?H~w>vyq|lh*gh&OTA4W7{@7{`1jG^o1msEx5sI#2ZD;gz zZOHA99_@eRIUEVX#=!l@mT=skz6k##z~7KhwgxsPKO8R*5JV0T5Ry`Vd%3^8ozsu~ zvHuxI1rQKuCJ&4bpL_OIwvV-n33`~kqN@lvl@4hYNGD@`IBLOiKq|4aSb0e!+JL4B zM-z_B^x$|foYg?=hM?AFsC82*s!|23;OnV`@FXB;GFiGqkYm=Fe4mk|1DJ)RL@))6 z{T~_Awoj=_+UMA1r~annx4Zkz+I#QG$1K-Pk6UQ$aQN@)=|niJR&$4A7!UWW8@!uw zqkFX6qTPi=Bk9_b=SK6iTE!E zpgVB#xLrd;sVf>h{Pve=2e!lG%fXa3Uhq2Mkf}nkDEDIG754#>1!!TsaI*K=Z}+uWe%5;jM3M|Go&GiS7WuF93oupg|R4T1y#lr3}NXN1@i|c(^jC?WsqsG!Ve` z53&#EvdTw4&&S8^2alNto0$ixnVWjP9;pxuCQx0r2TL{*8*}rA202UdE!!4#e2++zuq!bB&WAJq`u& zxpv9Fu6+?(_X5Zt7HCx4CPDtiQEb)o;#f5`uwwt=aBxBSpP;6>uoYvX_8Q%LLI{?2 zw)U^g0UzDe$bel_f-cJP5}z2`E`D!$0?IqG1P{FEQKfq$bhhF&n+^pal>wC$K4#nl z`mgD(5tM<4R7fwT49|U2s0K~J3Vc};xJ8YS;mlxS{+m<--~*oObg8s>W>|>M(;Ehu6>9Lr9(t#9m)X~K2yNdn z5?~~)iu}cncyhMNC6|>DHsnorH$c{Fq!xQ7l{EG>Chs!ab-4pQlGT(9V@YsM_ zf=Ga8c<@n8T{`bE9x|)L7xqvD79*4HUY*q7Ge%O`n zrj~YIV2Xu$dZ>%VVYU|e8O1mg!|M@QUw0zm!#D%OD_YAc`NL^Wv>%lxIJ%j>4SR>O z?6#=WXw-brt6phA4-C{@zM{ToyF*Jp}x>+#!pSrOp~T><@nT`EZq7_x)}J6p$vEIu_47kv{~mTE8W8d&YY}7_BXN z)Xn=nMA$?MyJJa=HGEQyK_i?vL*gSDG(6g9WWrgqU3)AbzE9%Ylipb~tq9_<*J!TPl;5s$xOuzmQPcbVJtq0no0Qoo%L~kBU zZXSwm9&)g552EsxXZQ{0zHwd5H|3s|-ULg};>V#q@cqAL;YD^AFh@a}QBYB$ncmg|U+yM(xfcK>_TwdW&c z=3{B*qitf{kbcTF_>?m63^{`1cEQjU2-5RMvJ~K0L-B8SZ z9yaD_KP651I&R3*zfYJ5bX=b39v=O7A`|#LEYaJ3^M#Lnk8@d{(W0*0obeF=Kmk$U@3Na z2zPlH1m|Ek{ie8ips9I)+Dp3ASUQ)OQkhw()H;` z7|<~}+;EdyV_Ub|mRE;;|OyajFfsh~En5@zyMVK&T>Klz~`8}Z1S z@ReQTB9I$tIU-*U%!HT{MJNMmQdEIFkQpht-5(i4p+5`+2{nAT196VT{R=JE zFXRL!m&Uz(w;(WV66oXb`Rmnr7sLI0P#Gh)vtGSOu5Z*5K1xUZY)}eAt+ReUB!u2{ zDLsZQ<;u1lW-T9Mlt~k2C*CP%dY4gZD`4m7answ2_W#9*ro`DqOKtCB*{CI%y$Gtn&AXcjEhh+)yJ z3JmE~toi>tSGDYz(u^$uQK1$r0V&MW5fx}tn6OQ`RQo>=>x*8H_>X#{=D#7MCUIk7 z4rjT`Ixm5%XgpQBku1&2F!){O|CNM;qbJCe9pA49S9YGGe;iU&h7ok}kfSEe_ z`PTdIZvjvdBd~+_g@Lcn)7|p6fDgQArp?cXe<@7&IV3o*`q3Xt(Y&|4kUe?cJ%0RA z?OimRe%}+LJyWHU(U{~1z!B{O#gZQxB`>$^gJrR?ibeWe&i7|s8si+0N#_>yCB z{+=t_+t_`u*7tkhs;^<`wc_xV9C-nc{XSYFieAS-Gg6tJf1SY|;yyUrE2}w|xSlBE zV`4({>4U-~Au*Zs|G1D^iWlkitQ${o1}itsota8CchY--RcVBc#i3A zIEheZpF*EV1EET;QKBXIonf8kxIx5IBFvwxqeMlJK&09z@ifU_k^1QS2n8Z?D)`-R?d$w%sfaRdVFR?jU>t^w#_0;{!soKW#$&}wXFyI3*0>7k?q$yKK zZU4SzrBYvooxVU7M|p+vIPG)`38o=wbpuSeDJGllle{!nPuz#w_A{)yWiY_(H11}D zj1n0zu;OBi3g4(Pc}kxSyZZ{h7OKvch)mVp!mcS2mVK=wD1>z?s}%Si(axkAAUaoL zW++NyO+Y+hs^wPLXJsO6wiT2#hz~Om)v7n{W)Qs)KJHI!JzA>Uj}YVtJP8JW>^IUk zRW#Tf>YwcI*Bqc8?C+-pF350WqSgNx9GD)S8yFrQ9-JQT_75=d0TK!107Xq!fp}r0 zWMup>HGFvcGr}3*gL6Pl=*IjzHYCCYD_%)o9|S0u9^v7q@2jLgGAcrtA$=WPwCvU8 z;o)gj)j9(RYN%+J;54aXM5EZ!D%BD24Q@=W;XP3ehEZ?&(#z`jaHmJqPuo_19oAn2 zqu&g@A4rp?rv+Z`=eSt>;pghfh{hHDH7hcXhYOCTHhz7Se@JcG(R7#$#bO|IPl)K= zC**;=D8vh+mO_b9g))p#2}yoXh6t3XVwgY`({c-8CKvGza8?M4Q7dLptCV1`R0u&8 zEEl7VTWGi{y^jtPi9K+$_0 z=iC`r5b`#~O!5%(D`iSTrFY19=iP;t_ZTNx49Qv2KEb>37}DDNwcV}H8|N`U0V;DO_Lq3R;z&5N zwz%-E*hzj}W^(SI{h~!(hRZ>DMG{f71?hIt!opnD<*Z0endc=?=YJyb?-81$7;M`j zXpz*1UKwMU^w&==JiRGxwHkk_r&h@>3SBm(+7_!%t8p~` z%pe|XJyg67PqWiKgnA6iu&tSdnpHcvf9_Fy#C*NK%YS|%%oI>H0RaPn0Ko%6et!cY zx@Y%vLwc*IZZh(pq-KyVdEL-uNSczfWMlv&Z=fap?fNZ8a0I7t_A@& zt>cFJebZdjYM4l$D>>8mjY(1Cqcx>a1+W&)8A-QUgrF<-{5@W~SiExV;L|C4-a1?^ zdT|R16!zZU^%=I5A6DdMq2Q$&GijqTrEP)y_mu3vl1cpw8lYG<8|QnxcD7{W*g==m ze&uOJRbkekj(O20vSUCS?nMl{4cZVr)8Hwn5FIymUx&QsP%vB|Gr@|*lB8OBC{skm zA|{C+rEBd~S#?ptPW${uaYwOdT*Ay1J-QRU6VU@aCT}>g@PZ3muZgQm$R4L1s75w+ z-Po}XQ|0O+E>9#NXZEf8c+@RFObewf`}!Y026H4vAb83j5g#ws9-mh*cgTHrTV z@BIEpu=Pn|W}793hO*FCmXe%jJx~3V@u=gp3I5Cqp&#s&LgQ!vy?YI2Poh zWY1edV;?ZWX)cKT;*P_C>~>%YDa?&@#Qbl*@oY8yS zeawoiMcwk0Y@OPYyCxdtCS%!|U8!mb7b>x9!?FeJ88VeCWJ)@byU8thR}yQhWPgjC z4KHvtD#-a)Ximp^osG*h!1bxdE~f&D8}37U4JZ=l8jJ0Z7Bxz$(c3MVGGIoHqd_Z# zCW*q9!9HFwWqCwS=DH(%Fmrn=%MDedc6J&o3k_YWzR5yZ%o&Y24;>{!2YxwI*AMY# zon_#pxx3DAIUc;M>8UK%ZK1*Ne0C<5oBv(Ber~g~$Zjkm`E|O^MAkJ+k@kMx$Wq0} zoKc2Ni(Xk{G- zrV7Lf5cUFY+6_NsTo!#nlvBom8KPMCnc*=rNr1FRpkE~?Jx>%-`;#CsvR0BY0O7=p zvqVV%q*~Jdo}*Hyc-Lj-?QxMjbYZD{af|`BH1zNU&mCD>!m*PgZBtQ4Iv1>&c9a#M zQhKL(^ac>lB4S|~6Mhu4ty4H}_2$X)%-NL!bGpcELch#Y>~1uREO?u}Kfn6N#nB7H zags4~rmrq(r2VP!Zc-dlVf+{C)^P7Zwu` zcGA1A3o1L zt%wPnxm7U_${1qo1iv4|6-KI7u}saC?DO0D&~Y3%aft0VX8j0o0WxS@Tv~1l*DwgU zo9DB0Ezp?g-=}MYS|vi)@mwAnw@7fQm*N&wCx0$WG`8s=QsLXjE!)#YVOIOC-b;) zCkFwUzX2IBLT$lW{cIV{)<&T^y@*^CH5_yM7gtxVTp^KQ8X$9-=&Y1U zBGWJbcKzygFICNfHI%}YI7VZ2$8>u{1*&l05UTy1q{n7sR0 z56ML9l>9}O0+P?;BDl30n<1-yVHD2{rJ$3=eFV|OJb8T;*hP?+XN}VfQ4O2dfGS*( zHj_al-nE9BTed%}^!CDbonN@=oL+c6&V~}n+qhA3R*}=yn5r=@>s$=@K7%~IW~8RF z2)+(R2?o@bGwAZ#Tc~=zRZ2q|ehX_71n|?w@D3!_tGhOFlJHhD6Z)&c+y>zJrPUox zO+&lvc5nbQy{w(wo&)BS{(>>N@vHlaeBchvQQ2q1{SJz2pa*CQb%L4-Br~&Uvcw~% zz$^@up4<+4Rkysa3nsWJ*|9%L?>J+e%0D4w9!lA>^U{r(k5@mo0BAZY&Maf& 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 nbYymE_36vb?`Baok=Z5-;20A .swiper-wrapper { + -webkit-transition-timing-function: ease-out; + -moz-transition-timing-function: ease-out; + -ms-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + margin: 0 auto; +} +.swiper-slide { + float: left; +} + +/* IE10 Windows Phone 8 Fixes */ +.swiper-wp8-horizontal { + -ms-touch-action: pan-y; +} +.swiper-wp8-vertical { + -ms-touch-action: pan-x; +} + +/* =============================================================== +Your custom styles, here you need to specify container's and slide's +sizes, pagination, etc. +================================================================*/ +.swiper-container { + /* Specify Swiper's Size: */ + + /*width:200px; + height: 100px;*/ +} +.swiper-slide { + /* Specify Slides's Size: */ + + /*width: 100%; + height: 100%;*/ +} +.swiper-slide-active { + /* Specific active slide styling: */ + +} +.swiper-slide-visible { + /* Specific visible slide styling: */ + +} +/* =============================================================== +Pagination Styles +================================================================*/ +.swiper-pagination-switch { + /* Stylize pagination button: */ + +} +.swiper-active-switch { + /* Specific active button style: */ + +} +.swiper-visible-switch { + /* Specific visible button style: */ + +} diff --git a/assets/html/idangerous.swiper.js b/assets/html/idangerous.swiper.js new file mode 100755 index 0000000..c955821 --- /dev/null +++ b/assets/html/idangerous.swiper.js @@ -0,0 +1,2705 @@ +var Swiper = function (selector, params) { + 'use strict'; + + /*========================= + A little bit dirty but required part for IE8 and old FF support + ===========================*/ + if (document.body.__defineGetter__) { + if (HTMLElement) { + var element = HTMLElement.prototype; + if (element.__defineGetter__) { + element.__defineGetter__('outerHTML', function () { return new XMLSerializer().serializeToString(this); }); + } + } + } + + if (!window.getComputedStyle) { + window.getComputedStyle = function (el, pseudo) { + this.el = el; + this.getPropertyValue = function (prop) { + var re = /(\-([a-z]){1})/g; + if (prop === 'float') prop = 'styleFloat'; + if (re.test(prop)) { + prop = prop.replace(re, function () { + return arguments[2].toUpperCase(); + }); + } + return el.currentStyle[prop] ? el.currentStyle[prop] : null; + }; + return this; + }; + } + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (obj, start) { + for (var i = (start || 0), j = this.length; i < j; i++) { + if (this[i] === obj) { return i; } + } + return -1; + }; + } + if (!document.querySelectorAll) { + if (!window.jQuery) return; + } + function $$(selector, context) { + if (document.querySelectorAll) + return (context || document).querySelectorAll(selector); + else + return jQuery(selector, context); + } + + /*========================= + Check for correct selector + ===========================*/ + if (typeof selector === 'undefined') return; + + if (!(selector.nodeType)) { + if ($$(selector).length === 0) return; + } + + /*========================= + _this + ===========================*/ + var _this = this; + + /*========================= + Default Flags and vars + ===========================*/ + _this.touches = { + start: 0, + startX: 0, + startY: 0, + current: 0, + currentX: 0, + currentY: 0, + diff: 0, + abs: 0 + }; + _this.positions = { + start: 0, + abs: 0, + diff: 0, + current: 0 + }; + _this.times = { + start: 0, + end: 0 + }; + + _this.id = (new Date()).getTime(); + _this.container = (selector.nodeType) ? selector : $$(selector)[0]; + _this.isTouched = false; + _this.isMoved = false; + _this.activeIndex = 0; + _this.centerIndex = 0; + _this.activeLoaderIndex = 0; + _this.activeLoopIndex = 0; + _this.previousIndex = null; + _this.velocity = 0; + _this.snapGrid = []; + _this.slidesGrid = []; + _this.imagesToLoad = []; + _this.imagesLoaded = 0; + _this.wrapperLeft = 0; + _this.wrapperRight = 0; + _this.wrapperTop = 0; + _this.wrapperBottom = 0; + _this.isAndroid = navigator.userAgent.toLowerCase().indexOf('android') >= 0; + var wrapper, slideSize, wrapperSize, direction, isScrolling, containerSize; + + /*========================= + Default Parameters + ===========================*/ + var defaults = { + eventTarget: 'wrapper', // or 'container' + mode : 'horizontal', // or 'vertical' + touchRatio : 1, + speed : 300, + freeMode : false, + freeModeFluid : false, + momentumRatio: 1, + momentumBounce: true, + momentumBounceRatio: 1, + slidesPerView : 1, + slidesPerGroup : 1, + simulateTouch : true, + followFinger : true, + shortSwipes : true, + longSwipesRatio: 0.5, + moveStartThreshold: false, + onlyExternal : false, + createPagination : true, + pagination : false, + paginationElement: 'span', + paginationClickable: false, + paginationAsRange: true, + resistance : true, // or false or 100% + scrollContainer : false, + preventLinks : true, + preventLinksPropagation: false, + noSwiping : false, // or class + noSwipingClass : 'swiper-no-swiping', //:) + initialSlide: 0, + keyboardControl: false, + mousewheelControl : false, + mousewheelControlForceToAxis : false, + useCSS3Transforms : true, + // Autoplay + autoplay: false, + autoplayDisableOnInteraction: true, + autoplayStopOnLast: false, + //Loop mode + loop: false, + loopAdditionalSlides: 0, + //Auto Height + calculateHeight: false, + cssWidthAndHeight: false, + //Images Preloader + updateOnImagesReady : true, + //Form elements + releaseFormElements : true, + //Watch for active slide, useful when use effects on different slide states + watchActiveIndex: false, + //Slides Visibility Fit + visibilityFullFit : false, + //Slides Offset + offsetPxBefore : 0, + offsetPxAfter : 0, + offsetSlidesBefore : 0, + offsetSlidesAfter : 0, + centeredSlides: false, + //Queue callbacks + queueStartCallbacks : false, + queueEndCallbacks : false, + //Auto Resize + autoResize : true, + resizeReInit : false, + //DOMAnimation + DOMAnimation : true, + //Slides Loader + loader: { + slides: [], //array with slides + slidesHTMLType: 'inner', // or 'outer' + surroundGroups: 1, //keep preloaded slides groups around view + logic: 'reload', //or 'change' + loadAllSlides: false + }, + //Namespace + slideElement: 'div', + slideClass: 'swiper-slide', + slideActiveClass: 'swiper-slide-active', + slideVisibleClass: 'swiper-slide-visible', + slideDuplicateClass: 'swiper-slide-duplicate', + wrapperClass: 'swiper-wrapper', + paginationElementClass: 'swiper-pagination-switch', + paginationActiveClass: 'swiper-active-switch', + paginationVisibleClass: 'swiper-visible-switch' + }; + params = params || {}; + for (var prop in defaults) { + if (prop in params && typeof params[prop] === 'object') { + for (var subProp in defaults[prop]) { + if (! (subProp in params[prop])) { + params[prop][subProp] = defaults[prop][subProp]; + } + } + } + else if (! (prop in params)) { + params[prop] = defaults[prop]; + } + } + _this.params = params; + if (params.scrollContainer) { + params.freeMode = true; + params.freeModeFluid = true; + } + if (params.loop) { + params.resistance = '100%'; + } + var isH = params.mode === 'horizontal'; + + /*========================= + Define Touch Events + ===========================*/ + var desktopEvents = ['mousedown', 'mousemove', 'mouseup']; + if (_this.browser.ie10) desktopEvents = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp']; + if (_this.browser.ie11) desktopEvents = ['pointerdown', 'pointermove', 'pointerup']; + + _this.touchEvents = { + touchStart : _this.support.touch || !params.simulateTouch ? 'touchstart' : desktopEvents[0], + touchMove : _this.support.touch || !params.simulateTouch ? 'touchmove' : desktopEvents[1], + touchEnd : _this.support.touch || !params.simulateTouch ? 'touchend' : desktopEvents[2] + }; + + /*========================= + Wrapper + ===========================*/ + for (var i = _this.container.childNodes.length - 1; i >= 0; i--) { + if (_this.container.childNodes[i].className) { + var _wrapperClasses = _this.container.childNodes[i].className.split(/\s+/); + for (var j = 0; j < _wrapperClasses.length; j++) { + if (_wrapperClasses[j] === params.wrapperClass) { + wrapper = _this.container.childNodes[i]; + } + } + } + } + + _this.wrapper = wrapper; + /*========================= + Slide API + ===========================*/ + _this._extendSwiperSlide = function (el) { + el.append = function () { + if (params.loop) { + el.insertAfter(_this.slides.length - _this.loopedSlides); + } + else { + _this.wrapper.appendChild(el); + _this.reInit(); + } + + return el; + }; + el.prepend = function () { + if (params.loop) { + _this.wrapper.insertBefore(el, _this.slides[_this.loopedSlides]); + _this.removeLoopedSlides(); + _this.calcSlides(); + _this.createLoop(); + } + else { + _this.wrapper.insertBefore(el, _this.wrapper.firstChild); + } + _this.reInit(); + return el; + }; + el.insertAfter = function (index) { + if (typeof index === 'undefined') return false; + var beforeSlide; + + if (params.loop) { + beforeSlide = _this.slides[index + 1 + _this.loopedSlides]; + if (beforeSlide) { + _this.wrapper.insertBefore(el, beforeSlide); + } + else { + _this.wrapper.appendChild(el); + } + _this.removeLoopedSlides(); + _this.calcSlides(); + _this.createLoop(); + } + else { + beforeSlide = _this.slides[index + 1]; + _this.wrapper.insertBefore(el, beforeSlide); + } + _this.reInit(); + return el; + }; + el.clone = function () { + return _this._extendSwiperSlide(el.cloneNode(true)); + }; + el.remove = function () { + _this.wrapper.removeChild(el); + _this.reInit(); + }; + el.html = function (html) { + if (typeof html === 'undefined') { + return el.innerHTML; + } + else { + el.innerHTML = html; + return el; + } + }; + el.index = function () { + var index; + for (var i = _this.slides.length - 1; i >= 0; i--) { + if (el === _this.slides[i]) index = i; + } + return index; + }; + el.isActive = function () { + if (el.index() === _this.activeIndex) return true; + else return false; + }; + if (!el.swiperSlideDataStorage) el.swiperSlideDataStorage = {}; + el.getData = function (name) { + return el.swiperSlideDataStorage[name]; + }; + el.setData = function (name, value) { + el.swiperSlideDataStorage[name] = value; + return el; + }; + el.data = function (name, value) { + if (typeof value === 'undefined') { + return el.getAttribute('data-' + name); + } + else { + el.setAttribute('data-' + name, value); + return el; + } + }; + el.getWidth = function (outer) { + return _this.h.getWidth(el, outer); + }; + el.getHeight = function (outer) { + return _this.h.getHeight(el, outer); + }; + el.getOffset = function () { + return _this.h.getOffset(el); + }; + return el; + }; + + //Calculate information about number of slides + _this.calcSlides = function (forceCalcSlides) { + var oldNumber = _this.slides ? _this.slides.length : false; + _this.slides = []; + _this.displaySlides = []; + for (var i = 0; i < _this.wrapper.childNodes.length; i++) { + if (_this.wrapper.childNodes[i].className) { + var _className = _this.wrapper.childNodes[i].className; + var _slideClasses = _className.split(/\s+/); + for (var j = 0; j < _slideClasses.length; j++) { + if (_slideClasses[j] === params.slideClass) { + _this.slides.push(_this.wrapper.childNodes[i]); + } + } + } + } + for (i = _this.slides.length - 1; i >= 0; i--) { + _this._extendSwiperSlide(_this.slides[i]); + } + if (oldNumber === false) return; + if (oldNumber !== _this.slides.length || forceCalcSlides) { + + // Number of slides has been changed + removeSlideEvents(); + addSlideEvents(); + _this.updateActiveSlide(); + if (_this.params.pagination) _this.createPagination(); + _this.callPlugins('numberOfSlidesChanged'); + } + }; + + //Create Slide + _this.createSlide = function (html, slideClassList, el) { + slideClassList = slideClassList || _this.params.slideClass; + el = el || params.slideElement; + var newSlide = document.createElement(el); + newSlide.innerHTML = html || ''; + newSlide.className = slideClassList; + return _this._extendSwiperSlide(newSlide); + }; + + //Append Slide + _this.appendSlide = function (html, slideClassList, el) { + if (!html) return; + if (html.nodeType) { + return _this._extendSwiperSlide(html).append(); + } + else { + return _this.createSlide(html, slideClassList, el).append(); + } + }; + _this.prependSlide = function (html, slideClassList, el) { + if (!html) return; + if (html.nodeType) { + return _this._extendSwiperSlide(html).prepend(); + } + else { + return _this.createSlide(html, slideClassList, el).prepend(); + } + }; + _this.insertSlideAfter = function (index, html, slideClassList, el) { + if (typeof index === 'undefined') return false; + if (html.nodeType) { + return _this._extendSwiperSlide(html).insertAfter(index); + } + else { + return _this.createSlide(html, slideClassList, el).insertAfter(index); + } + }; + _this.removeSlide = function (index) { + if (_this.slides[index]) { + if (params.loop) { + if (!_this.slides[index + _this.loopedSlides]) return false; + _this.slides[index + _this.loopedSlides].remove(); + _this.removeLoopedSlides(); + _this.calcSlides(); + _this.createLoop(); + } + else _this.slides[index].remove(); + return true; + } + else return false; + }; + _this.removeLastSlide = function () { + if (_this.slides.length > 0) { + if (params.loop) { + _this.slides[_this.slides.length - 1 - _this.loopedSlides].remove(); + _this.removeLoopedSlides(); + _this.calcSlides(); + _this.createLoop(); + } + else _this.slides[_this.slides.length - 1].remove(); + return true; + } + else { + return false; + } + }; + _this.removeAllSlides = function () { + for (var i = _this.slides.length - 1; i >= 0; i--) { + _this.slides[i].remove(); + } + }; + _this.getSlide = function (index) { + return _this.slides[index]; + }; + _this.getLastSlide = function () { + return _this.slides[_this.slides.length - 1]; + }; + _this.getFirstSlide = function () { + return _this.slides[0]; + }; + + //Currently Active Slide + _this.activeSlide = function () { + return _this.slides[_this.activeIndex]; + }; + + /*========================= + Wrapper for Callbacks : Allows additive callbacks via function arrays + ===========================*/ + _this.fireCallback = function () { + var callback = arguments[0]; + if (Object.prototype.toString.call(callback) === '[object Array]') { + for (var i = 0; i < callback.length; i++) { + if (typeof callback[i] === 'function') { + callback[i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + } + } else if (Object.prototype.toString.call(callback) === '[object String]') { + if (params['on' + callback]) _this.fireCallback(params['on' + callback]); + } else { + callback(arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]); + } + }; + function isArray(obj) { + if (Object.prototype.toString.apply(obj) === '[object Array]') return true; + return false; + } + + /** + * Allows user to add callbacks, rather than replace them + * @param callback + * @param func + * @return {*} + */ + _this.addCallback = function (callback, func) { + var _this = this, tempFunc; + if (_this.params['on' + callback]) { + if (isArray(this.params['on' + callback])) { + return this.params['on' + callback].push(func); + } else if (typeof this.params['on' + callback] === 'function') { + tempFunc = this.params['on' + callback]; + this.params['on' + callback] = []; + this.params['on' + callback].push(tempFunc); + return this.params['on' + callback].push(func); + } + } else { + this.params['on' + callback] = []; + return this.params['on' + callback].push(func); + } + }; + _this.removeCallbacks = function (callback) { + if (_this.params['on' + callback]) { + _this.params['on' + callback] = null; + } + }; + + /*========================= + Plugins API + ===========================*/ + var _plugins = []; + for (var plugin in _this.plugins) { + if (params[plugin]) { + var p = _this.plugins[plugin](_this, params[plugin]); + if (p) _plugins.push(p); + } + } + _this.callPlugins = function (method, args) { + if (!args) args = {}; + for (var i = 0; i < _plugins.length; i++) { + if (method in _plugins[i]) { + _plugins[i][method](args); + } + } + }; + + /*========================= + Windows Phone 8 Fix + ===========================*/ + if ((_this.browser.ie10 || _this.browser.ie11) && !params.onlyExternal) { + _this.wrapper.classList.add('swiper-wp8-' + (isH ? 'horizontal' : 'vertical')); + } + + /*========================= + Free Mode Class + ===========================*/ + if (params.freeMode) { + _this.container.className += ' swiper-free-mode'; + } + + /*================================================== + Init/Re-init/Resize Fix + ====================================================*/ + _this.initialized = false; + _this.init = function (force, forceCalcSlides) { + var _width = _this.h.getWidth(_this.container); + var _height = _this.h.getHeight(_this.container); + if (_width === _this.width && _height === _this.height && !force) return; + _this.width = _width; + _this.height = _height; + + var slideWidth, slideHeight, slideMaxHeight, wrapperWidth, wrapperHeight, slideLeft; + var i; // loop index variable to avoid JSHint W004 / W038 + containerSize = isH ? _width : _height; + var wrapper = _this.wrapper; + + if (force) { + _this.calcSlides(forceCalcSlides); + } + + if (params.slidesPerView === 'auto') { + //Auto mode + var slidesWidth = 0; + var slidesHeight = 0; + + //Unset Styles + if (params.slidesOffset > 0) { + wrapper.style.paddingLeft = ''; + wrapper.style.paddingRight = ''; + wrapper.style.paddingTop = ''; + wrapper.style.paddingBottom = ''; + } + wrapper.style.width = ''; + wrapper.style.height = ''; + if (params.offsetPxBefore > 0) { + if (isH) _this.wrapperLeft = params.offsetPxBefore; + else _this.wrapperTop = params.offsetPxBefore; + } + if (params.offsetPxAfter > 0) { + if (isH) _this.wrapperRight = params.offsetPxAfter; + else _this.wrapperBottom = params.offsetPxAfter; + } + + if (params.centeredSlides) { + if (isH) { + _this.wrapperLeft = (containerSize - this.slides[0].getWidth(true)) / 2; + _this.wrapperRight = (containerSize - _this.slides[_this.slides.length - 1].getWidth(true)) / 2; + } + else { + _this.wrapperTop = (containerSize - _this.slides[0].getHeight(true)) / 2; + _this.wrapperBottom = (containerSize - _this.slides[_this.slides.length - 1].getHeight(true)) / 2; + } + } + + if (isH) { + if (_this.wrapperLeft >= 0) wrapper.style.paddingLeft = _this.wrapperLeft + 'px'; + if (_this.wrapperRight >= 0) wrapper.style.paddingRight = _this.wrapperRight + 'px'; + } + else { + if (_this.wrapperTop >= 0) wrapper.style.paddingTop = _this.wrapperTop + 'px'; + if (_this.wrapperBottom >= 0) wrapper.style.paddingBottom = _this.wrapperBottom + 'px'; + } + slideLeft = 0; + var centeredSlideLeft = 0; + _this.snapGrid = []; + _this.slidesGrid = []; + + slideMaxHeight = 0; + for (i = 0; i < _this.slides.length; i++) { + slideWidth = _this.slides[i].getWidth(true); + slideHeight = _this.slides[i].getHeight(true); + if (params.calculateHeight) { + slideMaxHeight = Math.max(slideMaxHeight, slideHeight); + } + var _slideSize = isH ? slideWidth : slideHeight; + if (params.centeredSlides) { + var nextSlideWidth = i === _this.slides.length - 1 ? 0 : _this.slides[i + 1].getWidth(true); + var nextSlideHeight = i === _this.slides.length - 1 ? 0 : _this.slides[i + 1].getHeight(true); + var nextSlideSize = isH ? nextSlideWidth : nextSlideHeight; + if (_slideSize > containerSize) { + for (var j = 0; j <= Math.floor(_slideSize / (containerSize + _this.wrapperLeft)); j++) { + if (j === 0) _this.snapGrid.push(slideLeft + _this.wrapperLeft); + else _this.snapGrid.push(slideLeft + _this.wrapperLeft + containerSize * j); + } + _this.slidesGrid.push(slideLeft + _this.wrapperLeft); + } + else { + _this.snapGrid.push(centeredSlideLeft); + _this.slidesGrid.push(centeredSlideLeft); + } + + centeredSlideLeft += _slideSize / 2 + nextSlideSize / 2; + + } + else { + if (_slideSize > containerSize) { + for (var k = 0; k <= Math.floor(_slideSize / containerSize); k++) { + _this.snapGrid.push(slideLeft + containerSize * k); + } + } + else { + _this.snapGrid.push(slideLeft); + } + _this.slidesGrid.push(slideLeft); + } + + slideLeft += _slideSize; + + slidesWidth += slideWidth; + slidesHeight += slideHeight; + } + if (params.calculateHeight) _this.height = slideMaxHeight; + if (isH) { + wrapperSize = slidesWidth + _this.wrapperRight + _this.wrapperLeft; + wrapper.style.width = (slidesWidth) + 'px'; + wrapper.style.height = (_this.height) + 'px'; + } + else { + wrapperSize = slidesHeight + _this.wrapperTop + _this.wrapperBottom; + wrapper.style.width = (_this.width) + 'px'; + wrapper.style.height = (slidesHeight) + 'px'; + } + + } + else if (params.scrollContainer) { + //Scroll Container + wrapper.style.width = ''; + wrapper.style.height = ''; + wrapperWidth = _this.slides[0].getWidth(true); + wrapperHeight = _this.slides[0].getHeight(true); + wrapperSize = isH ? wrapperWidth : wrapperHeight; + wrapper.style.width = wrapperWidth + 'px'; + wrapper.style.height = wrapperHeight + 'px'; + slideSize = isH ? wrapperWidth : wrapperHeight; + + } + else { + //For usual slides + if (params.calculateHeight) { + slideMaxHeight = 0; + wrapperHeight = 0; + //ResetWrapperSize + if (!isH) _this.container.style.height = ''; + wrapper.style.height = ''; + + for (i = 0; i < _this.slides.length; i++) { + //ResetSlideSize + _this.slides[i].style.height = ''; + slideMaxHeight = Math.max(_this.slides[i].getHeight(true), slideMaxHeight); + if (!isH) wrapperHeight += _this.slides[i].getHeight(true); + } + slideHeight = slideMaxHeight; + _this.height = slideHeight; + + if (isH) wrapperHeight = slideHeight; + else { + containerSize = slideHeight; + _this.container.style.height = containerSize + 'px'; + } + } + else { + slideHeight = isH ? _this.height : _this.height / params.slidesPerView; + wrapperHeight = isH ? _this.height : _this.slides.length * slideHeight; + } + slideWidth = isH ? _this.width / params.slidesPerView : _this.width; + wrapperWidth = isH ? _this.slides.length * slideWidth : _this.width; + slideSize = isH ? slideWidth : slideHeight; + + if (params.offsetSlidesBefore > 0) { + if (isH) _this.wrapperLeft = slideSize * params.offsetSlidesBefore; + else _this.wrapperTop = slideSize * params.offsetSlidesBefore; + } + if (params.offsetSlidesAfter > 0) { + if (isH) _this.wrapperRight = slideSize * params.offsetSlidesAfter; + else _this.wrapperBottom = slideSize * params.offsetSlidesAfter; + } + if (params.offsetPxBefore > 0) { + if (isH) _this.wrapperLeft = params.offsetPxBefore; + else _this.wrapperTop = params.offsetPxBefore; + } + if (params.offsetPxAfter > 0) { + if (isH) _this.wrapperRight = params.offsetPxAfter; + else _this.wrapperBottom = params.offsetPxAfter; + } + if (params.centeredSlides) { + if (isH) { + _this.wrapperLeft = (containerSize - slideSize) / 2; + _this.wrapperRight = (containerSize - slideSize) / 2; + } + else { + _this.wrapperTop = (containerSize - slideSize) / 2; + _this.wrapperBottom = (containerSize - slideSize) / 2; + } + } + if (isH) { + if (_this.wrapperLeft > 0) wrapper.style.paddingLeft = _this.wrapperLeft + 'px'; + if (_this.wrapperRight > 0) wrapper.style.paddingRight = _this.wrapperRight + 'px'; + } + else { + if (_this.wrapperTop > 0) wrapper.style.paddingTop = _this.wrapperTop + 'px'; + if (_this.wrapperBottom > 0) wrapper.style.paddingBottom = _this.wrapperBottom + 'px'; + } + + wrapperSize = isH ? wrapperWidth + _this.wrapperRight + _this.wrapperLeft : wrapperHeight + _this.wrapperTop + _this.wrapperBottom; + if (!params.cssWidthAndHeight) { + if (parseFloat(wrapperWidth) > 0) { + wrapper.style.width = wrapperWidth + 'px'; + } + if (parseFloat(wrapperHeight) > 0) { + wrapper.style.height = wrapperHeight + 'px'; + } + } + slideLeft = 0; + _this.snapGrid = []; + _this.slidesGrid = []; + for (i = 0; i < _this.slides.length; i++) { + _this.snapGrid.push(slideLeft); + _this.slidesGrid.push(slideLeft); + slideLeft += slideSize; + if (!params.cssWidthAndHeight) { + if (parseFloat(slideWidth) > 0) { + _this.slides[i].style.width = slideWidth + 'px'; + } + if (parseFloat(slideHeight) > 0) { + _this.slides[i].style.height = slideHeight + 'px'; + } + } + } + + } + + if (!_this.initialized) { + _this.callPlugins('onFirstInit'); + if (params.onFirstInit) _this.fireCallback(params.onFirstInit, _this); + } + else { + _this.callPlugins('onInit'); + if (params.onInit) _this.fireCallback(params.onInit, _this); + } + _this.initialized = true; + }; + + _this.reInit = function (forceCalcSlides) { + _this.init(true, forceCalcSlides); + }; + + _this.resizeFix = function (reInit) { + _this.callPlugins('beforeResizeFix'); + + _this.init(params.resizeReInit || reInit); + + // swipe to active slide in fixed mode + if (!params.freeMode) { + _this.swipeTo((params.loop ? _this.activeLoopIndex : _this.activeIndex), 0, false); + // Fix autoplay + if (params.autoplay) { + if (_this.support.transitions && typeof autoplayTimeoutId !== 'undefined') { + if (typeof autoplayTimeoutId !== 'undefined') { + clearTimeout(autoplayTimeoutId); + autoplayTimeoutId = undefined; + _this.startAutoplay(); + } + } + else { + if (typeof autoplayIntervalId !== 'undefined') { + clearInterval(autoplayIntervalId); + autoplayIntervalId = undefined; + _this.startAutoplay(); + } + } + } + } + // move wrapper to the beginning in free mode + else if (_this.getWrapperTranslate() < -maxWrapperPosition()) { + _this.setWrapperTransition(0); + _this.setWrapperTranslate(-maxWrapperPosition()); + } + + _this.callPlugins('afterResizeFix'); + }; + + /*========================================== + Max and Min Positions + ============================================*/ + function maxWrapperPosition() { + var a = (wrapperSize - containerSize); + if (params.freeMode) { + a = wrapperSize - containerSize; + } + // if (params.loop) a -= containerSize; + if (params.slidesPerView > _this.slides.length) a = 0; + if (a < 0) a = 0; + return a; + } + function minWrapperPosition() { + var a = 0; + // if (params.loop) a = containerSize; + return a; + } + + /*========================================== + Event Listeners + ============================================*/ + function initEvents() { + var bind = _this.h.addEventListener; + var eventTarget = params.eventTarget === 'wrapper' ? _this.wrapper : _this.container; + //Touch Events + if (! (_this.browser.ie10 || _this.browser.ie11)) { + if (_this.support.touch) { + bind(eventTarget, 'touchstart', onTouchStart); + bind(eventTarget, 'touchmove', onTouchMove); + bind(eventTarget, 'touchend', onTouchEnd); + } + if (params.simulateTouch) { + bind(eventTarget, 'mousedown', onTouchStart); + bind(document, 'mousemove', onTouchMove); + bind(document, 'mouseup', onTouchEnd); + } + } + else { + bind(eventTarget, _this.touchEvents.touchStart, onTouchStart); + bind(document, _this.touchEvents.touchMove, onTouchMove); + bind(document, _this.touchEvents.touchEnd, onTouchEnd); + } + + //Resize Event + if (params.autoResize) { + bind(window, 'resize', _this.resizeFix); + } + //Slide Events + addSlideEvents(); + //Mousewheel + _this._wheelEvent = false; + if (params.mousewheelControl) { + if (document.onmousewheel !== undefined) { + _this._wheelEvent = 'mousewheel'; + } + try { + new WheelEvent('wheel'); + _this._wheelEvent = 'wheel'; + } catch (e) {} + if (!_this._wheelEvent) { + _this._wheelEvent = 'DOMMouseScroll'; + } + + if (_this._wheelEvent) { + bind(_this.container, _this._wheelEvent, handleMousewheel); + } + } + + //Keyboard + function _loadImage(src) { + var image = new Image(); + image.onload = function () { + _this.imagesLoaded++; + if (_this.imagesLoaded === _this.imagesToLoad.length) { + _this.reInit(); + if (params.onImagesReady) _this.fireCallback(params.onImagesReady, _this); + } + }; + image.src = src; + } + + if (params.keyboardControl) { + bind(document, 'keydown', handleKeyboardKeys); + } + if (params.updateOnImagesReady) { + _this.imagesToLoad = $$('img', _this.container); + + for (var i = 0; i < _this.imagesToLoad.length; i++) { + _loadImage(_this.imagesToLoad[i].getAttribute('src')); + } + } + } + + //Remove Event Listeners + _this.destroy = function () { + var unbind = _this.h.removeEventListener; + var eventTarget = params.eventTarget === 'wrapper' ? _this.wrapper : _this.container; + //Touch Events + if (! (_this.browser.ie10 || _this.browser.ie11)) { + if (_this.support.touch) { + unbind(eventTarget, 'touchstart', onTouchStart); + unbind(eventTarget, 'touchmove', onTouchMove); + unbind(eventTarget, 'touchend', onTouchEnd); + } + if (params.simulateTouch) { + unbind(eventTarget, 'mousedown', onTouchStart); + unbind(document, 'mousemove', onTouchMove); + unbind(document, 'mouseup', onTouchEnd); + } + } + else { + unbind(eventTarget, _this.touchEvents.touchStart, onTouchStart); + unbind(document, _this.touchEvents.touchMove, onTouchMove); + unbind(document, _this.touchEvents.touchEnd, onTouchEnd); + } + + //Resize Event + if (params.autoResize) { + unbind(window, 'resize', _this.resizeFix); + } + + //Init Slide Events + removeSlideEvents(); + + //Pagination + if (params.paginationClickable) { + removePaginationEvents(); + } + + //Mousewheel + if (params.mousewheelControl && _this._wheelEvent) { + unbind(_this.container, _this._wheelEvent, handleMousewheel); + } + + //Keyboard + if (params.keyboardControl) { + unbind(document, 'keydown', handleKeyboardKeys); + } + + //Stop autoplay + if (params.autoplay) { + _this.stopAutoplay(); + } + _this.callPlugins('onDestroy'); + + //Destroy variable + _this = null; + }; + + function addSlideEvents() { + var bind = _this.h.addEventListener, + i; + + //Prevent Links Events + if (params.preventLinks) { + var links = $$('a', _this.container); + for (i = 0; i < links.length; i++) { + bind(links[i], 'click', preventClick); + } + } + //Release Form Elements + if (params.releaseFormElements) { + var formElements = $$('input, textarea, select', _this.container); + for (i = 0; i < formElements.length; i++) { + bind(formElements[i], _this.touchEvents.touchStart, releaseForms, true); + } + } + + //Slide Clicks & Touches + if (params.onSlideClick) { + for (i = 0; i < _this.slides.length; i++) { + bind(_this.slides[i], 'click', slideClick); + } + } + if (params.onSlideTouch) { + for (i = 0; i < _this.slides.length; i++) { + bind(_this.slides[i], _this.touchEvents.touchStart, slideTouch); + } + } + } + function removeSlideEvents() { + var unbind = _this.h.removeEventListener, + i; + + //Slide Clicks & Touches + if (params.onSlideClick) { + for (i = 0; i < _this.slides.length; i++) { + unbind(_this.slides[i], 'click', slideClick); + } + } + if (params.onSlideTouch) { + for (i = 0; i < _this.slides.length; i++) { + unbind(_this.slides[i], _this.touchEvents.touchStart, slideTouch); + } + } + //Release Form Elements + if (params.releaseFormElements) { + var formElements = $$('input, textarea, select', _this.container); + for (i = 0; i < formElements.length; i++) { + unbind(formElements[i], _this.touchEvents.touchStart, releaseForms, true); + } + } + //Prevent Links Events + if (params.preventLinks) { + var links = $$('a', _this.container); + for (i = 0; i < links.length; i++) { + unbind(links[i], 'click', preventClick); + } + } + } + /*========================================== + Keyboard Control + ============================================*/ + function handleKeyboardKeys(e) { + var kc = e.keyCode || e.charCode; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) return; + if (kc === 37 || kc === 39 || kc === 38 || kc === 40) { + var inView = false; + //Check that swiper should be inside of visible area of window + var swiperOffset = _this.h.getOffset(_this.container); + var scrollLeft = _this.h.windowScroll().left; + var scrollTop = _this.h.windowScroll().top; + var windowWidth = _this.h.windowWidth(); + var windowHeight = _this.h.windowHeight(); + var swiperCoord = [ + [swiperOffset.left, swiperOffset.top], + [swiperOffset.left + _this.width, swiperOffset.top], + [swiperOffset.left, swiperOffset.top + _this.height], + [swiperOffset.left + _this.width, swiperOffset.top + _this.height] + ]; + for (var i = 0; i < swiperCoord.length; i++) { + var point = swiperCoord[i]; + if ( + point[0] >= scrollLeft && point[0] <= scrollLeft + windowWidth && + point[1] >= scrollTop && point[1] <= scrollTop + windowHeight + ) { + inView = true; + } + + } + if (!inView) return; + } + if (isH) { + if (kc === 37 || kc === 39) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if (kc === 39) _this.swipeNext(); + if (kc === 37) _this.swipePrev(); + } + else { + if (kc === 38 || kc === 40) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + } + if (kc === 40) _this.swipeNext(); + if (kc === 38) _this.swipePrev(); + } + } + + /*========================================== + Mousewheel Control + ============================================*/ + var lastScrollTime = (new Date()).getTime(); + function handleMousewheel(e) { + var we = _this._wheelEvent; + var delta = 0; + + //Opera & IE + if (e.detail) delta = -e.detail; + //WebKits + else if (we === 'mousewheel') { + if (params.mousewheelControlForceToAxis) { + if (isH) { + if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) delta = e.wheelDeltaX; + else return; + } + else { + if (Math.abs(e.wheelDeltaY) > Math.abs(e.wheelDeltaX)) delta = e.wheelDeltaY; + else return; + } + } + else { + delta = e.wheelDelta; + } + } + //Old FireFox + else if (we === 'DOMMouseScroll') delta = -e.detail; + //New FireFox + else if (we === 'wheel') { + if (params.mousewheelControlForceToAxis) { + if (isH) { + if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) delta = -e.deltaX; + else return; + } + else { + if (Math.abs(e.deltaY) > Math.abs(e.deltaX)) delta = -e.deltaY; + else return; + } + } + else { + delta = Math.abs(e.deltaX) > Math.abs(e.deltaY) ? - e.deltaX : - e.deltaY; + } + } + + if (!params.freeMode) { + if ((new Date()).getTime() - lastScrollTime > 60) { + if (delta < 0) _this.swipeNext(); + else _this.swipePrev(); + } + lastScrollTime = (new Date()).getTime(); + + } + else { + //Freemode or scrollContainer: + var position = _this.getWrapperTranslate() + delta; + + if (position > 0) position = 0; + if (position < -maxWrapperPosition()) position = -maxWrapperPosition(); + + _this.setWrapperTransition(0); + _this.setWrapperTranslate(position); + _this.updateActiveSlide(position); + + // Return page scroll on edge positions + if (position === 0 || position === -maxWrapperPosition()) return; + } + if (params.autoplay) _this.stopAutoplay(true); + + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + return false; + } + + /*========================= + Grab Cursor + ===========================*/ + if (params.grabCursor) { + var containerStyle = _this.container.style; + containerStyle.cursor = 'move'; + containerStyle.cursor = 'grab'; + containerStyle.cursor = '-moz-grab'; + containerStyle.cursor = '-webkit-grab'; + } + + /*========================= + Slides Events Handlers + ===========================*/ + + _this.allowSlideClick = true; + function slideClick(event) { + if (_this.allowSlideClick) { + setClickedSlide(event); + _this.fireCallback(params.onSlideClick, _this, event); + } + } + + function slideTouch(event) { + setClickedSlide(event); + _this.fireCallback(params.onSlideTouch, _this, event); + } + + function setClickedSlide(event) { + + // IE 6-8 support + if (!event.currentTarget) { + var element = event.srcElement; + do { + if (element.className.indexOf(params.slideClass) > -1) { + break; + } + element = element.parentNode; + } while (element); + _this.clickedSlide = element; + } + else { + _this.clickedSlide = event.currentTarget; + } + + _this.clickedSlideIndex = _this.slides.indexOf(_this.clickedSlide); + _this.clickedSlideLoopIndex = _this.clickedSlideIndex - (_this.loopedSlides || 0); + } + + _this.allowLinks = true; + function preventClick(e) { + if (!_this.allowLinks) { + if (e.preventDefault) e.preventDefault(); + else e.returnValue = false; + if (params.preventLinksPropagation && 'stopPropagation' in e) { + e.stopPropagation(); + } + return false; + } + } + function releaseForms(e) { + if (e.stopPropagation) e.stopPropagation(); + else e.returnValue = false; + return false; + + } + + /*================================================== + Event Handlers + ====================================================*/ + var isTouchEvent = false; + var allowThresholdMove; + var allowMomentumBounce = true; + function onTouchStart(event) { + if (params.preventLinks) _this.allowLinks = true; + //Exit if slider is already was touched + if (_this.isTouched || params.onlyExternal) { + return false; + } + + if (params.noSwiping && (event.target || event.srcElement) && noSwipingSlide(event.target || event.srcElement)) return false; + allowMomentumBounce = false; + //Check For Nested Swipers + _this.isTouched = true; + isTouchEvent = event.type === 'touchstart'; + + if (!isTouchEvent || event.targetTouches.length === 1) { + _this.callPlugins('onTouchStartBegin'); + + if (!isTouchEvent && !_this.isAndroid) { + if (event.preventDefault) event.preventDefault(); + else event.returnValue = false; + } + + var pageX = isTouchEvent ? event.targetTouches[0].pageX : (event.pageX || event.clientX); + var pageY = isTouchEvent ? event.targetTouches[0].pageY : (event.pageY || event.clientY); + + //Start Touches to check the scrolling + _this.touches.startX = _this.touches.currentX = pageX; + _this.touches.startY = _this.touches.currentY = pageY; + + _this.touches.start = _this.touches.current = isH ? pageX : pageY; + + //Set Transition Time to 0 + _this.setWrapperTransition(0); + + //Get Start Translate Position + _this.positions.start = _this.positions.current = _this.getWrapperTranslate(); + + //Set Transform + _this.setWrapperTranslate(_this.positions.start); + + //TouchStartTime + _this.times.start = (new Date()).getTime(); + + //Unset Scrolling + isScrolling = undefined; + + //Set Treshold + if (params.moveStartThreshold > 0) { + allowThresholdMove = false; + } + + //CallBack + if (params.onTouchStart) _this.fireCallback(params.onTouchStart, _this); + _this.callPlugins('onTouchStartEnd'); + + } + } + var velocityPrevPosition, velocityPrevTime; + function onTouchMove(event) { + // If slider is not touched - exit + if (!_this.isTouched || params.onlyExternal) return; + if (isTouchEvent && event.type === 'mousemove') return; + + var pageX = isTouchEvent ? event.targetTouches[0].pageX : (event.pageX || event.clientX); + var pageY = isTouchEvent ? event.targetTouches[0].pageY : (event.pageY || event.clientY); + + //check for scrolling + if (typeof isScrolling === 'undefined' && isH) { + isScrolling = !!(isScrolling || Math.abs(pageY - _this.touches.startY) > Math.abs(pageX - _this.touches.startX)); + } + if (typeof isScrolling === 'undefined' && !isH) { + isScrolling = !!(isScrolling || Math.abs(pageY - _this.touches.startY) < Math.abs(pageX - _this.touches.startX)); + } + if (isScrolling) { + _this.isTouched = false; + return; + } + + //Check For Nested Swipers + if (event.assignedToSwiper) { + _this.isTouched = false; + return; + } + event.assignedToSwiper = true; + + //Block inner links + if (params.preventLinks) { + _this.allowLinks = false; + } + if (params.onSlideClick) { + _this.allowSlideClick = false; + } + + //Stop AutoPlay if exist + if (params.autoplay) { + _this.stopAutoplay(true); + } + if (!isTouchEvent || event.touches.length === 1) { + + //Moved Flag + if (!_this.isMoved) { + _this.callPlugins('onTouchMoveStart'); + + if (params.loop) { + _this.fixLoop(); + _this.positions.start = _this.getWrapperTranslate(); + } + if (params.onTouchMoveStart) _this.fireCallback(params.onTouchMoveStart, _this); + } + _this.isMoved = true; + + // cancel event + if (event.preventDefault) event.preventDefault(); + else event.returnValue = false; + + _this.touches.current = isH ? pageX : pageY; + + _this.positions.current = (_this.touches.current - _this.touches.start) * params.touchRatio + _this.positions.start; + + //Resistance Callbacks + if (_this.positions.current > 0 && params.onResistanceBefore) { + _this.fireCallback(params.onResistanceBefore, _this, _this.positions.current); + } + if (_this.positions.current < -maxWrapperPosition() && params.onResistanceAfter) { + _this.fireCallback(params.onResistanceAfter, _this, Math.abs(_this.positions.current + maxWrapperPosition())); + } + //Resistance + if (params.resistance && params.resistance !== '100%') { + var resistance; + //Resistance for Negative-Back sliding + if (_this.positions.current > 0) { + resistance = 1 - _this.positions.current / containerSize / 2; + if (resistance < 0.5) + _this.positions.current = (containerSize / 2); + else + _this.positions.current = _this.positions.current * resistance; + } + //Resistance for After-End Sliding + if (_this.positions.current < -maxWrapperPosition()) { + + var diff = (_this.touches.current - _this.touches.start) * params.touchRatio + (maxWrapperPosition() + _this.positions.start); + resistance = (containerSize + diff) / (containerSize); + var newPos = _this.positions.current - diff * (1 - resistance) / 2; + var stopPos = -maxWrapperPosition() - containerSize / 2; + + if (newPos < stopPos || resistance <= 0) + _this.positions.current = stopPos; + else + _this.positions.current = newPos; + } + } + if (params.resistance && params.resistance === '100%') { + //Resistance for Negative-Back sliding + if (_this.positions.current > 0 && !(params.freeMode && !params.freeModeFluid)) { + _this.positions.current = 0; + } + //Resistance for After-End Sliding + if (_this.positions.current < -maxWrapperPosition() && !(params.freeMode && !params.freeModeFluid)) { + _this.positions.current = -maxWrapperPosition(); + } + } + //Move Slides + if (!params.followFinger) return; + + if (!params.moveStartThreshold) { + _this.setWrapperTranslate(_this.positions.current); + } + else { + if (Math.abs(_this.touches.current - _this.touches.start) > params.moveStartThreshold || allowThresholdMove) { + if (!allowThresholdMove) { + allowThresholdMove = true; + _this.touches.start = _this.touches.current; + return; + } + _this.setWrapperTranslate(_this.positions.current); + } + else { + _this.positions.current = _this.positions.start; + } + } + + if (params.freeMode || params.watchActiveIndex) { + _this.updateActiveSlide(_this.positions.current); + } + + //Grab Cursor + if (params.grabCursor) { + _this.container.style.cursor = 'move'; + _this.container.style.cursor = 'grabbing'; + _this.container.style.cursor = '-moz-grabbin'; + _this.container.style.cursor = '-webkit-grabbing'; + } + //Velocity + if (!velocityPrevPosition) velocityPrevPosition = _this.touches.current; + if (!velocityPrevTime) velocityPrevTime = (new Date()).getTime(); + _this.velocity = (_this.touches.current - velocityPrevPosition) / ((new Date()).getTime() - velocityPrevTime) / 2; + if (Math.abs(_this.touches.current - velocityPrevPosition) < 2) _this.velocity = 0; + velocityPrevPosition = _this.touches.current; + velocityPrevTime = (new Date()).getTime(); + //Callbacks + _this.callPlugins('onTouchMoveEnd'); + if (params.onTouchMove) _this.fireCallback(params.onTouchMove, _this); + + return false; + } + } + function onTouchEnd(event) { + //Check For scrolling + if (isScrolling) { + _this.swipeReset(); + } + // If slider is not touched exit + if (params.onlyExternal || !_this.isTouched) return; + _this.isTouched = false; + + //Return Grab Cursor + if (params.grabCursor) { + _this.container.style.cursor = 'move'; + _this.container.style.cursor = 'grab'; + _this.container.style.cursor = '-moz-grab'; + _this.container.style.cursor = '-webkit-grab'; + } + + //Check for Current Position + if (!_this.positions.current && _this.positions.current !== 0) { + _this.positions.current = _this.positions.start; + } + + //For case if slider touched but not moved + if (params.followFinger) { + _this.setWrapperTranslate(_this.positions.current); + } + + // TouchEndTime + _this.times.end = (new Date()).getTime(); + + //Difference + _this.touches.diff = _this.touches.current - _this.touches.start; + _this.touches.abs = Math.abs(_this.touches.diff); + + _this.positions.diff = _this.positions.current - _this.positions.start; + _this.positions.abs = Math.abs(_this.positions.diff); + + var diff = _this.positions.diff; + var diffAbs = _this.positions.abs; + var timeDiff = _this.times.end - _this.times.start; + + if (diffAbs < 5 && (timeDiff) < 300 && _this.allowLinks === false) { + if (!params.freeMode && diffAbs !== 0) _this.swipeReset(); + //Release inner links + if (params.preventLinks) { + _this.allowLinks = true; + } + if (params.onSlideClick) { + _this.allowSlideClick = true; + } + } + + setTimeout(function () { + //Release inner links + if (params.preventLinks) { + _this.allowLinks = true; + } + if (params.onSlideClick) { + _this.allowSlideClick = true; + } + }, 100); + + var maxPosition = maxWrapperPosition(); + + //Not moved or Prevent Negative Back Sliding/After-End Sliding + if (!_this.isMoved && params.freeMode) { + _this.isMoved = false; + if (params.onTouchEnd) _this.fireCallback(params.onTouchEnd, _this); + _this.callPlugins('onTouchEnd'); + return; + } + if (!_this.isMoved || _this.positions.current > 0 || _this.positions.current < -maxPosition) { + _this.swipeReset(); + if (params.onTouchEnd) _this.fireCallback(params.onTouchEnd, _this); + _this.callPlugins('onTouchEnd'); + return; + } + + _this.isMoved = false; + + //Free Mode + if (params.freeMode) { + if (params.freeModeFluid) { + var momentumDuration = 1000 * params.momentumRatio; + var momentumDistance = _this.velocity * momentumDuration; + var newPosition = _this.positions.current + momentumDistance; + var doBounce = false; + var afterBouncePosition; + var bounceAmount = Math.abs(_this.velocity) * 20 * params.momentumBounceRatio; + if (newPosition < -maxPosition) { + if (params.momentumBounce && _this.support.transitions) { + if (newPosition + maxPosition < -bounceAmount) newPosition = -maxPosition - bounceAmount; + afterBouncePosition = -maxPosition; + doBounce = true; + allowMomentumBounce = true; + } + else newPosition = -maxPosition; + } + if (newPosition > 0) { + if (params.momentumBounce && _this.support.transitions) { + if (newPosition > bounceAmount) newPosition = bounceAmount; + afterBouncePosition = 0; + doBounce = true; + allowMomentumBounce = true; + } + else newPosition = 0; + } + //Fix duration + if (_this.velocity !== 0) momentumDuration = Math.abs((newPosition - _this.positions.current) / _this.velocity); + + _this.setWrapperTranslate(newPosition); + + _this.setWrapperTransition(momentumDuration); + + if (params.momentumBounce && doBounce) { + _this.wrapperTransitionEnd(function () { + if (!allowMomentumBounce) return; + if (params.onMomentumBounce) _this.fireCallback(params.onMomentumBounce, _this); + _this.callPlugins('onMomentumBounce'); + + _this.setWrapperTranslate(afterBouncePosition); + _this.setWrapperTransition(300); + }); + } + + _this.updateActiveSlide(newPosition); + } + if (!params.freeModeFluid || timeDiff >= 300) _this.updateActiveSlide(_this.positions.current); + + if (params.onTouchEnd) _this.fireCallback(params.onTouchEnd, _this); + _this.callPlugins('onTouchEnd'); + return; + } + + //Direction + direction = diff < 0 ? 'toNext' : 'toPrev'; + + //Short Touches + if (direction === 'toNext' && (timeDiff <= 300)) { + if (diffAbs < 30 || !params.shortSwipes) _this.swipeReset(); + else _this.swipeNext(true); + } + + if (direction === 'toPrev' && (timeDiff <= 300)) { + if (diffAbs < 30 || !params.shortSwipes) _this.swipeReset(); + else _this.swipePrev(true); + } + + //Long Touches + var targetSlideSize = 0; + if (params.slidesPerView === 'auto') { + //Define current slide's width + var currentPosition = Math.abs(_this.getWrapperTranslate()); + var slidesOffset = 0; + var _slideSize; + for (var i = 0; i < _this.slides.length; i++) { + _slideSize = isH ? _this.slides[i].getWidth(true) : _this.slides[i].getHeight(true); + slidesOffset += _slideSize; + if (slidesOffset > currentPosition) { + targetSlideSize = _slideSize; + break; + } + } + if (targetSlideSize > containerSize) targetSlideSize = containerSize; + } + else { + targetSlideSize = slideSize * params.slidesPerView; + } + if (direction === 'toNext' && (timeDiff > 300)) { + if (diffAbs >= targetSlideSize * params.longSwipesRatio) { + _this.swipeNext(true); + } + else { + _this.swipeReset(); + } + } + if (direction === 'toPrev' && (timeDiff > 300)) { + if (diffAbs >= targetSlideSize * params.longSwipesRatio) { + _this.swipePrev(true); + } + else { + _this.swipeReset(); + } + } + if (params.onTouchEnd) _this.fireCallback(params.onTouchEnd, _this); + _this.callPlugins('onTouchEnd'); + } + + + /*================================================== + noSwiping Bubble Check by Isaac Strack + ====================================================*/ + function noSwipingSlide(el) { + /*This function is specifically designed to check the parent elements for the noSwiping class, up to the wrapper. + We need to check parents because while onTouchStart bubbles, _this.isTouched is checked in onTouchStart, which stops the bubbling. + So, if a text box, for example, is the initial target, and the parent slide container has the noSwiping class, the _this.isTouched + check will never find it, and what was supposed to be noSwiping is able to be swiped. + This function will iterate up and check for the noSwiping class in parents, up through the wrapperClass.*/ + + // First we create a truthy variable, which is that swiping is allowd (noSwiping = false) + var noSwiping = false; + + // Now we iterate up (parentElements) until we reach the node with the wrapperClass. + do { + + // Each time, we check to see if there's a 'swiper-no-swiping' class (noSwipingClass). + if (el.className.indexOf(params.noSwipingClass) > -1) + { + noSwiping = true; // If there is, we set noSwiping = true; + } + + el = el.parentElement; // now we iterate up (parent node) + + } while (!noSwiping && el.parentElement && el.className.indexOf(params.wrapperClass) === -1); // also include el.parentElement truthy, just in case. + + // because we didn't check the wrapper itself, we do so now, if noSwiping is false: + if (!noSwiping && el.className.indexOf(params.wrapperClass) > -1 && el.className.indexOf(params.noSwipingClass) > -1) + noSwiping = true; // if the wrapper has the noSwipingClass, we set noSwiping = true; + + return noSwiping; + } + + function addClassToHtmlString(klass, outerHtml) { + var par = document.createElement('div'); + var child; + + par.innerHTML = outerHtml; + child = par.firstChild; + child.className += ' ' + klass; + + return child.outerHTML; + } + + + /*================================================== + Swipe Functions + ====================================================*/ + _this.swipeNext = function (internal) { + if (!internal && params.loop) _this.fixLoop(); + if (!internal && params.autoplay) _this.stopAutoplay(true); + _this.callPlugins('onSwipeNext'); + var currentPosition = _this.getWrapperTranslate(); + var newPosition = currentPosition; + if (params.slidesPerView === 'auto') { + for (var i = 0; i < _this.snapGrid.length; i++) { + if (-currentPosition >= _this.snapGrid[i] && -currentPosition < _this.snapGrid[i + 1]) { + newPosition = -_this.snapGrid[i + 1]; + break; + } + } + } + else { + var groupSize = slideSize * params.slidesPerGroup; + newPosition = -(Math.floor(Math.abs(currentPosition) / Math.floor(groupSize)) * groupSize + groupSize); + } + if (newPosition < -maxWrapperPosition()) { + newPosition = -maxWrapperPosition(); + } + if (newPosition === currentPosition) return false; + swipeToPosition(newPosition, 'next'); + return true; + }; + _this.swipePrev = function (internal) { + if (!internal && params.loop) _this.fixLoop(); + if (!internal && params.autoplay) _this.stopAutoplay(true); + _this.callPlugins('onSwipePrev'); + + var currentPosition = Math.ceil(_this.getWrapperTranslate()); + var newPosition; + if (params.slidesPerView === 'auto') { + newPosition = 0; + for (var i = 1; i < _this.snapGrid.length; i++) { + if (-currentPosition === _this.snapGrid[i]) { + newPosition = -_this.snapGrid[i - 1]; + break; + } + if (-currentPosition > _this.snapGrid[i] && -currentPosition < _this.snapGrid[i + 1]) { + newPosition = -_this.snapGrid[i]; + break; + } + } + } + else { + var groupSize = slideSize * params.slidesPerGroup; + newPosition = -(Math.ceil(-currentPosition / groupSize) - 1) * groupSize; + } + + if (newPosition > 0) newPosition = 0; + + if (newPosition === currentPosition) return false; + swipeToPosition(newPosition, 'prev'); + return true; + + }; + _this.swipeReset = function () { + _this.callPlugins('onSwipeReset'); + var currentPosition = _this.getWrapperTranslate(); + var groupSize = slideSize * params.slidesPerGroup; + var newPosition; + var maxPosition = -maxWrapperPosition(); + if (params.slidesPerView === 'auto') { + newPosition = 0; + for (var i = 0; i < _this.snapGrid.length; i++) { + if (-currentPosition === _this.snapGrid[i]) return; + if (-currentPosition >= _this.snapGrid[i] && -currentPosition < _this.snapGrid[i + 1]) { + if (_this.positions.diff > 0) newPosition = -_this.snapGrid[i + 1]; + else newPosition = -_this.snapGrid[i]; + break; + } + } + if (-currentPosition >= _this.snapGrid[_this.snapGrid.length - 1]) newPosition = -_this.snapGrid[_this.snapGrid.length - 1]; + if (currentPosition <= -maxWrapperPosition()) newPosition = -maxWrapperPosition(); + } + else { + newPosition = currentPosition < 0 ? Math.round(currentPosition / groupSize) * groupSize : 0; + } + if (params.scrollContainer) { + newPosition = currentPosition < 0 ? currentPosition : 0; + } + if (newPosition < -maxWrapperPosition()) { + newPosition = -maxWrapperPosition(); + } + if (params.scrollContainer && (containerSize > slideSize)) { + newPosition = 0; + } + + if (newPosition === currentPosition) return false; + + swipeToPosition(newPosition, 'reset'); + return true; + }; + + _this.swipeTo = function (index, speed, runCallbacks) { + index = parseInt(index, 10); + _this.callPlugins('onSwipeTo', {index: index, speed: speed}); + if (params.loop) index = index + _this.loopedSlides; + var currentPosition = _this.getWrapperTranslate(); + if (index > (_this.slides.length - 1) || index < 0) return; + var newPosition; + if (params.slidesPerView === 'auto') { + newPosition = -_this.slidesGrid[index]; + } + else { + newPosition = -index * slideSize; + } + if (newPosition < - maxWrapperPosition()) { + newPosition = - maxWrapperPosition(); + } + + if (newPosition === currentPosition) return false; + + runCallbacks = runCallbacks === false ? false : true; + swipeToPosition(newPosition, 'to', {index: index, speed: speed, runCallbacks: runCallbacks}); + return true; + }; + + function swipeToPosition(newPosition, action, toOptions) { + var speed = (action === 'to' && toOptions.speed >= 0) ? toOptions.speed : params.speed; + var timeOld = + new Date(); + + function anim() { + var timeNew = + new Date(); + var time = timeNew - timeOld; + currentPosition += animationStep * time / (1000 / 60); + condition = direction === 'toNext' ? currentPosition > newPosition : currentPosition < newPosition; + if (condition) { + _this.setWrapperTranslate(Math.round(currentPosition)); + _this._DOMAnimating = true; + window.setTimeout(function () { + anim(); + }, 1000 / 60); + } + else { + if (params.onSlideChangeEnd) _this.fireCallback(params.onSlideChangeEnd, _this); + _this.setWrapperTranslate(newPosition); + _this._DOMAnimating = false; + } + } + + if (_this.support.transitions || !params.DOMAnimation) { + _this.setWrapperTranslate(newPosition); + _this.setWrapperTransition(speed); + } + else { + //Try the DOM animation + var currentPosition = _this.getWrapperTranslate(); + var animationStep = Math.ceil((newPosition - currentPosition) / speed * (1000 / 60)); + var direction = currentPosition > newPosition ? 'toNext' : 'toPrev'; + var condition = direction === 'toNext' ? currentPosition > newPosition : currentPosition < newPosition; + if (_this._DOMAnimating) return; + + anim(); + } + + //Update Active Slide Index + _this.updateActiveSlide(newPosition); + + //Callbacks + if (params.onSlideNext && action === 'next') { + _this.fireCallback(params.onSlideNext, _this, newPosition); + } + if (params.onSlidePrev && action === 'prev') { + _this.fireCallback(params.onSlidePrev, _this, newPosition); + } + //'Reset' Callback + if (params.onSlideReset && action === 'reset') { + _this.fireCallback(params.onSlideReset, _this, newPosition); + } + + //'Next', 'Prev' and 'To' Callbacks + if (action === 'next' || action === 'prev' || (action === 'to' && toOptions.runCallbacks === true)) + slideChangeCallbacks(action); + } + /*================================================== + Transition Callbacks + ====================================================*/ + //Prevent Multiple Callbacks + _this._queueStartCallbacks = false; + _this._queueEndCallbacks = false; + function slideChangeCallbacks(direction) { + //Transition Start Callback + _this.callPlugins('onSlideChangeStart'); + if (params.onSlideChangeStart) { + if (params.queueStartCallbacks && _this.support.transitions) { + if (_this._queueStartCallbacks) return; + _this._queueStartCallbacks = true; + _this.fireCallback(params.onSlideChangeStart, _this, direction); + _this.wrapperTransitionEnd(function () { + _this._queueStartCallbacks = false; + }); + } + else _this.fireCallback(params.onSlideChangeStart, _this, direction); + } + //Transition End Callback + if (params.onSlideChangeEnd) { + if (_this.support.transitions) { + if (params.queueEndCallbacks) { + if (_this._queueEndCallbacks) return; + _this._queueEndCallbacks = true; + _this.wrapperTransitionEnd(function (swiper) { + _this.fireCallback(params.onSlideChangeEnd, swiper, direction); + }); + } + else { + _this.wrapperTransitionEnd(function (swiper) { + _this.fireCallback(params.onSlideChangeEnd, swiper, direction); + }); + } + } + else { + if (!params.DOMAnimation) { + setTimeout(function () { + _this.fireCallback(params.onSlideChangeEnd, _this, direction); + }, 10); + } + } + } + } + + /*================================================== + Update Active Slide Index + ====================================================*/ + _this.updateActiveSlide = function (position) { + if (!_this.initialized) return; + if (_this.slides.length === 0) return; + _this.previousIndex = _this.activeIndex; + if (typeof position === 'undefined') position = _this.getWrapperTranslate(); + if (position > 0) position = 0; + + if (params.slidesPerView === 'auto') { + var slidesOffset = 0; + _this.activeIndex = _this.slidesGrid.indexOf(-position); + if (_this.activeIndex < 0) { + for (var i = 0; i < _this.slidesGrid.length - 1; i++) { + if (-position > _this.slidesGrid[i] && -position < _this.slidesGrid[i + 1]) { + break; + } + } + var leftDistance = Math.abs(_this.slidesGrid[i] + position); + var rightDistance = Math.abs(_this.slidesGrid[i + 1] + position); + if (leftDistance <= rightDistance) _this.activeIndex = i; + else _this.activeIndex = i + 1; + } + } + else { + _this.activeIndex = Math[params.visibilityFullFit ? 'ceil' : 'round'](-position / slideSize); + } + + if (_this.activeIndex === _this.slides.length) _this.activeIndex = _this.slides.length - 1; + if (_this.activeIndex < 0) _this.activeIndex = 0; + + // Check for slide + if (!_this.slides[_this.activeIndex]) return; + + // Calc Visible slides + _this.calcVisibleSlides(position); + + // Mark visible and active slides with additonal classes + var activeClassRegexp = new RegExp('\\s*' + params.slideActiveClass); + var inViewClassRegexp = new RegExp('\\s*' + params.slideVisibleClass); + + for (var j = 0; j < _this.slides.length; j++) { + _this.slides[j].className = _this.slides[j].className.replace(activeClassRegexp, '').replace(inViewClassRegexp, ''); + if (_this.visibleSlides.indexOf(_this.slides[j]) >= 0) { + _this.slides[j].className += ' ' + params.slideVisibleClass; + } + + } + _this.slides[_this.activeIndex].className += ' ' + params.slideActiveClass; + + //Update loop index + if (params.loop) { + var ls = _this.loopedSlides; + _this.activeLoopIndex = _this.activeIndex - ls; + if (_this.activeLoopIndex >= _this.slides.length - ls * 2) { + _this.activeLoopIndex = _this.slides.length - ls * 2 - _this.activeLoopIndex; + } + if (_this.activeLoopIndex < 0) { + _this.activeLoopIndex = _this.slides.length - ls * 2 + _this.activeLoopIndex; + } + if (_this.activeLoopIndex < 0) _this.activeLoopIndex = 0; + } + else { + _this.activeLoopIndex = _this.activeIndex; + } + //Update Pagination + if (params.pagination) { + _this.updatePagination(position); + } + }; + /*================================================== + Pagination + ====================================================*/ + _this.createPagination = function (firstInit) { + if (params.paginationClickable && _this.paginationButtons) { + removePaginationEvents(); + } + _this.paginationContainer = params.pagination.nodeType ? params.pagination : $$(params.pagination)[0]; + if (params.createPagination) { + var paginationHTML = ''; + var numOfSlides = _this.slides.length; + var numOfButtons = numOfSlides; + if (params.loop) numOfButtons -= _this.loopedSlides * 2; + for (var i = 0; i < numOfButtons; i++) { + paginationHTML += '<' + params.paginationElement + ' class="' + params.paginationElementClass + '">'; + } + _this.paginationContainer.innerHTML = paginationHTML; + } + _this.paginationButtons = $$('.' + params.paginationElementClass, _this.paginationContainer); + if (!firstInit) _this.updatePagination(); + _this.callPlugins('onCreatePagination'); + if (params.paginationClickable) { + addPaginationEvents(); + } + }; + function removePaginationEvents() { + var pagers = _this.paginationButtons; + if (pagers) { + for (var i = 0; i < pagers.length; i++) { + _this.h.removeEventListener(pagers[i], 'click', paginationClick); + } + } + } + function addPaginationEvents() { + var pagers = _this.paginationButtons; + if (pagers) { + for (var i = 0; i < pagers.length; i++) { + _this.h.addEventListener(pagers[i], 'click', paginationClick); + } + } + } + function paginationClick(e) { + var index; + var target = e.target || e.srcElement; + var pagers = _this.paginationButtons; + for (var i = 0; i < pagers.length; i++) { + if (target === pagers[i]) index = i; + } + _this.swipeTo(index); + } + _this.updatePagination = function (position) { + if (!params.pagination) return; + if (_this.slides.length < 1) return; + var activePagers = $$('.' + params.paginationActiveClass, _this.paginationContainer); + if (!activePagers) return; + + //Reset all Buttons' class to not active + var pagers = _this.paginationButtons; + if (pagers.length === 0) return; + for (var i = 0; i < pagers.length; i++) { + pagers[i].className = params.paginationElementClass; + } + + var indexOffset = params.loop ? _this.loopedSlides : 0; + if (params.paginationAsRange) { + if (!_this.visibleSlides) _this.calcVisibleSlides(position); + //Get Visible Indexes + var visibleIndexes = []; + var j; // lopp index - avoid JSHint W004 / W038 + for (j = 0; j < _this.visibleSlides.length; j++) { + var visIndex = _this.slides.indexOf(_this.visibleSlides[j]) - indexOffset; + + if (params.loop && visIndex < 0) { + visIndex = _this.slides.length - _this.loopedSlides * 2 + visIndex; + } + if (params.loop && visIndex >= _this.slides.length - _this.loopedSlides * 2) { + visIndex = _this.slides.length - _this.loopedSlides * 2 - visIndex; + visIndex = Math.abs(visIndex); + } + visibleIndexes.push(visIndex); + } + + for (j = 0; j < visibleIndexes.length; j++) { + if (pagers[visibleIndexes[j]]) pagers[visibleIndexes[j]].className += ' ' + params.paginationVisibleClass; + } + + if (params.loop) { + if (pagers[_this.activeLoopIndex] !== undefined) { + pagers[_this.activeLoopIndex].className += ' ' + params.paginationActiveClass; + } + } + else { + pagers[_this.activeIndex].className += ' ' + params.paginationActiveClass; + } + } + else { + if (params.loop) { + if (pagers[_this.activeLoopIndex]) pagers[_this.activeLoopIndex].className += ' ' + params.paginationActiveClass + ' ' + params.paginationVisibleClass; + } + else { + pagers[_this.activeIndex].className += ' ' + params.paginationActiveClass + ' ' + params.paginationVisibleClass; + } + } + }; + _this.calcVisibleSlides = function (position) { + var visibleSlides = []; + var _slideLeft = 0, _slideSize = 0, _slideRight = 0; + if (isH && _this.wrapperLeft > 0) position = position + _this.wrapperLeft; + if (!isH && _this.wrapperTop > 0) position = position + _this.wrapperTop; + + for (var i = 0; i < _this.slides.length; i++) { + _slideLeft += _slideSize; + if (params.slidesPerView === 'auto') + _slideSize = isH ? _this.h.getWidth(_this.slides[i], true) : _this.h.getHeight(_this.slides[i], true); + else _slideSize = slideSize; + + _slideRight = _slideLeft + _slideSize; + var isVisibile = false; + if (params.visibilityFullFit) { + if (_slideLeft >= -position && _slideRight <= -position + containerSize) isVisibile = true; + if (_slideLeft <= -position && _slideRight >= -position + containerSize) isVisibile = true; + } + else { + if (_slideRight > -position && _slideRight <= ((-position + containerSize))) isVisibile = true; + if (_slideLeft >= -position && _slideLeft < ((-position + containerSize))) isVisibile = true; + if (_slideLeft < -position && _slideRight > ((-position + containerSize))) isVisibile = true; + } + + if (isVisibile) visibleSlides.push(_this.slides[i]); + + } + if (visibleSlides.length === 0) visibleSlides = [_this.slides[_this.activeIndex]]; + + _this.visibleSlides = visibleSlides; + }; + + /*========================================== + Autoplay + ============================================*/ + var autoplayTimeoutId, autoplayIntervalId; + _this.startAutoplay = function () { + if (_this.support.transitions) { + if (typeof autoplayTimeoutId !== 'undefined') return false; + if (!params.autoplay) return; + _this.callPlugins('onAutoplayStart'); + autoplay(); + } + else { + if (typeof autoplayIntervalId !== 'undefined') return false; + if (!params.autoplay) return; + _this.callPlugins('onAutoplayStart'); + autoplayIntervalId = setInterval(function () { + if (params.loop) { + _this.fixLoop(); + _this.swipeNext(true); + } + else if (!_this.swipeNext(true)) { + if (!params.autoplayStopOnLast) _this.swipeTo(0); + else { + clearInterval(autoplayIntervalId); + autoplayIntervalId = undefined; + } + } + }, params.autoplay); + } + }; + _this.stopAutoplay = function (internal) { + if (_this.support.transitions) { + if (!autoplayTimeoutId) return; + if (autoplayTimeoutId) clearTimeout(autoplayTimeoutId); + autoplayTimeoutId = undefined; + if (internal && !params.autoplayDisableOnInteraction) { + _this.wrapperTransitionEnd(function () { + autoplay(); + }); + } + _this.callPlugins('onAutoplayStop'); + } + else { + if (autoplayIntervalId) clearInterval(autoplayIntervalId); + autoplayIntervalId = undefined; + _this.callPlugins('onAutoplayStop'); + } + }; + function autoplay() { + autoplayTimeoutId = setTimeout(function () { + if (params.loop) { + _this.fixLoop(); + _this.swipeNext(true); + } + else if (!_this.swipeNext(true)) { + if (!params.autoplayStopOnLast) _this.swipeTo(0); + else { + clearTimeout(autoplayTimeoutId); + autoplayTimeoutId = undefined; + } + } + _this.wrapperTransitionEnd(function () { + if (typeof autoplayTimeoutId !== 'undefined') autoplay(); + }); + }, params.autoplay); + } + /*================================================== + Loop + ====================================================*/ + _this.loopCreated = false; + _this.removeLoopedSlides = function () { + if (_this.loopCreated) { + for (var i = 0; i < _this.slides.length; i++) { + if (_this.slides[i].getData('looped') === true) _this.wrapper.removeChild(_this.slides[i]); + } + } + }; + + _this.createLoop = function () { + if (_this.slides.length === 0) return; + if (params.slidesPerView === 'auto') { + _this.loopedSlides = params.loopedSlides || 1; + } + else { + _this.loopedSlides = params.slidesPerView + params.loopAdditionalSlides; + } + + if (_this.loopedSlides > _this.slides.length) { + _this.loopedSlides = _this.slides.length; + } + + var slideFirstHTML = '', + slideLastHTML = '', + i; + var slidesSetFullHTML = ''; + /** + loopedSlides is too large if loopAdditionalSlides are set. + Need to divide the slides by maximum number of slides existing. + + @author Tomaz Lovrec + */ + var numSlides = _this.slides.length; + var fullSlideSets = Math.floor(_this.loopedSlides / numSlides); + var remainderSlides = _this.loopedSlides % numSlides; + // assemble full sets of slides + for (i = 0; i < (fullSlideSets * numSlides); i++) { + var j = i; + if (i >= numSlides) { + var over = Math.floor(i / numSlides); + j = i - (numSlides * over); + } + slidesSetFullHTML += _this.slides[j].outerHTML; + } + // assemble remainder slides + // assemble remainder appended to existing slides + for (i = 0; i < remainderSlides;i++) { + slideLastHTML += addClassToHtmlString(params.slideDuplicateClass, _this.slides[i].outerHTML); + } + // assemble slides that get preppended to existing slides + for (i = numSlides - remainderSlides; i < numSlides;i++) { + slideFirstHTML += addClassToHtmlString(params.slideDuplicateClass, _this.slides[i].outerHTML); + } + // assemble all slides + var slides = slideFirstHTML + slidesSetFullHTML + wrapper.innerHTML + slidesSetFullHTML + slideLastHTML; + // set the slides + wrapper.innerHTML = slides; + + _this.loopCreated = true; + _this.calcSlides(); + + //Update Looped Slides with special class + for (i = 0; i < _this.slides.length; i++) { + if (i < _this.loopedSlides || i >= _this.slides.length - _this.loopedSlides) _this.slides[i].setData('looped', true); + } + _this.callPlugins('onCreateLoop'); + + }; + + _this.fixLoop = function () { + var newIndex; + //Fix For Negative Oversliding + if (_this.activeIndex < _this.loopedSlides) { + newIndex = _this.slides.length - _this.loopedSlides * 3 + _this.activeIndex; + _this.swipeTo(newIndex, 0, false); + } + //Fix For Positive Oversliding + else if ((params.slidesPerView === 'auto' && _this.activeIndex >= _this.loopedSlides * 2) || (_this.activeIndex > _this.slides.length - params.slidesPerView * 2)) { + newIndex = -_this.slides.length + _this.activeIndex + _this.loopedSlides; + _this.swipeTo(newIndex, 0, false); + } + }; + + /*================================================== + Slides Loader + ====================================================*/ + _this.loadSlides = function () { + var slidesHTML = ''; + _this.activeLoaderIndex = 0; + var slides = params.loader.slides; + var slidesToLoad = params.loader.loadAllSlides ? slides.length : params.slidesPerView * (1 + params.loader.surroundGroups); + for (var i = 0; i < slidesToLoad; i++) { + if (params.loader.slidesHTMLType === 'outer') slidesHTML += slides[i]; + else { + slidesHTML += '<' + params.slideElement + ' class="' + params.slideClass + '" data-swiperindex="' + i + '">' + slides[i] + ''; + } + } + _this.wrapper.innerHTML = slidesHTML; + _this.calcSlides(true); + //Add permanent transitionEnd callback + if (!params.loader.loadAllSlides) { + _this.wrapperTransitionEnd(_this.reloadSlides, true); + } + }; + + _this.reloadSlides = function () { + var slides = params.loader.slides; + var newActiveIndex = parseInt(_this.activeSlide().data('swiperindex'), 10); + if (newActiveIndex < 0 || newActiveIndex > slides.length - 1) return; //<-- Exit + _this.activeLoaderIndex = newActiveIndex; + var firstIndex = Math.max(0, newActiveIndex - params.slidesPerView * params.loader.surroundGroups); + var lastIndex = Math.min(newActiveIndex + params.slidesPerView * (1 + params.loader.surroundGroups) - 1, slides.length - 1); + //Update Transforms + if (newActiveIndex > 0) { + var newTransform = -slideSize * (newActiveIndex - firstIndex); + _this.setWrapperTranslate(newTransform); + _this.setWrapperTransition(0); + } + var i; // loop index + //New Slides + if (params.loader.logic === 'reload') { + _this.wrapper.innerHTML = ''; + var slidesHTML = ''; + for (i = firstIndex; i <= lastIndex; i++) { + slidesHTML += params.loader.slidesHTMLType === 'outer' ? slides[i] : '<' + params.slideElement + ' class="' + params.slideClass + '" data-swiperindex="' + i + '">' + slides[i] + ''; + } + _this.wrapper.innerHTML = slidesHTML; + } + else { + var minExistIndex = 1000; + var maxExistIndex = 0; + + for (i = 0; i < _this.slides.length; i++) { + var index = _this.slides[i].data('swiperindex'); + if (index < firstIndex || index > lastIndex) { + _this.wrapper.removeChild(_this.slides[i]); + } + else { + minExistIndex = Math.min(index, minExistIndex); + maxExistIndex = Math.max(index, maxExistIndex); + } + } + for (i = firstIndex; i <= lastIndex; i++) { + var newSlide; + if (i < minExistIndex) { + newSlide = document.createElement(params.slideElement); + newSlide.className = params.slideClass; + newSlide.setAttribute('data-swiperindex', i); + newSlide.innerHTML = slides[i]; + _this.wrapper.insertBefore(newSlide, _this.wrapper.firstChild); + } + if (i > maxExistIndex) { + newSlide = document.createElement(params.slideElement); + newSlide.className = params.slideClass; + newSlide.setAttribute('data-swiperindex', i); + newSlide.innerHTML = slides[i]; + _this.wrapper.appendChild(newSlide); + } + } + } + //reInit + _this.reInit(true); + }; + + /*================================================== + Make Swiper + ====================================================*/ + function makeSwiper() { + _this.calcSlides(); + if (params.loader.slides.length > 0 && _this.slides.length === 0) { + _this.loadSlides(); + } + if (params.loop) { + _this.createLoop(); + } + _this.init(); + initEvents(); + if (params.pagination) { + _this.createPagination(true); + } + + if (params.loop || params.initialSlide > 0) { + _this.swipeTo(params.initialSlide, 0, false); + } + else { + _this.updateActiveSlide(0); + } + if (params.autoplay) { + _this.startAutoplay(); + } + /** + * Set center slide index. + * + * @author Tomaz Lovrec + */ + _this.centerIndex = _this.activeIndex; + + // Callbacks + if (params.onSwiperCreated) _this.fireCallback(params.onSwiperCreated, _this); + _this.callPlugins('onSwiperCreated'); + } + + makeSwiper(); +}; + +Swiper.prototype = { + plugins : {}, + + /*================================================== + Wrapper Operations + ====================================================*/ + wrapperTransitionEnd : function (callback, permanent) { + 'use strict'; + var a = this, + el = a.wrapper, + events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'], + i; + + function fireCallBack() { + callback(a); + if (a.params.queueEndCallbacks) a._queueEndCallbacks = false; + if (!permanent) { + for (i = 0; i < events.length; i++) { + a.h.removeEventListener(el, events[i], fireCallBack); + } + } + } + + if (callback) { + for (i = 0; i < events.length; i++) { + a.h.addEventListener(el, events[i], fireCallBack); + } + } + }, + + getWrapperTranslate : function (axis) { + 'use strict'; + var el = this.wrapper, + matrix, curTransform, curStyle, transformMatrix; + + // automatic axis detection + if (typeof axis === 'undefined') { + axis = this.params.mode === 'horizontal' ? 'x' : 'y'; + } + + if (this.support.transforms && this.params.useCSS3Transforms) { + curStyle = window.getComputedStyle(el, null); + if (window.WebKitCSSMatrix) { + transformMatrix = new WebKitCSSMatrix(curStyle.webkitTransform); + } + else { + transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); + matrix = transformMatrix.toString().split(','); + } + + if (axis === 'x') { + //Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) + curTransform = transformMatrix.m41; + //Crazy IE10 Matrix + else if (matrix.length === 16) + curTransform = parseFloat(matrix[12]); + //Normal Browsers + else + curTransform = parseFloat(matrix[4]); + } + if (axis === 'y') { + //Latest Chrome and webkits Fix + if (window.WebKitCSSMatrix) + curTransform = transformMatrix.m42; + //Crazy IE10 Matrix + else if (matrix.length === 16) + curTransform = parseFloat(matrix[13]); + //Normal Browsers + else + curTransform = parseFloat(matrix[5]); + } + } + else { + if (axis === 'x') curTransform = parseFloat(el.style.left, 10) || 0; + if (axis === 'y') curTransform = parseFloat(el.style.top, 10) || 0; + } + return curTransform || 0; + }, + + setWrapperTranslate : function (x, y, z) { + 'use strict'; + var es = this.wrapper.style, + coords = {x: 0, y: 0, z: 0}, + translate; + + // passed all coordinates + if (arguments.length === 3) { + coords.x = x; + coords.y = y; + coords.z = z; + } + + // passed one coordinate and optional axis + else { + if (typeof y === 'undefined') { + y = this.params.mode === 'horizontal' ? 'x' : 'y'; + } + coords[y] = x; + } + + if (this.support.transforms && this.params.useCSS3Transforms) { + translate = this.support.transforms3d ? 'translate3d(' + coords.x + 'px, ' + coords.y + 'px, ' + coords.z + 'px)' : 'translate(' + coords.x + 'px, ' + coords.y + 'px)'; + es.webkitTransform = es.MsTransform = es.msTransform = es.MozTransform = es.OTransform = es.transform = translate; + } + else { + es.left = coords.x + 'px'; + es.top = coords.y + 'px'; + } + this.callPlugins('onSetWrapperTransform', coords); + if (this.params.onSetWrapperTransform) this.fireCallback(this.params.onSetWrapperTransform, this, coords); + }, + + setWrapperTransition : function (duration) { + 'use strict'; + var es = this.wrapper.style; + es.webkitTransitionDuration = es.MsTransitionDuration = es.msTransitionDuration = es.MozTransitionDuration = es.OTransitionDuration = es.transitionDuration = (duration / 1000) + 's'; + this.callPlugins('onSetWrapperTransition', {duration: duration}); + if (this.params.onSetWrapperTransition) this.fireCallback(this.params.onSetWrapperTransition, this, duration); + + }, + + /*================================================== + Helpers + ====================================================*/ + h : { + getWidth: function (el, outer) { + 'use strict'; + var width = window.getComputedStyle(el, null).getPropertyValue('width'); + var returnWidth = parseFloat(width); + //IE Fixes + if (isNaN(returnWidth) || width.indexOf('%') > 0) { + returnWidth = el.offsetWidth - parseFloat(window.getComputedStyle(el, null).getPropertyValue('padding-left')) - parseFloat(window.getComputedStyle(el, null).getPropertyValue('padding-right')); + } + if (outer) returnWidth += parseFloat(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue('padding-right')); + + return returnWidth; + }, + getHeight: function (el, outer) { + 'use strict'; + if (outer) return el.offsetHeight; + + var height = window.getComputedStyle(el, null).getPropertyValue('height'); + var returnHeight = parseFloat(height); + //IE Fixes + if (isNaN(returnHeight) || height.indexOf('%') > 0) { + returnHeight = el.offsetHeight - parseFloat(window.getComputedStyle(el, null).getPropertyValue('padding-top')) - parseFloat(window.getComputedStyle(el, null).getPropertyValue('padding-bottom')); + } + if (outer) returnHeight += parseFloat(window.getComputedStyle(el, null).getPropertyValue('padding-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue('padding-bottom')); + return returnHeight; + }, + getOffset: function (el) { + 'use strict'; + var box = el.getBoundingClientRect(); + var body = document.body; + var clientTop = el.clientTop || body.clientTop || 0; + var clientLeft = el.clientLeft || body.clientLeft || 0; + var scrollTop = window.pageYOffset || el.scrollTop; + var scrollLeft = window.pageXOffset || el.scrollLeft; + if (document.documentElement && !window.pageYOffset) { + //IE7-8 + scrollTop = document.documentElement.scrollTop; + scrollLeft = document.documentElement.scrollLeft; + } + return { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; + }, + windowWidth : function () { + 'use strict'; + if (window.innerWidth) return window.innerWidth; + else if (document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth; + }, + windowHeight : function () { + 'use strict'; + if (window.innerHeight) return window.innerHeight; + else if (document.documentElement && document.documentElement.clientHeight) return document.documentElement.clientHeight; + }, + windowScroll : function () { + 'use strict'; + var left = 0, top = 0; + if (typeof pageYOffset !== 'undefined') { + return { + left: window.pageXOffset, + top: window.pageYOffset + }; + } + else if (document.documentElement) { + return { + left: document.documentElement.scrollLeft, + top: document.documentElement.scrollTop + }; + } + }, + + addEventListener : function (el, event, listener, useCapture) { + 'use strict'; + if (typeof useCapture === 'undefined') { + useCapture = false; + } + + if (el.addEventListener) { + el.addEventListener(event, listener, useCapture); + } + else if (el.attachEvent) { + el.attachEvent('on' + event, listener); + } + }, + + removeEventListener : function (el, event, listener, useCapture) { + 'use strict'; + if (typeof useCapture === 'undefined') { + useCapture = false; + } + + if (el.removeEventListener) { + el.removeEventListener(event, listener, useCapture); + } + else if (el.detachEvent) { + el.detachEvent('on' + event, listener); + } + } + }, + setTransform : function (el, transform) { + 'use strict'; + var es = el.style; + es.webkitTransform = es.MsTransform = es.msTransform = es.MozTransform = es.OTransform = es.transform = transform; + }, + setTranslate : function (el, translate) { + 'use strict'; + var es = el.style; + var pos = { + x : translate.x || 0, + y : translate.y || 0, + z : translate.z || 0 + }; + var transformString = this.support.transforms3d ? 'translate3d(' + (pos.x) + 'px,' + (pos.y) + 'px,' + (pos.z) + 'px)' : 'translate(' + (pos.x) + 'px,' + (pos.y) + 'px)'; + es.webkitTransform = es.MsTransform = es.msTransform = es.MozTransform = es.OTransform = es.transform = transformString; + if (!this.support.transforms) { + es.left = pos.x + 'px'; + es.top = pos.y + 'px'; + } + }, + setTransition : function (el, duration) { + 'use strict'; + var es = el.style; + es.webkitTransitionDuration = es.MsTransitionDuration = es.msTransitionDuration = es.MozTransitionDuration = es.OTransitionDuration = es.transitionDuration = duration + 'ms'; + }, + /*================================================== + Feature Detection + ====================================================*/ + support: { + + touch : (window.Modernizr && Modernizr.touch === true) || (function () { + 'use strict'; + return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); + })(), + + transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () { + 'use strict'; + var div = document.createElement('div').style; + return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div); + })(), + + transforms : (window.Modernizr && Modernizr.csstransforms === true) || (function () { + 'use strict'; + var div = document.createElement('div').style; + return ('transform' in div || 'WebkitTransform' in div || 'MozTransform' in div || 'msTransform' in div || 'MsTransform' in div || 'OTransform' in div); + })(), + + transitions : (window.Modernizr && Modernizr.csstransitions === true) || (function () { + 'use strict'; + var div = document.createElement('div').style; + return ('transition' in div || 'WebkitTransition' in div || 'MozTransition' in div || 'msTransition' in div || 'MsTransition' in div || 'OTransition' in div); + })() + }, + + browser : { + + ie8 : (function () { + 'use strict'; + var rv = -1; // Return value assumes failure. + if (navigator.appName === 'Microsoft Internet Explorer') { + var ua = navigator.userAgent; + var re = new RegExp(/MSIE ([0-9]{1,}[\.0-9]{0,})/); + if (re.exec(ua) != null) + rv = parseFloat(RegExp.$1); + } + return rv !== -1 && rv < 9; + })(), + + ie10 : window.navigator.msPointerEnabled, + ie11 : window.navigator.pointerEnabled + } +}; + +/*========================= + jQuery & Zepto Plugins + ===========================*/ +if (window.jQuery || window.Zepto) { + (function ($) { + 'use strict'; + $.fn.swiper = function (params) { + var s = new Swiper($(this)[0], params); + $(this).data('swiper', s); + return s; + }; + })(window.jQuery || window.Zepto); +} + +// component +if (typeof(module) !== 'undefined') +{ + module.exports = Swiper; +} diff --git a/assets/html/index.html b/assets/html/index.html new file mode 100644 index 0000000..615ea0c --- /dev/null +++ b/assets/html/index.html @@ -0,0 +1,57 @@ + + + + + XKCD Unofficial + + + + + +
+ +
+
+
    +
  • +
    +
    +
    +
  • +
  • +
    +
    +
    +
  • +
  • +
    +
    +
    +
  • +
+
+
+
+ +
+ Loading
+
+ + + + + + + \ No newline at end of file diff --git a/assets/html/iscroll-zoom.js b/assets/html/iscroll-zoom.js new file mode 100644 index 0000000..e9e5d40 --- /dev/null +++ b/assets/html/iscroll-zoom.js @@ -0,0 +1,2172 @@ +/*! iScroll v5.1.1 ~ (c) 2008-2014 Matteo Spinelli ~ http://cubiq.org/license */ +(function (window, document, Math) { +var rAF = window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function (callback) { window.setTimeout(callback, 1000 / 60); }; + +var utils = (function () { + var me = {}; + + var _elementStyle = document.createElement('div').style; + var _vendor = (function () { + var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'], + transform, + i = 0, + l = vendors.length; + + for ( ; i < l; i++ ) { + transform = vendors[i] + 'ransform'; + if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1); + } + + return false; + })(); + + function _prefixStyle (style) { + if ( _vendor === false ) return false; + if ( _vendor === '' ) return style; + return _vendor + style.charAt(0).toUpperCase() + style.substr(1); + } + + me.getTime = Date.now || function getTime () { return new Date().getTime(); }; + + me.extend = function (target, obj) { + for ( var i in obj ) { + target[i] = obj[i]; + } + }; + + me.addEvent = function (el, type, fn, capture) { + el.addEventListener(type, fn, !!capture); + }; + + me.removeEvent = function (el, type, fn, capture) { + el.removeEventListener(type, fn, !!capture); + }; + + me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) { + var distance = current - start, + speed = Math.abs(distance) / time, + destination, + duration; + + deceleration = deceleration === undefined ? 0.0006 : deceleration; + + destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 ); + duration = speed / deceleration; + + if ( destination < lowerMargin ) { + destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin; + distance = Math.abs(destination - current); + duration = distance / speed; + } else if ( destination > 0 ) { + destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0; + distance = Math.abs(current) + destination; + duration = distance / speed; + } + + return { + destination: Math.round(destination), + duration: duration + }; + }; + + var _transform = _prefixStyle('transform'); + + me.extend(me, { + hasTransform: _transform !== false, + hasPerspective: _prefixStyle('perspective') in _elementStyle, + hasTouch: 'ontouchstart' in window, + hasPointer: navigator.msPointerEnabled, + hasTransition: _prefixStyle('transition') in _elementStyle + }); + + // This should find all Android browsers lower than build 535.19 (both stock browser and webview) + me.isBadAndroid = /Android /.test(window.navigator.appVersion) && !(/Chrome\/\d/.test(window.navigator.appVersion)); + + me.extend(me.style = {}, { + transform: _transform, + transitionTimingFunction: _prefixStyle('transitionTimingFunction'), + transitionDuration: _prefixStyle('transitionDuration'), + transitionDelay: _prefixStyle('transitionDelay'), + transformOrigin: _prefixStyle('transformOrigin') + }); + + me.hasClass = function (e, c) { + var re = new RegExp("(^|\\s)" + c + "(\\s|$)"); + return re.test(e.className); + }; + + me.addClass = function (e, c) { + if ( me.hasClass(e, c) ) { + return; + } + + var newclass = e.className.split(' '); + newclass.push(c); + e.className = newclass.join(' '); + }; + + me.removeClass = function (e, c) { + if ( !me.hasClass(e, c) ) { + return; + } + + var re = new RegExp("(^|\\s)" + c + "(\\s|$)", 'g'); + e.className = e.className.replace(re, ' '); + }; + + me.offset = function (el) { + var left = -el.offsetLeft, + top = -el.offsetTop; + + // jshint -W084 + while (el = el.offsetParent) { + left -= el.offsetLeft; + top -= el.offsetTop; + } + // jshint +W084 + + return { + left: left, + top: top + }; + }; + + me.preventDefaultException = function (el, exceptions) { + for ( var i in exceptions ) { + if ( exceptions[i].test(el[i]) ) { + return true; + } + } + + return false; + }; + + me.extend(me.eventType = {}, { + touchstart: 1, + touchmove: 1, + touchend: 1, + + mousedown: 2, + mousemove: 2, + mouseup: 2, + + MSPointerDown: 3, + MSPointerMove: 3, + MSPointerUp: 3 + }); + + me.extend(me.ease = {}, { + quadratic: { + style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)', + fn: function (k) { + return k * ( 2 - k ); + } + }, + circular: { + style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly "circular" but this looks better, it should be (0.075, 0.82, 0.165, 1) + fn: function (k) { + return Math.sqrt( 1 - ( --k * k ) ); + } + }, + back: { + style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)', + fn: function (k) { + var b = 4; + return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1; + } + }, + bounce: { + style: '', + fn: function (k) { + if ( ( k /= 1 ) < ( 1 / 2.75 ) ) { + return 7.5625 * k * k; + } else if ( k < ( 2 / 2.75 ) ) { + return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75; + } else if ( k < ( 2.5 / 2.75 ) ) { + return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375; + } else { + return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375; + } + } + }, + elastic: { + style: '', + fn: function (k) { + var f = 0.22, + e = 0.4; + + if ( k === 0 ) { return 0; } + if ( k == 1 ) { return 1; } + + return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 ); + } + } + }); + + me.tap = function (e, eventName) { + var ev = document.createEvent('Event'); + ev.initEvent(eventName, true, true); + ev.pageX = e.pageX; + ev.pageY = e.pageY; + e.target.dispatchEvent(ev); + }; + + me.click = function (e) { + var target = e.target, + ev; + + if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) { + ev = document.createEvent('MouseEvents'); + ev.initMouseEvent('click', true, true, e.view, 1, + target.screenX, target.screenY, target.clientX, target.clientY, + e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, + 0, null); + + ev._constructed = true; + target.dispatchEvent(ev); + } + }; + + return me; +})(); + +function IScroll (el, options) { + this.wrapper = typeof el == 'string' ? document.querySelector(el) : el; + this.scroller = this.wrapper.children[0]; + this.scrollerStyle = this.scroller.style; // cache style for better performance + + this.options = { + + zoomMin: 1, + zoomMax: 4, startZoom: 1, + + resizeScrollbars: true, + + mouseWheelSpeed: 20, + + snapThreshold: 0.334, + +// INSERT POINT: OPTIONS + + startX: 0, + startY: 0, + scrollY: true, + directionLockThreshold: 5, + momentum: true, + + bounce: true, + bounceTime: 600, + bounceEasing: '', + + preventDefault: true, + preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ }, + + HWCompositing: true, + useTransition: true, + useTransform: true + }; + + for ( var i in options ) { + this.options[i] = options[i]; + } + + // Normalize options + this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : ''; + + this.options.useTransition = utils.hasTransition && this.options.useTransition; + this.options.useTransform = utils.hasTransform && this.options.useTransform; + + this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough; + this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault; + + // If you want eventPassthrough I have to lock one of the axes + this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY; + this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX; + + // With eventPassthrough we also need lockDirection mechanism + this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough; + this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold; + + this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing; + + this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling; + + if ( this.options.tap === true ) { + this.options.tap = 'tap'; + } + + if ( this.options.shrinkScrollbars == 'scale' ) { + this.options.useTransition = false; + } + + this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1; + +// INSERT POINT: NORMALIZATION + + // Some defaults + this.x = 0; + this.y = 0; + this.directionX = 0; + this.directionY = 0; + this._events = {}; + + this.scale = Math.min(Math.max(this.options.startZoom, this.options.zoomMin), this.options.zoomMax); + +// INSERT POINT: DEFAULTS + + this._init(); + this.refresh(); + + this.scrollTo(this.options.startX, this.options.startY); + this.enable(); +} + +IScroll.prototype = { + version: '5.1.1', + + _init: function () { + this._initEvents(); + + if ( this.options.zoom ) { + this._initZoom(); + } + + if ( this.options.scrollbars || this.options.indicators ) { + this._initIndicators(); + } + + if ( this.options.mouseWheel ) { + this._initWheel(); + } + + if ( this.options.snap ) { + this._initSnap(); + } + + if ( this.options.keyBindings ) { + this._initKeys(); + } + +// INSERT POINT: _init + + }, + + destroy: function () { + this._initEvents(true); + + this._execEvent('destroy'); + }, + + _transitionEnd: function (e) { + if ( e.target != this.scroller || !this.isInTransition ) { + return; + } + + this._transitionTime(); + if ( !this.resetPosition(this.options.bounceTime) ) { + this.isInTransition = false; + this._execEvent('scrollEnd'); + } + }, + + _start: function (e) { + // React to left mouse button only + if ( utils.eventType[e.type] != 1 ) { + if ( e.button !== 0 ) { + return; + } + } + + if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) { + return; + } + + if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) { + e.preventDefault(); + } + + var point = e.touches ? e.touches[0] : e, + pos; + + this.initiated = utils.eventType[e.type]; + this.moved = false; + this.distX = 0; + this.distY = 0; + this.directionX = 0; + this.directionY = 0; + this.directionLocked = 0; + + this._transitionTime(); + + this.startTime = utils.getTime(); + + if ( this.options.useTransition && this.isInTransition ) { + this.isInTransition = false; + pos = this.getComputedPosition(); + this._translate(Math.round(pos.x), Math.round(pos.y)); + this._execEvent('scrollEnd'); + } else if ( !this.options.useTransition && this.isAnimating ) { + this.isAnimating = false; + this._execEvent('scrollEnd'); + } + + this.startX = this.x; + this.startY = this.y; + this.absStartX = this.x; + this.absStartY = this.y; + this.pointX = point.pageX; + this.pointY = point.pageY; + + this._execEvent('beforeScrollStart'); + }, + + _move: function (e) { + if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { + return; + } + + if ( this.options.preventDefault ) { // increases performance on Android? TODO: check! + e.preventDefault(); + } + + var point = e.touches ? e.touches[0] : e, + deltaX = point.pageX - this.pointX, + deltaY = point.pageY - this.pointY, + timestamp = utils.getTime(), + newX, newY, + absDistX, absDistY; + + this.pointX = point.pageX; + this.pointY = point.pageY; + + this.distX += deltaX; + this.distY += deltaY; + absDistX = Math.abs(this.distX); + absDistY = Math.abs(this.distY); + + // We need to move at least 10 pixels for the scrolling to initiate + if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) { + return; + } + + // If you are scrolling in one direction lock the other + if ( !this.directionLocked && !this.options.freeScroll ) { + if ( absDistX > absDistY + this.options.directionLockThreshold ) { + this.directionLocked = 'h'; // lock horizontally + } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) { + this.directionLocked = 'v'; // lock vertically + } else { + this.directionLocked = 'n'; // no lock + } + } + + if ( this.directionLocked == 'h' ) { + if ( this.options.eventPassthrough == 'vertical' ) { + e.preventDefault(); + } else if ( this.options.eventPassthrough == 'horizontal' ) { + this.initiated = false; + return; + } + + deltaY = 0; + } else if ( this.directionLocked == 'v' ) { + if ( this.options.eventPassthrough == 'horizontal' ) { + e.preventDefault(); + } else if ( this.options.eventPassthrough == 'vertical' ) { + this.initiated = false; + return; + } + + deltaX = 0; + } + + deltaX = this.hasHorizontalScroll ? deltaX : 0; + deltaY = this.hasVerticalScroll ? deltaY : 0; + + newX = this.x + deltaX; + newY = this.y + deltaY; + + // Slow down if outside of the boundaries + if ( newX > 0 || newX < this.maxScrollX ) { + newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX; + } + if ( newY > 0 || newY < this.maxScrollY ) { + newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY; + } + + this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; + this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; + + if ( !this.moved ) { + this._execEvent('scrollStart'); + } + + this.moved = true; + + this._translate(newX, newY); + +/* REPLACE START: _move */ + + if ( timestamp - this.startTime > 300 ) { + this.startTime = timestamp; + this.startX = this.x; + this.startY = this.y; + } + +/* REPLACE END: _move */ + + }, + + _end: function (e) { + if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { + return; + } + + if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) { + e.preventDefault(); + } + + var point = e.changedTouches ? e.changedTouches[0] : e, + momentumX, + momentumY, + duration = utils.getTime() - this.startTime, + newX = Math.round(this.x), + newY = Math.round(this.y), + distanceX = Math.abs(newX - this.startX), + distanceY = Math.abs(newY - this.startY), + time = 0, + easing = ''; + + this.isInTransition = 0; + this.initiated = 0; + this.endTime = utils.getTime(); + + // reset if we are outside of the boundaries + if ( this.resetPosition(this.options.bounceTime) ) { + return; + } + + this.scrollTo(newX, newY); // ensures that the last position is rounded + + // we scrolled less than 10 pixels + if ( !this.moved ) { + if ( this.options.tap ) { + utils.tap(e, this.options.tap); + } + + if ( this.options.click ) { + utils.click(e); + } + + this._execEvent('scrollCancel'); + return; + } + + if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) { + this._execEvent('flick'); + return; + } + + // start momentum animation if needed + if ( this.options.momentum && duration < 300 ) { + momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 }; + momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 }; + newX = momentumX.destination; + newY = momentumY.destination; + time = Math.max(momentumX.duration, momentumY.duration); + this.isInTransition = 1; + } + + + if ( this.options.snap ) { + var snap = this._nearestSnap(newX, newY); + this.currentPage = snap; + time = this.options.snapSpeed || Math.max( + Math.max( + Math.min(Math.abs(newX - snap.x), 1000), + Math.min(Math.abs(newY - snap.y), 1000) + ), 300); + newX = snap.x; + newY = snap.y; + + this.directionX = 0; + this.directionY = 0; + easing = this.options.bounceEasing; + } + +// INSERT POINT: _end + + if ( newX != this.x || newY != this.y ) { + // change easing function when scroller goes out of the boundaries + if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) { + easing = utils.ease.quadratic; + } + + this.scrollTo(newX, newY, time, easing); + return; + } + + this._execEvent('scrollEnd'); + }, + + _resize: function () { + var that = this; + + clearTimeout(this.resizeTimeout); + + this.resizeTimeout = setTimeout(function () { + that.refresh(); + }, this.options.resizePolling); + }, + + resetPosition: function (time) { + var x = this.x, + y = this.y; + + time = time || 0; + + if ( !this.hasHorizontalScroll || this.x > 0 ) { + x = 0; + } else if ( this.x < this.maxScrollX ) { + x = this.maxScrollX; + } + + if ( !this.hasVerticalScroll || this.y > 0 ) { + y = 0; + } else if ( this.y < this.maxScrollY ) { + y = this.maxScrollY; + } + + if ( x == this.x && y == this.y ) { + return false; + } + + this.scrollTo(x, y, time, this.options.bounceEasing); + + return true; + }, + + disable: function () { + this.enabled = false; + }, + + enable: function () { + this.enabled = true; + }, + + refresh: function () { + var rf = this.wrapper.offsetHeight; // Force reflow + + this.wrapperWidth = this.wrapper.clientWidth; + this.wrapperHeight = this.wrapper.clientHeight; + +/* REPLACE START: refresh */ + this.scrollerWidth = Math.round(this.scroller.offsetWidth * this.scale); + this.scrollerHeight = Math.round(this.scroller.offsetHeight * this.scale); + + this.maxScrollX = this.wrapperWidth - this.scrollerWidth; + this.maxScrollY = this.wrapperHeight - this.scrollerHeight; +/* REPLACE END: refresh */ + + this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0; + this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0; + + if ( !this.hasHorizontalScroll ) { + this.maxScrollX = 0; + this.scrollerWidth = this.wrapperWidth; + } + + if ( !this.hasVerticalScroll ) { + this.maxScrollY = 0; + this.scrollerHeight = this.wrapperHeight; + } + + this.endTime = 0; + this.directionX = 0; + this.directionY = 0; + + this.wrapperOffset = utils.offset(this.wrapper); + + this._execEvent('refresh'); + + this.resetPosition(); + +// INSERT POINT: _refresh + + }, + + on: function (type, fn) { + if ( !this._events[type] ) { + this._events[type] = []; + } + + this._events[type].push(fn); + }, + + off: function (type, fn) { + if ( !this._events[type] ) { + return; + } + + var index = this._events[type].indexOf(fn); + + if ( index > -1 ) { + this._events[type].splice(index, 1); + } + }, + + _execEvent: function (type) { + if ( !this._events[type] ) { + return; + } + + var i = 0, + l = this._events[type].length; + + if ( !l ) { + return; + } + + for ( ; i < l; i++ ) { + this._events[type][i].apply(this, [].slice.call(arguments, 1)); + } + }, + + scrollBy: function (x, y, time, easing) { + x = this.x + x; + y = this.y + y; + time = time || 0; + + this.scrollTo(x, y, time, easing); + }, + + scrollTo: function (x, y, time, easing) { + easing = easing || utils.ease.circular; + + this.isInTransition = this.options.useTransition && time > 0; + + if ( !time || (this.options.useTransition && easing.style) ) { + this._transitionTimingFunction(easing.style); + this._transitionTime(time); + this._translate(x, y); + } else { + this._animate(x, y, time, easing.fn); + } + }, + + scrollToElement: function (el, time, offsetX, offsetY, easing) { + el = el.nodeType ? el : this.scroller.querySelector(el); + + if ( !el ) { + return; + } + + var pos = utils.offset(el); + + pos.left -= this.wrapperOffset.left; + pos.top -= this.wrapperOffset.top; + + // if offsetX/Y are true we center the element to the screen + if ( offsetX === true ) { + offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2); + } + if ( offsetY === true ) { + offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2); + } + + pos.left -= offsetX || 0; + pos.top -= offsetY || 0; + + pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left; + pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top; + + time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time; + + this.scrollTo(pos.left, pos.top, time, easing); + }, + + _transitionTime: function (time) { + time = time || 0; + + this.scrollerStyle[utils.style.transitionDuration] = time + 'ms'; + + if ( !time && utils.isBadAndroid ) { + this.scrollerStyle[utils.style.transitionDuration] = '0.001s'; + } + + + if ( this.indicators ) { + for ( var i = this.indicators.length; i--; ) { + this.indicators[i].transitionTime(time); + } + } + + +// INSERT POINT: _transitionTime + + }, + + _transitionTimingFunction: function (easing) { + this.scrollerStyle[utils.style.transitionTimingFunction] = easing; + + + if ( this.indicators ) { + for ( var i = this.indicators.length; i--; ) { + this.indicators[i].transitionTimingFunction(easing); + } + } + + +// INSERT POINT: _transitionTimingFunction + + }, + + _translate: function (x, y) { + if ( this.options.useTransform ) { + +/* REPLACE START: _translate */ this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + this.scale + ') ' + this.translateZ;/* REPLACE END: _translate */ + + } else { + x = Math.round(x); + y = Math.round(y); + this.scrollerStyle.left = x + 'px'; + this.scrollerStyle.top = y + 'px'; + } + + this.x = x; + this.y = y; + + + if ( this.indicators ) { + for ( var i = this.indicators.length; i--; ) { + this.indicators[i].updatePosition(); + } + } + + +// INSERT POINT: _translate + + }, + + _initEvents: function (remove) { + var eventType = remove ? utils.removeEvent : utils.addEvent, + target = this.options.bindToWrapper ? this.wrapper : window; + + eventType(window, 'orientationchange', this); + eventType(window, 'resize', this); + + if ( this.options.click ) { + eventType(this.wrapper, 'click', this, true); + } + + if ( !this.options.disableMouse ) { + eventType(this.wrapper, 'mousedown', this); + eventType(target, 'mousemove', this); + eventType(target, 'mousecancel', this); + eventType(target, 'mouseup', this); + } + + if ( utils.hasPointer && !this.options.disablePointer ) { + eventType(this.wrapper, 'MSPointerDown', this); + eventType(target, 'MSPointerMove', this); + eventType(target, 'MSPointerCancel', this); + eventType(target, 'MSPointerUp', this); + } + + if ( utils.hasTouch && !this.options.disableTouch ) { + eventType(this.wrapper, 'touchstart', this); + eventType(target, 'touchmove', this); + eventType(target, 'touchcancel', this); + eventType(target, 'touchend', this); + } + + eventType(this.scroller, 'transitionend', this); + eventType(this.scroller, 'webkitTransitionEnd', this); + eventType(this.scroller, 'oTransitionEnd', this); + eventType(this.scroller, 'MSTransitionEnd', this); + }, + + getComputedPosition: function () { + var matrix = window.getComputedStyle(this.scroller, null), + x, y; + + if ( this.options.useTransform ) { + matrix = matrix[utils.style.transform].split(')')[0].split(', '); + x = +(matrix[12] || matrix[4]); + y = +(matrix[13] || matrix[5]); + } else { + x = +matrix.left.replace(/[^-\d.]/g, ''); + y = +matrix.top.replace(/[^-\d.]/g, ''); + } + + return { x: x, y: y }; + }, + + _initIndicators: function () { + var interactive = this.options.interactiveScrollbars, + customStyle = typeof this.options.scrollbars != 'string', + indicators = [], + indicator; + + var that = this; + + this.indicators = []; + + if ( this.options.scrollbars ) { + // Vertical scrollbar + if ( this.options.scrollY ) { + indicator = { + el: createDefaultScrollbar('v', interactive, this.options.scrollbars), + interactive: interactive, + defaultScrollbars: true, + customStyle: customStyle, + resize: this.options.resizeScrollbars, + shrink: this.options.shrinkScrollbars, + fade: this.options.fadeScrollbars, + listenX: false + }; + + this.wrapper.appendChild(indicator.el); + indicators.push(indicator); + } + + // Horizontal scrollbar + if ( this.options.scrollX ) { + indicator = { + el: createDefaultScrollbar('h', interactive, this.options.scrollbars), + interactive: interactive, + defaultScrollbars: true, + customStyle: customStyle, + resize: this.options.resizeScrollbars, + shrink: this.options.shrinkScrollbars, + fade: this.options.fadeScrollbars, + listenY: false + }; + + this.wrapper.appendChild(indicator.el); + indicators.push(indicator); + } + } + + if ( this.options.indicators ) { + // TODO: check concat compatibility + indicators = indicators.concat(this.options.indicators); + } + + for ( var i = indicators.length; i--; ) { + this.indicators.push( new Indicator(this, indicators[i]) ); + } + + // TODO: check if we can use array.map (wide compatibility and performance issues) + function _indicatorsMap (fn) { + for ( var i = that.indicators.length; i--; ) { + fn.call(that.indicators[i]); + } + } + + if ( this.options.fadeScrollbars ) { + this.on('scrollEnd', function () { + _indicatorsMap(function () { + this.fade(); + }); + }); + + this.on('scrollCancel', function () { + _indicatorsMap(function () { + this.fade(); + }); + }); + + this.on('scrollStart', function () { + _indicatorsMap(function () { + this.fade(1); + }); + }); + + this.on('beforeScrollStart', function () { + _indicatorsMap(function () { + this.fade(1, true); + }); + }); + } + + + this.on('refresh', function () { + _indicatorsMap(function () { + this.refresh(); + }); + }); + + this.on('destroy', function () { + _indicatorsMap(function () { + this.destroy(); + }); + + delete this.indicators; + }); + }, + + _initZoom: function () { + this.scrollerStyle[utils.style.transformOrigin] = '0 0'; + }, + + _zoomStart: function (e) { + var c1 = Math.abs( e.touches[0].pageX - e.touches[1].pageX ), + c2 = Math.abs( e.touches[0].pageY - e.touches[1].pageY ); + + this.touchesDistanceStart = Math.sqrt(c1 * c1 + c2 * c2); + this.startScale = this.scale; + + this.originX = Math.abs(e.touches[0].pageX + e.touches[1].pageX) / 2 + this.wrapperOffset.left - this.x; + this.originY = Math.abs(e.touches[0].pageY + e.touches[1].pageY) / 2 + this.wrapperOffset.top - this.y; + + this._execEvent('zoomStart'); + }, + + _zoom: function (e) { + if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { + return; + } + + if ( this.options.preventDefault ) { + e.preventDefault(); + } + + var c1 = Math.abs( e.touches[0].pageX - e.touches[1].pageX ), + c2 = Math.abs( e.touches[0].pageY - e.touches[1].pageY ), + distance = Math.sqrt( c1 * c1 + c2 * c2 ), + scale = 1 / this.touchesDistanceStart * distance * this.startScale, + lastScale, + x, y; + + this.scaled = true; + + if ( scale < this.options.zoomMin ) { + scale = 0.5 * this.options.zoomMin * Math.pow(2.0, scale / this.options.zoomMin); + } else if ( scale > this.options.zoomMax ) { + scale = 2.0 * this.options.zoomMax * Math.pow(0.5, this.options.zoomMax / scale); + } + + lastScale = scale / this.startScale; + x = this.originX - this.originX * lastScale + this.startX; + y = this.originY - this.originY * lastScale + this.startY; + + this.scale = scale; + + this.scrollTo(x, y, 0); + }, + + _zoomEnd: function (e) { + if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { + return; + } + + if ( this.options.preventDefault ) { + e.preventDefault(); + } + + var newX, newY, + lastScale; + + this.isInTransition = 0; + this.initiated = 0; + + if ( this.scale > this.options.zoomMax ) { + this.scale = this.options.zoomMax; + } else if ( this.scale < this.options.zoomMin ) { + this.scale = this.options.zoomMin; + } + + // Update boundaries + this.refresh(); + + lastScale = this.scale / this.startScale; + + newX = this.originX - this.originX * lastScale + this.startX; + newY = this.originY - this.originY * lastScale + this.startY; + + if ( newX > 0 ) { + newX = 0; + } else if ( newX < this.maxScrollX ) { + newX = this.maxScrollX; + } + + if ( newY > 0 ) { + newY = 0; + } else if ( newY < this.maxScrollY ) { + newY = this.maxScrollY; + } + + if ( this.x != newX || this.y != newY ) { + this.scrollTo(newX, newY, this.options.bounceTime); + } + + this.scaled = false; + + this._execEvent('zoomEnd'); + }, + + zoom: function (scale, x, y, time) { + if ( scale < this.options.zoomMin ) { + scale = this.options.zoomMin; + } else if ( scale > this.options.zoomMax ) { + scale = this.options.zoomMax; + } + + if ( scale == this.scale ) { + return; + } + + var relScale = scale / this.scale; + + x = x === undefined ? this.wrapperWidth / 2 : x; + y = y === undefined ? this.wrapperHeight / 2 : y; + time = time === undefined ? 300 : time; + + x = x + this.wrapperOffset.left - this.x; + y = y + this.wrapperOffset.top - this.y; + + x = x - x * relScale + this.x; + y = y - y * relScale + this.y; + + this.scale = scale; + + this.refresh(); // update boundaries + + if ( x > 0 ) { + x = 0; + } else if ( x < this.maxScrollX ) { + x = this.maxScrollX; + } + + if ( y > 0 ) { + y = 0; + } else if ( y < this.maxScrollY ) { + y = this.maxScrollY; + } + + this.scrollTo(x, y, time); + }, + + _wheelZoom: function (e) { + var wheelDeltaY, + deltaScale, + that = this; + + // Execute the zoomEnd event after 400ms the wheel stopped scrolling + clearTimeout(this.wheelTimeout); + this.wheelTimeout = setTimeout(function () { + that._execEvent('zoomEnd'); + }, 400); + + if ( 'deltaX' in e ) { + wheelDeltaY = -e.deltaY / Math.abs(e.deltaY); + } else if ('wheelDeltaX' in e) { + wheelDeltaY = e.wheelDeltaY / Math.abs(e.wheelDeltaY); + } else if('wheelDelta' in e) { + wheelDeltaY = e.wheelDelta / Math.abs(e.wheelDelta); + } else if ('detail' in e) { + wheelDeltaY = -e.detail / Math.abs(e.wheelDelta); + } else { + return; + } + + deltaScale = this.scale + wheelDeltaY / 5; + + this.zoom(deltaScale, e.pageX, e.pageY, 0); + }, + + _initWheel: function () { + utils.addEvent(this.wrapper, 'wheel', this); + utils.addEvent(this.wrapper, 'mousewheel', this); + utils.addEvent(this.wrapper, 'DOMMouseScroll', this); + + this.on('destroy', function () { + utils.removeEvent(this.wrapper, 'wheel', this); + utils.removeEvent(this.wrapper, 'mousewheel', this); + utils.removeEvent(this.wrapper, 'DOMMouseScroll', this); + }); + }, + + _wheel: function (e) { + if ( !this.enabled ) { + return; + } + + e.preventDefault(); + e.stopPropagation(); + + var wheelDeltaX, wheelDeltaY, + newX, newY, + that = this; + + if ( this.wheelTimeout === undefined ) { + that._execEvent('scrollStart'); + } + + // Execute the scrollEnd event after 400ms the wheel stopped scrolling + clearTimeout(this.wheelTimeout); + this.wheelTimeout = setTimeout(function () { + that._execEvent('scrollEnd'); + that.wheelTimeout = undefined; + }, 400); + + if ( 'deltaX' in e ) { + wheelDeltaX = -e.deltaX; + wheelDeltaY = -e.deltaY; + } else if ( 'wheelDeltaX' in e ) { + wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed; + wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed; + } else if ( 'wheelDelta' in e ) { + wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed; + } else if ( 'detail' in e ) { + wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed; + } else { + return; + } + + wheelDeltaX *= this.options.invertWheelDirection; + wheelDeltaY *= this.options.invertWheelDirection; + + if ( !this.hasVerticalScroll ) { + wheelDeltaX = wheelDeltaY; + wheelDeltaY = 0; + } + + if ( this.options.snap ) { + newX = this.currentPage.pageX; + newY = this.currentPage.pageY; + + if ( wheelDeltaX > 0 ) { + newX--; + } else if ( wheelDeltaX < 0 ) { + newX++; + } + + if ( wheelDeltaY > 0 ) { + newY--; + } else if ( wheelDeltaY < 0 ) { + newY++; + } + + this.goToPage(newX, newY); + + return; + } + + newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0); + newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0); + + if ( newX > 0 ) { + newX = 0; + } else if ( newX < this.maxScrollX ) { + newX = this.maxScrollX; + } + + if ( newY > 0 ) { + newY = 0; + } else if ( newY < this.maxScrollY ) { + newY = this.maxScrollY; + } + + this.scrollTo(newX, newY, 0); + +// INSERT POINT: _wheel + }, + + _initSnap: function () { + this.currentPage = {}; + + if ( typeof this.options.snap == 'string' ) { + this.options.snap = this.scroller.querySelectorAll(this.options.snap); + } + + this.on('refresh', function () { + var i = 0, l, + m = 0, n, + cx, cy, + x = 0, y, + stepX = this.options.snapStepX || this.wrapperWidth, + stepY = this.options.snapStepY || this.wrapperHeight, + el; + + this.pages = []; + + if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) { + return; + } + + if ( this.options.snap === true ) { + cx = Math.round( stepX / 2 ); + cy = Math.round( stepY / 2 ); + + while ( x > -this.scrollerWidth ) { + this.pages[i] = []; + l = 0; + y = 0; + + while ( y > -this.scrollerHeight ) { + this.pages[i][l] = { + x: Math.max(x, this.maxScrollX), + y: Math.max(y, this.maxScrollY), + width: stepX, + height: stepY, + cx: x - cx, + cy: y - cy + }; + + y -= stepY; + l++; + } + + x -= stepX; + i++; + } + } else { + el = this.options.snap; + l = el.length; + n = -1; + + for ( ; i < l; i++ ) { + if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) { + m = 0; + n++; + } + + if ( !this.pages[m] ) { + this.pages[m] = []; + } + + x = Math.max(-el[i].offsetLeft, this.maxScrollX); + y = Math.max(-el[i].offsetTop, this.maxScrollY); + cx = x - Math.round(el[i].offsetWidth / 2); + cy = y - Math.round(el[i].offsetHeight / 2); + + this.pages[m][n] = { + x: x, + y: y, + width: el[i].offsetWidth, + height: el[i].offsetHeight, + cx: cx, + cy: cy + }; + + if ( x > this.maxScrollX ) { + m++; + } + } + } + + this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0); + + // Update snap threshold if needed + if ( this.options.snapThreshold % 1 === 0 ) { + this.snapThresholdX = this.options.snapThreshold; + this.snapThresholdY = this.options.snapThreshold; + } else { + this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold); + this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold); + } + }); + + this.on('flick', function () { + var time = this.options.snapSpeed || Math.max( + Math.max( + Math.min(Math.abs(this.x - this.startX), 1000), + Math.min(Math.abs(this.y - this.startY), 1000) + ), 300); + + this.goToPage( + this.currentPage.pageX + this.directionX, + this.currentPage.pageY + this.directionY, + time + ); + }); + }, + + _nearestSnap: function (x, y) { + if ( !this.pages.length ) { + return { x: 0, y: 0, pageX: 0, pageY: 0 }; + } + + var i = 0, + l = this.pages.length, + m = 0; + + // Check if we exceeded the snap threshold + if ( Math.abs(x - this.absStartX) < this.snapThresholdX && + Math.abs(y - this.absStartY) < this.snapThresholdY ) { + return this.currentPage; + } + + if ( x > 0 ) { + x = 0; + } else if ( x < this.maxScrollX ) { + x = this.maxScrollX; + } + + if ( y > 0 ) { + y = 0; + } else if ( y < this.maxScrollY ) { + y = this.maxScrollY; + } + + for ( ; i < l; i++ ) { + if ( x >= this.pages[i][0].cx ) { + x = this.pages[i][0].x; + break; + } + } + + l = this.pages[i].length; + + for ( ; m < l; m++ ) { + if ( y >= this.pages[0][m].cy ) { + y = this.pages[0][m].y; + break; + } + } + + if ( i == this.currentPage.pageX ) { + i += this.directionX; + + if ( i < 0 ) { + i = 0; + } else if ( i >= this.pages.length ) { + i = this.pages.length - 1; + } + + x = this.pages[i][0].x; + } + + if ( m == this.currentPage.pageY ) { + m += this.directionY; + + if ( m < 0 ) { + m = 0; + } else if ( m >= this.pages[0].length ) { + m = this.pages[0].length - 1; + } + + y = this.pages[0][m].y; + } + + return { + x: x, + y: y, + pageX: i, + pageY: m + }; + }, + + goToPage: function (x, y, time, easing) { + easing = easing || this.options.bounceEasing; + + if ( x >= this.pages.length ) { + x = this.pages.length - 1; + } else if ( x < 0 ) { + x = 0; + } + + if ( y >= this.pages[x].length ) { + y = this.pages[x].length - 1; + } else if ( y < 0 ) { + y = 0; + } + + var posX = this.pages[x][y].x, + posY = this.pages[x][y].y; + + time = time === undefined ? this.options.snapSpeed || Math.max( + Math.max( + Math.min(Math.abs(posX - this.x), 1000), + Math.min(Math.abs(posY - this.y), 1000) + ), 300) : time; + + this.currentPage = { + x: posX, + y: posY, + pageX: x, + pageY: y + }; + + this.scrollTo(posX, posY, time, easing); + }, + + next: function (time, easing) { + var x = this.currentPage.pageX, + y = this.currentPage.pageY; + + x++; + + if ( x >= this.pages.length && this.hasVerticalScroll ) { + x = 0; + y++; + } + + this.goToPage(x, y, time, easing); + }, + + prev: function (time, easing) { + var x = this.currentPage.pageX, + y = this.currentPage.pageY; + + x--; + + if ( x < 0 && this.hasVerticalScroll ) { + x = 0; + y--; + } + + this.goToPage(x, y, time, easing); + }, + + _initKeys: function (e) { + // default key bindings + var keys = { + pageUp: 33, + pageDown: 34, + end: 35, + home: 36, + left: 37, + up: 38, + right: 39, + down: 40 + }; + var i; + + // if you give me characters I give you keycode + if ( typeof this.options.keyBindings == 'object' ) { + for ( i in this.options.keyBindings ) { + if ( typeof this.options.keyBindings[i] == 'string' ) { + this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0); + } + } + } else { + this.options.keyBindings = {}; + } + + for ( i in keys ) { + this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i]; + } + + utils.addEvent(window, 'keydown', this); + + this.on('destroy', function () { + utils.removeEvent(window, 'keydown', this); + }); + }, + + _key: function (e) { + if ( !this.enabled ) { + return; + } + + var snap = this.options.snap, // we are using this alot, better to cache it + newX = snap ? this.currentPage.pageX : this.x, + newY = snap ? this.currentPage.pageY : this.y, + now = utils.getTime(), + prevTime = this.keyTime || 0, + acceleration = 0.250, + pos; + + if ( this.options.useTransition && this.isInTransition ) { + pos = this.getComputedPosition(); + + this._translate(Math.round(pos.x), Math.round(pos.y)); + this.isInTransition = false; + } + + this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0; + + switch ( e.keyCode ) { + case this.options.keyBindings.pageUp: + if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) { + newX += snap ? 1 : this.wrapperWidth; + } else { + newY += snap ? 1 : this.wrapperHeight; + } + break; + case this.options.keyBindings.pageDown: + if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) { + newX -= snap ? 1 : this.wrapperWidth; + } else { + newY -= snap ? 1 : this.wrapperHeight; + } + break; + case this.options.keyBindings.end: + newX = snap ? this.pages.length-1 : this.maxScrollX; + newY = snap ? this.pages[0].length-1 : this.maxScrollY; + break; + case this.options.keyBindings.home: + newX = 0; + newY = 0; + break; + case this.options.keyBindings.left: + newX += snap ? -1 : 5 + this.keyAcceleration>>0; + break; + case this.options.keyBindings.up: + newY += snap ? 1 : 5 + this.keyAcceleration>>0; + break; + case this.options.keyBindings.right: + newX -= snap ? -1 : 5 + this.keyAcceleration>>0; + break; + case this.options.keyBindings.down: + newY -= snap ? 1 : 5 + this.keyAcceleration>>0; + break; + default: + return; + } + + if ( snap ) { + this.goToPage(newX, newY); + return; + } + + if ( newX > 0 ) { + newX = 0; + this.keyAcceleration = 0; + } else if ( newX < this.maxScrollX ) { + newX = this.maxScrollX; + this.keyAcceleration = 0; + } + + if ( newY > 0 ) { + newY = 0; + this.keyAcceleration = 0; + } else if ( newY < this.maxScrollY ) { + newY = this.maxScrollY; + this.keyAcceleration = 0; + } + + this.scrollTo(newX, newY, 0); + + this.keyTime = now; + }, + + _animate: function (destX, destY, duration, easingFn) { + var that = this, + startX = this.x, + startY = this.y, + startTime = utils.getTime(), + destTime = startTime + duration; + + function step () { + var now = utils.getTime(), + newX, newY, + easing; + + if ( now >= destTime ) { + that.isAnimating = false; + that._translate(destX, destY); + + if ( !that.resetPosition(that.options.bounceTime) ) { + that._execEvent('scrollEnd'); + } + + return; + } + + now = ( now - startTime ) / duration; + easing = easingFn(now); + newX = ( destX - startX ) * easing + startX; + newY = ( destY - startY ) * easing + startY; + that._translate(newX, newY); + + if ( that.isAnimating ) { + rAF(step); + } + } + + this.isAnimating = true; + step(); + }, + handleEvent: function (e) { + switch ( e.type ) { + case 'touchstart': + case 'MSPointerDown': + case 'mousedown': + this._start(e); + + if ( this.options.zoom && e.touches && e.touches.length > 1 ) { + this._zoomStart(e); + } + break; + case 'touchmove': + case 'MSPointerMove': + case 'mousemove': + if ( this.options.zoom && e.touches && e.touches[1] ) { + this._zoom(e); + return; + } + this._move(e); + break; + case 'touchend': + case 'MSPointerUp': + case 'mouseup': + case 'touchcancel': + case 'MSPointerCancel': + case 'mousecancel': + if ( this.scaled ) { + this._zoomEnd(e); + return; + } + this._end(e); + break; + case 'orientationchange': + case 'resize': + this._resize(); + break; + case 'transitionend': + case 'webkitTransitionEnd': + case 'oTransitionEnd': + case 'MSTransitionEnd': + this._transitionEnd(e); + break; + case 'wheel': + case 'DOMMouseScroll': + case 'mousewheel': + if ( this.options.wheelAction == 'zoom' ) { + this._wheelZoom(e); + return; + } + this._wheel(e); + break; + case 'keydown': + this._key(e); + break; + } + } + +}; +function createDefaultScrollbar (direction, interactive, type) { + var scrollbar = document.createElement('div'), + indicator = document.createElement('div'); + + if ( type === true ) { + scrollbar.style.cssText = 'position:absolute;z-index:9999'; + indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px'; + } + + indicator.className = 'iScrollIndicator'; + + if ( direction == 'h' ) { + if ( type === true ) { + scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0'; + indicator.style.height = '100%'; + } + scrollbar.className = 'iScrollHorizontalScrollbar'; + } else { + if ( type === true ) { + scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px'; + indicator.style.width = '100%'; + } + scrollbar.className = 'iScrollVerticalScrollbar'; + } + + scrollbar.style.cssText += ';overflow:hidden'; + + if ( !interactive ) { + scrollbar.style.pointerEvents = 'none'; + } + + scrollbar.appendChild(indicator); + + return scrollbar; +} + +function Indicator (scroller, options) { + this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el; + this.wrapperStyle = this.wrapper.style; + this.indicator = this.wrapper.children[0]; + this.indicatorStyle = this.indicator.style; + this.scroller = scroller; + + this.options = { + listenX: true, + listenY: true, + interactive: false, + resize: true, + defaultScrollbars: false, + shrink: false, + fade: false, + speedRatioX: 0, + speedRatioY: 0 + }; + + for ( var i in options ) { + this.options[i] = options[i]; + } + + this.sizeRatioX = 1; + this.sizeRatioY = 1; + this.maxPosX = 0; + this.maxPosY = 0; + + if ( this.options.interactive ) { + if ( !this.options.disableTouch ) { + utils.addEvent(this.indicator, 'touchstart', this); + utils.addEvent(window, 'touchend', this); + } + if ( !this.options.disablePointer ) { + utils.addEvent(this.indicator, 'MSPointerDown', this); + utils.addEvent(window, 'MSPointerUp', this); + } + if ( !this.options.disableMouse ) { + utils.addEvent(this.indicator, 'mousedown', this); + utils.addEvent(window, 'mouseup', this); + } + } + + if ( this.options.fade ) { + this.wrapperStyle[utils.style.transform] = this.scroller.translateZ; + this.wrapperStyle[utils.style.transitionDuration] = utils.isBadAndroid ? '0.001s' : '0ms'; + this.wrapperStyle.opacity = '0'; + } +} + +Indicator.prototype = { + handleEvent: function (e) { + switch ( e.type ) { + case 'touchstart': + case 'MSPointerDown': + case 'mousedown': + this._start(e); + break; + case 'touchmove': + case 'MSPointerMove': + case 'mousemove': + this._move(e); + break; + case 'touchend': + case 'MSPointerUp': + case 'mouseup': + case 'touchcancel': + case 'MSPointerCancel': + case 'mousecancel': + this._end(e); + break; + } + }, + + destroy: function () { + if ( this.options.interactive ) { + utils.removeEvent(this.indicator, 'touchstart', this); + utils.removeEvent(this.indicator, 'MSPointerDown', this); + utils.removeEvent(this.indicator, 'mousedown', this); + + utils.removeEvent(window, 'touchmove', this); + utils.removeEvent(window, 'MSPointerMove', this); + utils.removeEvent(window, 'mousemove', this); + + utils.removeEvent(window, 'touchend', this); + utils.removeEvent(window, 'MSPointerUp', this); + utils.removeEvent(window, 'mouseup', this); + } + + if ( this.options.defaultScrollbars ) { + this.wrapper.parentNode.removeChild(this.wrapper); + } + }, + + _start: function (e) { + var point = e.touches ? e.touches[0] : e; + + e.preventDefault(); + e.stopPropagation(); + + this.transitionTime(); + + this.initiated = true; + this.moved = false; + this.lastPointX = point.pageX; + this.lastPointY = point.pageY; + + this.startTime = utils.getTime(); + + if ( !this.options.disableTouch ) { + utils.addEvent(window, 'touchmove', this); + } + if ( !this.options.disablePointer ) { + utils.addEvent(window, 'MSPointerMove', this); + } + if ( !this.options.disableMouse ) { + utils.addEvent(window, 'mousemove', this); + } + + this.scroller._execEvent('beforeScrollStart'); + }, + + _move: function (e) { + var point = e.touches ? e.touches[0] : e, + deltaX, deltaY, + newX, newY, + timestamp = utils.getTime(); + + if ( !this.moved ) { + this.scroller._execEvent('scrollStart'); + } + + this.moved = true; + + deltaX = point.pageX - this.lastPointX; + this.lastPointX = point.pageX; + + deltaY = point.pageY - this.lastPointY; + this.lastPointY = point.pageY; + + newX = this.x + deltaX; + newY = this.y + deltaY; + + this._pos(newX, newY); + +// INSERT POINT: indicator._move + + e.preventDefault(); + e.stopPropagation(); + }, + + _end: function (e) { + if ( !this.initiated ) { + return; + } + + this.initiated = false; + + e.preventDefault(); + e.stopPropagation(); + + utils.removeEvent(window, 'touchmove', this); + utils.removeEvent(window, 'MSPointerMove', this); + utils.removeEvent(window, 'mousemove', this); + + if ( this.scroller.options.snap ) { + var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y); + + var time = this.options.snapSpeed || Math.max( + Math.max( + Math.min(Math.abs(this.scroller.x - snap.x), 1000), + Math.min(Math.abs(this.scroller.y - snap.y), 1000) + ), 300); + + if ( this.scroller.x != snap.x || this.scroller.y != snap.y ) { + this.scroller.directionX = 0; + this.scroller.directionY = 0; + this.scroller.currentPage = snap; + this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing); + } + } + + if ( this.moved ) { + this.scroller._execEvent('scrollEnd'); + } + }, + + transitionTime: function (time) { + time = time || 0; + this.indicatorStyle[utils.style.transitionDuration] = time + 'ms'; + + if ( !time && utils.isBadAndroid ) { + this.indicatorStyle[utils.style.transitionDuration] = '0.001s'; + } + }, + + transitionTimingFunction: function (easing) { + this.indicatorStyle[utils.style.transitionTimingFunction] = easing; + }, + + refresh: function () { + this.transitionTime(); + + if ( this.options.listenX && !this.options.listenY ) { + this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none'; + } else if ( this.options.listenY && !this.options.listenX ) { + this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none'; + } else { + this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none'; + } + + if ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) { + utils.addClass(this.wrapper, 'iScrollBothScrollbars'); + utils.removeClass(this.wrapper, 'iScrollLoneScrollbar'); + + if ( this.options.defaultScrollbars && this.options.customStyle ) { + if ( this.options.listenX ) { + this.wrapper.style.right = '8px'; + } else { + this.wrapper.style.bottom = '8px'; + } + } + } else { + utils.removeClass(this.wrapper, 'iScrollBothScrollbars'); + utils.addClass(this.wrapper, 'iScrollLoneScrollbar'); + + if ( this.options.defaultScrollbars && this.options.customStyle ) { + if ( this.options.listenX ) { + this.wrapper.style.right = '2px'; + } else { + this.wrapper.style.bottom = '2px'; + } + } + } + + var r = this.wrapper.offsetHeight; // force refresh + + if ( this.options.listenX ) { + this.wrapperWidth = this.wrapper.clientWidth; + if ( this.options.resize ) { + this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8); + this.indicatorStyle.width = this.indicatorWidth + 'px'; + } else { + this.indicatorWidth = this.indicator.clientWidth; + } + + this.maxPosX = this.wrapperWidth - this.indicatorWidth; + + if ( this.options.shrink == 'clip' ) { + this.minBoundaryX = -this.indicatorWidth + 8; + this.maxBoundaryX = this.wrapperWidth - 8; + } else { + this.minBoundaryX = 0; + this.maxBoundaryX = this.maxPosX; + } + + this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX)); + } + + if ( this.options.listenY ) { + this.wrapperHeight = this.wrapper.clientHeight; + if ( this.options.resize ) { + this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8); + this.indicatorStyle.height = this.indicatorHeight + 'px'; + } else { + this.indicatorHeight = this.indicator.clientHeight; + } + + this.maxPosY = this.wrapperHeight - this.indicatorHeight; + + if ( this.options.shrink == 'clip' ) { + this.minBoundaryY = -this.indicatorHeight + 8; + this.maxBoundaryY = this.wrapperHeight - 8; + } else { + this.minBoundaryY = 0; + this.maxBoundaryY = this.maxPosY; + } + + this.maxPosY = this.wrapperHeight - this.indicatorHeight; + this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY)); + } + + this.updatePosition(); + }, + + updatePosition: function () { + var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0, + y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0; + + if ( !this.options.ignoreBoundaries ) { + if ( x < this.minBoundaryX ) { + if ( this.options.shrink == 'scale' ) { + this.width = Math.max(this.indicatorWidth + x, 8); + this.indicatorStyle.width = this.width + 'px'; + } + x = this.minBoundaryX; + } else if ( x > this.maxBoundaryX ) { + if ( this.options.shrink == 'scale' ) { + this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8); + this.indicatorStyle.width = this.width + 'px'; + x = this.maxPosX + this.indicatorWidth - this.width; + } else { + x = this.maxBoundaryX; + } + } else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) { + this.width = this.indicatorWidth; + this.indicatorStyle.width = this.width + 'px'; + } + + if ( y < this.minBoundaryY ) { + if ( this.options.shrink == 'scale' ) { + this.height = Math.max(this.indicatorHeight + y * 3, 8); + this.indicatorStyle.height = this.height + 'px'; + } + y = this.minBoundaryY; + } else if ( y > this.maxBoundaryY ) { + if ( this.options.shrink == 'scale' ) { + this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8); + this.indicatorStyle.height = this.height + 'px'; + y = this.maxPosY + this.indicatorHeight - this.height; + } else { + y = this.maxBoundaryY; + } + } else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) { + this.height = this.indicatorHeight; + this.indicatorStyle.height = this.height + 'px'; + } + } + + this.x = x; + this.y = y; + + if ( this.scroller.options.useTransform ) { + this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ; + } else { + this.indicatorStyle.left = x + 'px'; + this.indicatorStyle.top = y + 'px'; + } + }, + + _pos: function (x, y) { + if ( x < 0 ) { + x = 0; + } else if ( x > this.maxPosX ) { + x = this.maxPosX; + } + + if ( y < 0 ) { + y = 0; + } else if ( y > this.maxPosY ) { + y = this.maxPosY; + } + + x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x; + y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y; + + this.scroller.scrollTo(x, y); + }, + + fade: function (val, hold) { + if ( hold && !this.visible ) { + return; + } + + clearTimeout(this.fadeTimeout); + this.fadeTimeout = null; + + var time = val ? 250 : 500, + delay = val ? 0 : 300; + + val = val ? '1' : '0'; + + this.wrapperStyle[utils.style.transitionDuration] = time + 'ms'; + + this.fadeTimeout = setTimeout((function (val) { + this.wrapperStyle.opacity = val; + this.visible = +val; + }).bind(this, val), delay); + } +}; + +IScroll.utils = utils; + +if ( typeof module != 'undefined' && module.exports ) { + module.exports = IScroll; +} else { + window.IScroll = IScroll; +} + +})(window, document, Math); \ No newline at end of file diff --git a/assets/html/iscroll.js b/assets/html/iscroll.js new file mode 100644 index 0000000..0db50c6 --- /dev/null +++ b/assets/html/iscroll.js @@ -0,0 +1,1988 @@ +/*! iScroll v5.1.1 ~ (c) 2008-2014 Matteo Spinelli ~ http://cubiq.org/license */ +(function (window, document, Math) { +var rAF = window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function (callback) { window.setTimeout(callback, 1000 / 60); }; + +var utils = (function () { + var me = {}; + + var _elementStyle = document.createElement('div').style; + var _vendor = (function () { + var vendors = ['t', 'webkitT', 'MozT', 'msT', 'OT'], + transform, + i = 0, + l = vendors.length; + + for ( ; i < l; i++ ) { + transform = vendors[i] + 'ransform'; + if ( transform in _elementStyle ) return vendors[i].substr(0, vendors[i].length-1); + } + + return false; + })(); + + function _prefixStyle (style) { + if ( _vendor === false ) return false; + if ( _vendor === '' ) return style; + return _vendor + style.charAt(0).toUpperCase() + style.substr(1); + } + + me.getTime = Date.now || function getTime () { return new Date().getTime(); }; + + me.extend = function (target, obj) { + for ( var i in obj ) { + target[i] = obj[i]; + } + }; + + me.addEvent = function (el, type, fn, capture) { + el.addEventListener(type, fn, !!capture); + }; + + me.removeEvent = function (el, type, fn, capture) { + el.removeEventListener(type, fn, !!capture); + }; + + me.momentum = function (current, start, time, lowerMargin, wrapperSize, deceleration) { + var distance = current - start, + speed = Math.abs(distance) / time, + destination, + duration; + + deceleration = deceleration === undefined ? 0.0006 : deceleration; + + destination = current + ( speed * speed ) / ( 2 * deceleration ) * ( distance < 0 ? -1 : 1 ); + duration = speed / deceleration; + + if ( destination < lowerMargin ) { + destination = wrapperSize ? lowerMargin - ( wrapperSize / 2.5 * ( speed / 8 ) ) : lowerMargin; + distance = Math.abs(destination - current); + duration = distance / speed; + } else if ( destination > 0 ) { + destination = wrapperSize ? wrapperSize / 2.5 * ( speed / 8 ) : 0; + distance = Math.abs(current) + destination; + duration = distance / speed; + } + + return { + destination: Math.round(destination), + duration: duration + }; + }; + + var _transform = _prefixStyle('transform'); + + me.extend(me, { + hasTransform: _transform !== false, + hasPerspective: _prefixStyle('perspective') in _elementStyle, + hasTouch: 'ontouchstart' in window, + hasPointer: navigator.msPointerEnabled, + hasTransition: _prefixStyle('transition') in _elementStyle + }); + + // This should find all Android browsers lower than build 535.19 (both stock browser and webview) + me.isBadAndroid = /Android /.test(window.navigator.appVersion) && !(/Chrome\/\d/.test(window.navigator.appVersion)); + + me.extend(me.style = {}, { + transform: _transform, + transitionTimingFunction: _prefixStyle('transitionTimingFunction'), + transitionDuration: _prefixStyle('transitionDuration'), + transitionDelay: _prefixStyle('transitionDelay'), + transformOrigin: _prefixStyle('transformOrigin') + }); + + me.hasClass = function (e, c) { + var re = new RegExp("(^|\\s)" + c + "(\\s|$)"); + return re.test(e.className); + }; + + me.addClass = function (e, c) { + if ( me.hasClass(e, c) ) { + return; + } + + var newclass = e.className.split(' '); + newclass.push(c); + e.className = newclass.join(' '); + }; + + me.removeClass = function (e, c) { + if ( !me.hasClass(e, c) ) { + return; + } + + var re = new RegExp("(^|\\s)" + c + "(\\s|$)", 'g'); + e.className = e.className.replace(re, ' '); + }; + + me.offset = function (el) { + var left = -el.offsetLeft, + top = -el.offsetTop; + + // jshint -W084 + while (el = el.offsetParent) { + left -= el.offsetLeft; + top -= el.offsetTop; + } + // jshint +W084 + + return { + left: left, + top: top + }; + }; + + me.preventDefaultException = function (el, exceptions) { + for ( var i in exceptions ) { + if ( exceptions[i].test(el[i]) ) { + return true; + } + } + + return false; + }; + + me.extend(me.eventType = {}, { + touchstart: 1, + touchmove: 1, + touchend: 1, + + mousedown: 2, + mousemove: 2, + mouseup: 2, + + MSPointerDown: 3, + MSPointerMove: 3, + MSPointerUp: 3 + }); + + me.extend(me.ease = {}, { + quadratic: { + style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)', + fn: function (k) { + return k * ( 2 - k ); + } + }, + circular: { + style: 'cubic-bezier(0.1, 0.57, 0.1, 1)', // Not properly "circular" but this looks better, it should be (0.075, 0.82, 0.165, 1) + fn: function (k) { + return Math.sqrt( 1 - ( --k * k ) ); + } + }, + back: { + style: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)', + fn: function (k) { + var b = 4; + return ( k = k - 1 ) * k * ( ( b + 1 ) * k + b ) + 1; + } + }, + bounce: { + style: '', + fn: function (k) { + if ( ( k /= 1 ) < ( 1 / 2.75 ) ) { + return 7.5625 * k * k; + } else if ( k < ( 2 / 2.75 ) ) { + return 7.5625 * ( k -= ( 1.5 / 2.75 ) ) * k + 0.75; + } else if ( k < ( 2.5 / 2.75 ) ) { + return 7.5625 * ( k -= ( 2.25 / 2.75 ) ) * k + 0.9375; + } else { + return 7.5625 * ( k -= ( 2.625 / 2.75 ) ) * k + 0.984375; + } + } + }, + elastic: { + style: '', + fn: function (k) { + var f = 0.22, + e = 0.4; + + if ( k === 0 ) { return 0; } + if ( k == 1 ) { return 1; } + + return ( e * Math.pow( 2, - 10 * k ) * Math.sin( ( k - f / 4 ) * ( 2 * Math.PI ) / f ) + 1 ); + } + } + }); + + me.tap = function (e, eventName) { + var ev = document.createEvent('Event'); + ev.initEvent(eventName, true, true); + ev.pageX = e.pageX; + ev.pageY = e.pageY; + e.target.dispatchEvent(ev); + }; + + me.click = function (e) { + var target = e.target, + ev; + + if ( !(/(SELECT|INPUT|TEXTAREA)/i).test(target.tagName) ) { + ev = document.createEvent('MouseEvents'); + ev.initMouseEvent('click', true, true, e.view, 1, + target.screenX, target.screenY, target.clientX, target.clientY, + e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, + 0, null); + + ev._constructed = true; + target.dispatchEvent(ev); + } + }; + + return me; +})(); + +function IScroll (el, options) { + this.wrapper = typeof el == 'string' ? document.querySelector(el) : el; + this.scroller = this.wrapper.children[0]; + this.scrollerStyle = this.scroller.style; // cache style for better performance + + this.options = { + + resizeScrollbars: true, + + mouseWheelSpeed: 20, + + snapThreshold: 0.334, + +// INSERT POINT: OPTIONS + + startX: 0, + startY: 0, + scrollY: true, + directionLockThreshold: 5, + momentum: true, + + bounce: true, + bounceTime: 600, + bounceEasing: '', + + preventDefault: true, + preventDefaultException: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ }, + + HWCompositing: true, + useTransition: true, + useTransform: true + }; + + for ( var i in options ) { + this.options[i] = options[i]; + } + + // Normalize options + this.translateZ = this.options.HWCompositing && utils.hasPerspective ? ' translateZ(0)' : ''; + + this.options.useTransition = utils.hasTransition && this.options.useTransition; + this.options.useTransform = utils.hasTransform && this.options.useTransform; + + this.options.eventPassthrough = this.options.eventPassthrough === true ? 'vertical' : this.options.eventPassthrough; + this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault; + + // If you want eventPassthrough I have to lock one of the axes + this.options.scrollY = this.options.eventPassthrough == 'vertical' ? false : this.options.scrollY; + this.options.scrollX = this.options.eventPassthrough == 'horizontal' ? false : this.options.scrollX; + + // With eventPassthrough we also need lockDirection mechanism + this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough; + this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold; + + this.options.bounceEasing = typeof this.options.bounceEasing == 'string' ? utils.ease[this.options.bounceEasing] || utils.ease.circular : this.options.bounceEasing; + + this.options.resizePolling = this.options.resizePolling === undefined ? 60 : this.options.resizePolling; + + if ( this.options.tap === true ) { + this.options.tap = 'tap'; + } + + if ( this.options.shrinkScrollbars == 'scale' ) { + this.options.useTransition = false; + } + + this.options.invertWheelDirection = this.options.invertWheelDirection ? -1 : 1; + +// INSERT POINT: NORMALIZATION + + // Some defaults + this.x = 0; + this.y = 0; + this.directionX = 0; + this.directionY = 0; + this._events = {}; + +// INSERT POINT: DEFAULTS + + this._init(); + this.refresh(); + + this.scrollTo(this.options.startX, this.options.startY); + this.enable(); +} + +IScroll.prototype = { + version: '5.1.1', + + _init: function () { + this._initEvents(); + + if ( this.options.scrollbars || this.options.indicators ) { + this._initIndicators(); + } + + if ( this.options.mouseWheel ) { + this._initWheel(); + } + + if ( this.options.snap ) { + this._initSnap(); + } + + if ( this.options.keyBindings ) { + this._initKeys(); + } + +// INSERT POINT: _init + + }, + + destroy: function () { + this._initEvents(true); + + this._execEvent('destroy'); + }, + + _transitionEnd: function (e) { + if ( e.target != this.scroller || !this.isInTransition ) { + return; + } + + this._transitionTime(); + if ( !this.resetPosition(this.options.bounceTime) ) { + this.isInTransition = false; + this._execEvent('scrollEnd'); + } + }, + + _start: function (e) { + // React to left mouse button only + if ( utils.eventType[e.type] != 1 ) { + if ( e.button !== 0 ) { + return; + } + } + + if ( !this.enabled || (this.initiated && utils.eventType[e.type] !== this.initiated) ) { + return; + } + + if ( this.options.preventDefault && !utils.isBadAndroid && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) { + e.preventDefault(); + } + + var point = e.touches ? e.touches[0] : e, + pos; + + this.initiated = utils.eventType[e.type]; + this.moved = false; + this.distX = 0; + this.distY = 0; + this.directionX = 0; + this.directionY = 0; + this.directionLocked = 0; + + this._transitionTime(); + + this.startTime = utils.getTime(); + + if ( this.options.useTransition && this.isInTransition ) { + this.isInTransition = false; + pos = this.getComputedPosition(); + this._translate(Math.round(pos.x), Math.round(pos.y)); + this._execEvent('scrollEnd'); + } else if ( !this.options.useTransition && this.isAnimating ) { + this.isAnimating = false; + this._execEvent('scrollEnd'); + } + + this.startX = this.x; + this.startY = this.y; + this.absStartX = this.x; + this.absStartY = this.y; + this.pointX = point.pageX; + this.pointY = point.pageY; + + this._execEvent('beforeScrollStart'); + }, + + _move: function (e) { + if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { + return; + } + + if ( this.options.preventDefault ) { // increases performance on Android? TODO: check! + e.preventDefault(); + } + + var point = e.touches ? e.touches[0] : e, + deltaX = point.pageX - this.pointX, + deltaY = point.pageY - this.pointY, + timestamp = utils.getTime(), + newX, newY, + absDistX, absDistY; + + this.pointX = point.pageX; + this.pointY = point.pageY; + + this.distX += deltaX; + this.distY += deltaY; + absDistX = Math.abs(this.distX); + absDistY = Math.abs(this.distY); + + // We need to move at least 10 pixels for the scrolling to initiate + if ( timestamp - this.endTime > 300 && (absDistX < 10 && absDistY < 10) ) { + return; + } + + // If you are scrolling in one direction lock the other + if ( !this.directionLocked && !this.options.freeScroll ) { + if ( absDistX > absDistY + this.options.directionLockThreshold ) { + this.directionLocked = 'h'; // lock horizontally + } else if ( absDistY >= absDistX + this.options.directionLockThreshold ) { + this.directionLocked = 'v'; // lock vertically + } else { + this.directionLocked = 'n'; // no lock + } + } + + if ( this.directionLocked == 'h' ) { + if ( this.options.eventPassthrough == 'vertical' ) { + e.preventDefault(); + } else if ( this.options.eventPassthrough == 'horizontal' ) { + this.initiated = false; + return; + } + + deltaY = 0; + } else if ( this.directionLocked == 'v' ) { + if ( this.options.eventPassthrough == 'horizontal' ) { + e.preventDefault(); + } else if ( this.options.eventPassthrough == 'vertical' ) { + this.initiated = false; + return; + } + + deltaX = 0; + } + + deltaX = this.hasHorizontalScroll ? deltaX : 0; + deltaY = this.hasVerticalScroll ? deltaY : 0; + + newX = this.x + deltaX; + newY = this.y + deltaY; + + // Slow down if outside of the boundaries + if ( newX > 0 || newX < this.maxScrollX ) { + newX = this.options.bounce ? this.x + deltaX / 3 : newX > 0 ? 0 : this.maxScrollX; + } + if ( newY > 0 || newY < this.maxScrollY ) { + newY = this.options.bounce ? this.y + deltaY / 3 : newY > 0 ? 0 : this.maxScrollY; + } + + this.directionX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; + this.directionY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; + + if ( !this.moved ) { + this._execEvent('scrollStart'); + } + + this.moved = true; + + this._translate(newX, newY); + +/* REPLACE START: _move */ + + if ( timestamp - this.startTime > 300 ) { + this.startTime = timestamp; + this.startX = this.x; + this.startY = this.y; + } + +/* REPLACE END: _move */ + + }, + + _end: function (e) { + if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { + return; + } + + if ( this.options.preventDefault && !utils.preventDefaultException(e.target, this.options.preventDefaultException) ) { + e.preventDefault(); + } + + var point = e.changedTouches ? e.changedTouches[0] : e, + momentumX, + momentumY, + duration = utils.getTime() - this.startTime, + newX = Math.round(this.x), + newY = Math.round(this.y), + distanceX = Math.abs(newX - this.startX), + distanceY = Math.abs(newY - this.startY), + time = 0, + easing = ''; + + this.isInTransition = 0; + this.initiated = 0; + this.endTime = utils.getTime(); + + // reset if we are outside of the boundaries + if ( this.resetPosition(this.options.bounceTime) ) { + return; + } + + this.scrollTo(newX, newY); // ensures that the last position is rounded + + // we scrolled less than 10 pixels + if ( !this.moved ) { + if ( this.options.tap ) { + utils.tap(e, this.options.tap); + } + + if ( this.options.click ) { + utils.click(e); + } + + this._execEvent('scrollCancel'); + return; + } + + if ( this._events.flick && duration < 200 && distanceX < 100 && distanceY < 100 ) { + this._execEvent('flick'); + return; + } + + // start momentum animation if needed + if ( this.options.momentum && duration < 300 ) { + momentumX = this.hasHorizontalScroll ? utils.momentum(this.x, this.startX, duration, this.maxScrollX, this.options.bounce ? this.wrapperWidth : 0, this.options.deceleration) : { destination: newX, duration: 0 }; + momentumY = this.hasVerticalScroll ? utils.momentum(this.y, this.startY, duration, this.maxScrollY, this.options.bounce ? this.wrapperHeight : 0, this.options.deceleration) : { destination: newY, duration: 0 }; + newX = momentumX.destination; + newY = momentumY.destination; + time = Math.max(momentumX.duration, momentumY.duration); + this.isInTransition = 1; + } + + + if ( this.options.snap ) { + var snap = this._nearestSnap(newX, newY); + this.currentPage = snap; + time = this.options.snapSpeed || Math.max( + Math.max( + Math.min(Math.abs(newX - snap.x), 1000), + Math.min(Math.abs(newY - snap.y), 1000) + ), 300); + newX = snap.x; + newY = snap.y; + + this.directionX = 0; + this.directionY = 0; + easing = this.options.bounceEasing; + } + +// INSERT POINT: _end + + if ( newX != this.x || newY != this.y ) { + // change easing function when scroller goes out of the boundaries + if ( newX > 0 || newX < this.maxScrollX || newY > 0 || newY < this.maxScrollY ) { + easing = utils.ease.quadratic; + } + + this.scrollTo(newX, newY, time, easing); + return; + } + + this._execEvent('scrollEnd'); + }, + + _resize: function () { + var that = this; + + clearTimeout(this.resizeTimeout); + + this.resizeTimeout = setTimeout(function () { + that.refresh(); + }, this.options.resizePolling); + }, + + resetPosition: function (time) { + var x = this.x, + y = this.y; + + time = time || 0; + + if ( !this.hasHorizontalScroll || this.x > 0 ) { + x = 0; + } else if ( this.x < this.maxScrollX ) { + x = this.maxScrollX; + } + + if ( !this.hasVerticalScroll || this.y > 0 ) { + y = 0; + } else if ( this.y < this.maxScrollY ) { + y = this.maxScrollY; + } + + if ( x == this.x && y == this.y ) { + return false; + } + + this.scrollTo(x, y, time, this.options.bounceEasing); + + return true; + }, + + disable: function () { + this.enabled = false; + }, + + enable: function () { + this.enabled = true; + }, + + refresh: function () { + var rf = this.wrapper.offsetHeight; // Force reflow + + this.wrapperWidth = this.wrapper.clientWidth; + this.wrapperHeight = this.wrapper.clientHeight; + +/* REPLACE START: refresh */ + + this.scrollerWidth = this.scroller.offsetWidth; + this.scrollerHeight = this.scroller.offsetHeight; + + this.maxScrollX = this.wrapperWidth - this.scrollerWidth; + this.maxScrollY = this.wrapperHeight - this.scrollerHeight; + +/* REPLACE END: refresh */ + + this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < 0; + this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < 0; + + if ( !this.hasHorizontalScroll ) { + this.maxScrollX = 0; + this.scrollerWidth = this.wrapperWidth; + } + + if ( !this.hasVerticalScroll ) { + this.maxScrollY = 0; + this.scrollerHeight = this.wrapperHeight; + } + + this.endTime = 0; + this.directionX = 0; + this.directionY = 0; + + this.wrapperOffset = utils.offset(this.wrapper); + + this._execEvent('refresh'); + + this.resetPosition(); + +// INSERT POINT: _refresh + + }, + + on: function (type, fn) { + if ( !this._events[type] ) { + this._events[type] = []; + } + + this._events[type].push(fn); + }, + + off: function (type, fn) { + if ( !this._events[type] ) { + return; + } + + var index = this._events[type].indexOf(fn); + + if ( index > -1 ) { + this._events[type].splice(index, 1); + } + }, + + _execEvent: function (type) { + if ( !this._events[type] ) { + return; + } + + var i = 0, + l = this._events[type].length; + + if ( !l ) { + return; + } + + for ( ; i < l; i++ ) { + this._events[type][i].apply(this, [].slice.call(arguments, 1)); + } + }, + + scrollBy: function (x, y, time, easing) { + x = this.x + x; + y = this.y + y; + time = time || 0; + + this.scrollTo(x, y, time, easing); + }, + + scrollTo: function (x, y, time, easing) { + easing = easing || utils.ease.circular; + + this.isInTransition = this.options.useTransition && time > 0; + + if ( !time || (this.options.useTransition && easing.style) ) { + this._transitionTimingFunction(easing.style); + this._transitionTime(time); + this._translate(x, y); + } else { + this._animate(x, y, time, easing.fn); + } + }, + + scrollToElement: function (el, time, offsetX, offsetY, easing) { + el = el.nodeType ? el : this.scroller.querySelector(el); + + if ( !el ) { + return; + } + + var pos = utils.offset(el); + + pos.left -= this.wrapperOffset.left; + pos.top -= this.wrapperOffset.top; + + // if offsetX/Y are true we center the element to the screen + if ( offsetX === true ) { + offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2); + } + if ( offsetY === true ) { + offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2); + } + + pos.left -= offsetX || 0; + pos.top -= offsetY || 0; + + pos.left = pos.left > 0 ? 0 : pos.left < this.maxScrollX ? this.maxScrollX : pos.left; + pos.top = pos.top > 0 ? 0 : pos.top < this.maxScrollY ? this.maxScrollY : pos.top; + + time = time === undefined || time === null || time === 'auto' ? Math.max(Math.abs(this.x-pos.left), Math.abs(this.y-pos.top)) : time; + + this.scrollTo(pos.left, pos.top, time, easing); + }, + + _transitionTime: function (time) { + time = time || 0; + + this.scrollerStyle[utils.style.transitionDuration] = time + 'ms'; + + if ( !time && utils.isBadAndroid ) { + this.scrollerStyle[utils.style.transitionDuration] = '0.001s'; + } + + + if ( this.indicators ) { + for ( var i = this.indicators.length; i--; ) { + this.indicators[i].transitionTime(time); + } + } + + +// INSERT POINT: _transitionTime + + }, + + _transitionTimingFunction: function (easing) { + this.scrollerStyle[utils.style.transitionTimingFunction] = easing; + + + if ( this.indicators ) { + for ( var i = this.indicators.length; i--; ) { + this.indicators[i].transitionTimingFunction(easing); + } + } + + +// INSERT POINT: _transitionTimingFunction + + }, + + _translate: function (x, y) { + if ( this.options.useTransform ) { + +/* REPLACE START: _translate */ + + this.scrollerStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.translateZ; + +/* REPLACE END: _translate */ + + } else { + x = Math.round(x); + y = Math.round(y); + this.scrollerStyle.left = x + 'px'; + this.scrollerStyle.top = y + 'px'; + } + + this.x = x; + this.y = y; + + + if ( this.indicators ) { + for ( var i = this.indicators.length; i--; ) { + this.indicators[i].updatePosition(); + } + } + + +// INSERT POINT: _translate + + }, + + _initEvents: function (remove) { + var eventType = remove ? utils.removeEvent : utils.addEvent, + target = this.options.bindToWrapper ? this.wrapper : window; + + eventType(window, 'orientationchange', this); + eventType(window, 'resize', this); + + if ( this.options.click ) { + eventType(this.wrapper, 'click', this, true); + } + + if ( !this.options.disableMouse ) { + eventType(this.wrapper, 'mousedown', this); + eventType(target, 'mousemove', this); + eventType(target, 'mousecancel', this); + eventType(target, 'mouseup', this); + } + + if ( utils.hasPointer && !this.options.disablePointer ) { + eventType(this.wrapper, 'MSPointerDown', this); + eventType(target, 'MSPointerMove', this); + eventType(target, 'MSPointerCancel', this); + eventType(target, 'MSPointerUp', this); + } + + if ( utils.hasTouch && !this.options.disableTouch ) { + eventType(this.wrapper, 'touchstart', this); + eventType(target, 'touchmove', this); + eventType(target, 'touchcancel', this); + eventType(target, 'touchend', this); + } + + eventType(this.scroller, 'transitionend', this); + eventType(this.scroller, 'webkitTransitionEnd', this); + eventType(this.scroller, 'oTransitionEnd', this); + eventType(this.scroller, 'MSTransitionEnd', this); + }, + + getComputedPosition: function () { + var matrix = window.getComputedStyle(this.scroller, null), + x, y; + + if ( this.options.useTransform ) { + matrix = matrix[utils.style.transform].split(')')[0].split(', '); + x = +(matrix[12] || matrix[4]); + y = +(matrix[13] || matrix[5]); + } else { + x = +matrix.left.replace(/[^-\d.]/g, ''); + y = +matrix.top.replace(/[^-\d.]/g, ''); + } + + return { x: x, y: y }; + }, + + _initIndicators: function () { + var interactive = this.options.interactiveScrollbars, + customStyle = typeof this.options.scrollbars != 'string', + indicators = [], + indicator; + + var that = this; + + this.indicators = []; + + if ( this.options.scrollbars ) { + // Vertical scrollbar + if ( this.options.scrollY ) { + indicator = { + el: createDefaultScrollbar('v', interactive, this.options.scrollbars), + interactive: interactive, + defaultScrollbars: true, + customStyle: customStyle, + resize: this.options.resizeScrollbars, + shrink: this.options.shrinkScrollbars, + fade: this.options.fadeScrollbars, + listenX: false + }; + + this.wrapper.appendChild(indicator.el); + indicators.push(indicator); + } + + // Horizontal scrollbar + if ( this.options.scrollX ) { + indicator = { + el: createDefaultScrollbar('h', interactive, this.options.scrollbars), + interactive: interactive, + defaultScrollbars: true, + customStyle: customStyle, + resize: this.options.resizeScrollbars, + shrink: this.options.shrinkScrollbars, + fade: this.options.fadeScrollbars, + listenY: false + }; + + this.wrapper.appendChild(indicator.el); + indicators.push(indicator); + } + } + + if ( this.options.indicators ) { + // TODO: check concat compatibility + indicators = indicators.concat(this.options.indicators); + } + + for ( var i = indicators.length; i--; ) { + this.indicators.push( new Indicator(this, indicators[i]) ); + } + + // TODO: check if we can use array.map (wide compatibility and performance issues) + function _indicatorsMap (fn) { + for ( var i = that.indicators.length; i--; ) { + fn.call(that.indicators[i]); + } + } + + if ( this.options.fadeScrollbars ) { + this.on('scrollEnd', function () { + _indicatorsMap(function () { + this.fade(); + }); + }); + + this.on('scrollCancel', function () { + _indicatorsMap(function () { + this.fade(); + }); + }); + + this.on('scrollStart', function () { + _indicatorsMap(function () { + this.fade(1); + }); + }); + + this.on('beforeScrollStart', function () { + _indicatorsMap(function () { + this.fade(1, true); + }); + }); + } + + + this.on('refresh', function () { + _indicatorsMap(function () { + this.refresh(); + }); + }); + + this.on('destroy', function () { + _indicatorsMap(function () { + this.destroy(); + }); + + delete this.indicators; + }); + }, + + _initWheel: function () { + utils.addEvent(this.wrapper, 'wheel', this); + utils.addEvent(this.wrapper, 'mousewheel', this); + utils.addEvent(this.wrapper, 'DOMMouseScroll', this); + + this.on('destroy', function () { + utils.removeEvent(this.wrapper, 'wheel', this); + utils.removeEvent(this.wrapper, 'mousewheel', this); + utils.removeEvent(this.wrapper, 'DOMMouseScroll', this); + }); + }, + + _wheel: function (e) { + if ( !this.enabled ) { + return; + } + + e.preventDefault(); + e.stopPropagation(); + + var wheelDeltaX, wheelDeltaY, + newX, newY, + that = this; + + if ( this.wheelTimeout === undefined ) { + that._execEvent('scrollStart'); + } + + // Execute the scrollEnd event after 400ms the wheel stopped scrolling + clearTimeout(this.wheelTimeout); + this.wheelTimeout = setTimeout(function () { + that._execEvent('scrollEnd'); + that.wheelTimeout = undefined; + }, 400); + + if ( 'deltaX' in e ) { + wheelDeltaX = -e.deltaX; + wheelDeltaY = -e.deltaY; + } else if ( 'wheelDeltaX' in e ) { + wheelDeltaX = e.wheelDeltaX / 120 * this.options.mouseWheelSpeed; + wheelDeltaY = e.wheelDeltaY / 120 * this.options.mouseWheelSpeed; + } else if ( 'wheelDelta' in e ) { + wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * this.options.mouseWheelSpeed; + } else if ( 'detail' in e ) { + wheelDeltaX = wheelDeltaY = -e.detail / 3 * this.options.mouseWheelSpeed; + } else { + return; + } + + wheelDeltaX *= this.options.invertWheelDirection; + wheelDeltaY *= this.options.invertWheelDirection; + + if ( !this.hasVerticalScroll ) { + wheelDeltaX = wheelDeltaY; + wheelDeltaY = 0; + } + + if ( this.options.snap ) { + newX = this.currentPage.pageX; + newY = this.currentPage.pageY; + + if ( wheelDeltaX > 0 ) { + newX--; + } else if ( wheelDeltaX < 0 ) { + newX++; + } + + if ( wheelDeltaY > 0 ) { + newY--; + } else if ( wheelDeltaY < 0 ) { + newY++; + } + + this.goToPage(newX, newY); + + return; + } + + newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0); + newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0); + + if ( newX > 0 ) { + newX = 0; + } else if ( newX < this.maxScrollX ) { + newX = this.maxScrollX; + } + + if ( newY > 0 ) { + newY = 0; + } else if ( newY < this.maxScrollY ) { + newY = this.maxScrollY; + } + + this.scrollTo(newX, newY, 0); + +// INSERT POINT: _wheel + }, + + _initSnap: function () { + this.currentPage = {}; + + if ( typeof this.options.snap == 'string' ) { + this.options.snap = this.scroller.querySelectorAll(this.options.snap); + } + + this.on('refresh', function () { + var i = 0, l, + m = 0, n, + cx, cy, + x = 0, y, + stepX = this.options.snapStepX || this.wrapperWidth, + stepY = this.options.snapStepY || this.wrapperHeight, + el; + + this.pages = []; + + if ( !this.wrapperWidth || !this.wrapperHeight || !this.scrollerWidth || !this.scrollerHeight ) { + return; + } + + if ( this.options.snap === true ) { + cx = Math.round( stepX / 2 ); + cy = Math.round( stepY / 2 ); + + while ( x > -this.scrollerWidth ) { + this.pages[i] = []; + l = 0; + y = 0; + + while ( y > -this.scrollerHeight ) { + this.pages[i][l] = { + x: Math.max(x, this.maxScrollX), + y: Math.max(y, this.maxScrollY), + width: stepX, + height: stepY, + cx: x - cx, + cy: y - cy + }; + + y -= stepY; + l++; + } + + x -= stepX; + i++; + } + } else { + el = this.options.snap; + l = el.length; + n = -1; + + for ( ; i < l; i++ ) { + if ( i === 0 || el[i].offsetLeft <= el[i-1].offsetLeft ) { + m = 0; + n++; + } + + if ( !this.pages[m] ) { + this.pages[m] = []; + } + + x = Math.max(-el[i].offsetLeft, this.maxScrollX); + y = Math.max(-el[i].offsetTop, this.maxScrollY); + cx = x - Math.round(el[i].offsetWidth / 2); + cy = y - Math.round(el[i].offsetHeight / 2); + + this.pages[m][n] = { + x: x, + y: y, + width: el[i].offsetWidth, + height: el[i].offsetHeight, + cx: cx, + cy: cy + }; + + if ( x > this.maxScrollX ) { + m++; + } + } + } + + this.goToPage(this.currentPage.pageX || 0, this.currentPage.pageY || 0, 0); + + // Update snap threshold if needed + if ( this.options.snapThreshold % 1 === 0 ) { + this.snapThresholdX = this.options.snapThreshold; + this.snapThresholdY = this.options.snapThreshold; + } else { + this.snapThresholdX = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].width * this.options.snapThreshold); + this.snapThresholdY = Math.round(this.pages[this.currentPage.pageX][this.currentPage.pageY].height * this.options.snapThreshold); + } + }); + + this.on('flick', function () { + var time = this.options.snapSpeed || Math.max( + Math.max( + Math.min(Math.abs(this.x - this.startX), 1000), + Math.min(Math.abs(this.y - this.startY), 1000) + ), 300); + + this.goToPage( + this.currentPage.pageX + this.directionX, + this.currentPage.pageY + this.directionY, + time + ); + }); + }, + + _nearestSnap: function (x, y) { + if ( !this.pages.length ) { + return { x: 0, y: 0, pageX: 0, pageY: 0 }; + } + + var i = 0, + l = this.pages.length, + m = 0; + + // Check if we exceeded the snap threshold + if ( Math.abs(x - this.absStartX) < this.snapThresholdX && + Math.abs(y - this.absStartY) < this.snapThresholdY ) { + return this.currentPage; + } + + if ( x > 0 ) { + x = 0; + } else if ( x < this.maxScrollX ) { + x = this.maxScrollX; + } + + if ( y > 0 ) { + y = 0; + } else if ( y < this.maxScrollY ) { + y = this.maxScrollY; + } + + for ( ; i < l; i++ ) { + if ( x >= this.pages[i][0].cx ) { + x = this.pages[i][0].x; + break; + } + } + + l = this.pages[i].length; + + for ( ; m < l; m++ ) { + if ( y >= this.pages[0][m].cy ) { + y = this.pages[0][m].y; + break; + } + } + + if ( i == this.currentPage.pageX ) { + i += this.directionX; + + if ( i < 0 ) { + i = 0; + } else if ( i >= this.pages.length ) { + i = this.pages.length - 1; + } + + x = this.pages[i][0].x; + } + + if ( m == this.currentPage.pageY ) { + m += this.directionY; + + if ( m < 0 ) { + m = 0; + } else if ( m >= this.pages[0].length ) { + m = this.pages[0].length - 1; + } + + y = this.pages[0][m].y; + } + + return { + x: x, + y: y, + pageX: i, + pageY: m + }; + }, + + goToPage: function (x, y, time, easing) { + easing = easing || this.options.bounceEasing; + + if ( x >= this.pages.length ) { + x = this.pages.length - 1; + } else if ( x < 0 ) { + x = 0; + } + + if ( y >= this.pages[x].length ) { + y = this.pages[x].length - 1; + } else if ( y < 0 ) { + y = 0; + } + + var posX = this.pages[x][y].x, + posY = this.pages[x][y].y; + + time = time === undefined ? this.options.snapSpeed || Math.max( + Math.max( + Math.min(Math.abs(posX - this.x), 1000), + Math.min(Math.abs(posY - this.y), 1000) + ), 300) : time; + + this.currentPage = { + x: posX, + y: posY, + pageX: x, + pageY: y + }; + + this.scrollTo(posX, posY, time, easing); + }, + + next: function (time, easing) { + var x = this.currentPage.pageX, + y = this.currentPage.pageY; + + x++; + + if ( x >= this.pages.length && this.hasVerticalScroll ) { + x = 0; + y++; + } + + this.goToPage(x, y, time, easing); + }, + + prev: function (time, easing) { + var x = this.currentPage.pageX, + y = this.currentPage.pageY; + + x--; + + if ( x < 0 && this.hasVerticalScroll ) { + x = 0; + y--; + } + + this.goToPage(x, y, time, easing); + }, + + _initKeys: function (e) { + // default key bindings + var keys = { + pageUp: 33, + pageDown: 34, + end: 35, + home: 36, + left: 37, + up: 38, + right: 39, + down: 40 + }; + var i; + + // if you give me characters I give you keycode + if ( typeof this.options.keyBindings == 'object' ) { + for ( i in this.options.keyBindings ) { + if ( typeof this.options.keyBindings[i] == 'string' ) { + this.options.keyBindings[i] = this.options.keyBindings[i].toUpperCase().charCodeAt(0); + } + } + } else { + this.options.keyBindings = {}; + } + + for ( i in keys ) { + this.options.keyBindings[i] = this.options.keyBindings[i] || keys[i]; + } + + utils.addEvent(window, 'keydown', this); + + this.on('destroy', function () { + utils.removeEvent(window, 'keydown', this); + }); + }, + + _key: function (e) { + if ( !this.enabled ) { + return; + } + + var snap = this.options.snap, // we are using this alot, better to cache it + newX = snap ? this.currentPage.pageX : this.x, + newY = snap ? this.currentPage.pageY : this.y, + now = utils.getTime(), + prevTime = this.keyTime || 0, + acceleration = 0.250, + pos; + + if ( this.options.useTransition && this.isInTransition ) { + pos = this.getComputedPosition(); + + this._translate(Math.round(pos.x), Math.round(pos.y)); + this.isInTransition = false; + } + + this.keyAcceleration = now - prevTime < 200 ? Math.min(this.keyAcceleration + acceleration, 50) : 0; + + switch ( e.keyCode ) { + case this.options.keyBindings.pageUp: + if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) { + newX += snap ? 1 : this.wrapperWidth; + } else { + newY += snap ? 1 : this.wrapperHeight; + } + break; + case this.options.keyBindings.pageDown: + if ( this.hasHorizontalScroll && !this.hasVerticalScroll ) { + newX -= snap ? 1 : this.wrapperWidth; + } else { + newY -= snap ? 1 : this.wrapperHeight; + } + break; + case this.options.keyBindings.end: + newX = snap ? this.pages.length-1 : this.maxScrollX; + newY = snap ? this.pages[0].length-1 : this.maxScrollY; + break; + case this.options.keyBindings.home: + newX = 0; + newY = 0; + break; + case this.options.keyBindings.left: + newX += snap ? -1 : 5 + this.keyAcceleration>>0; + break; + case this.options.keyBindings.up: + newY += snap ? 1 : 5 + this.keyAcceleration>>0; + break; + case this.options.keyBindings.right: + newX -= snap ? -1 : 5 + this.keyAcceleration>>0; + break; + case this.options.keyBindings.down: + newY -= snap ? 1 : 5 + this.keyAcceleration>>0; + break; + default: + return; + } + + if ( snap ) { + this.goToPage(newX, newY); + return; + } + + if ( newX > 0 ) { + newX = 0; + this.keyAcceleration = 0; + } else if ( newX < this.maxScrollX ) { + newX = this.maxScrollX; + this.keyAcceleration = 0; + } + + if ( newY > 0 ) { + newY = 0; + this.keyAcceleration = 0; + } else if ( newY < this.maxScrollY ) { + newY = this.maxScrollY; + this.keyAcceleration = 0; + } + + this.scrollTo(newX, newY, 0); + + this.keyTime = now; + }, + + _animate: function (destX, destY, duration, easingFn) { + var that = this, + startX = this.x, + startY = this.y, + startTime = utils.getTime(), + destTime = startTime + duration; + + function step () { + var now = utils.getTime(), + newX, newY, + easing; + + if ( now >= destTime ) { + that.isAnimating = false; + that._translate(destX, destY); + + if ( !that.resetPosition(that.options.bounceTime) ) { + that._execEvent('scrollEnd'); + } + + return; + } + + now = ( now - startTime ) / duration; + easing = easingFn(now); + newX = ( destX - startX ) * easing + startX; + newY = ( destY - startY ) * easing + startY; + that._translate(newX, newY); + + if ( that.isAnimating ) { + rAF(step); + } + } + + this.isAnimating = true; + step(); + }, + handleEvent: function (e) { + switch ( e.type ) { + case 'touchstart': + case 'MSPointerDown': + case 'mousedown': + this._start(e); + break; + case 'touchmove': + case 'MSPointerMove': + case 'mousemove': + this._move(e); + break; + case 'touchend': + case 'MSPointerUp': + case 'mouseup': + case 'touchcancel': + case 'MSPointerCancel': + case 'mousecancel': + this._end(e); + break; + case 'orientationchange': + case 'resize': + this._resize(); + break; + case 'transitionend': + case 'webkitTransitionEnd': + case 'oTransitionEnd': + case 'MSTransitionEnd': + this._transitionEnd(e); + break; + case 'wheel': + case 'DOMMouseScroll': + case 'mousewheel': + this._wheel(e); + break; + case 'keydown': + this._key(e); + break; + case 'click': + if ( !e._constructed ) { + e.preventDefault(); + e.stopPropagation(); + } + break; + } + } +}; +function createDefaultScrollbar (direction, interactive, type) { + var scrollbar = document.createElement('div'), + indicator = document.createElement('div'); + + if ( type === true ) { + scrollbar.style.cssText = 'position:absolute;z-index:9999'; + indicator.style.cssText = '-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px'; + } + + indicator.className = 'iScrollIndicator'; + + if ( direction == 'h' ) { + if ( type === true ) { + scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0'; + indicator.style.height = '100%'; + } + scrollbar.className = 'iScrollHorizontalScrollbar'; + } else { + if ( type === true ) { + scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px'; + indicator.style.width = '100%'; + } + scrollbar.className = 'iScrollVerticalScrollbar'; + } + + scrollbar.style.cssText += ';overflow:hidden'; + + if ( !interactive ) { + scrollbar.style.pointerEvents = 'none'; + } + + scrollbar.appendChild(indicator); + + return scrollbar; +} + +function Indicator (scroller, options) { + this.wrapper = typeof options.el == 'string' ? document.querySelector(options.el) : options.el; + this.wrapperStyle = this.wrapper.style; + this.indicator = this.wrapper.children[0]; + this.indicatorStyle = this.indicator.style; + this.scroller = scroller; + + this.options = { + listenX: true, + listenY: true, + interactive: false, + resize: true, + defaultScrollbars: false, + shrink: false, + fade: false, + speedRatioX: 0, + speedRatioY: 0 + }; + + for ( var i in options ) { + this.options[i] = options[i]; + } + + this.sizeRatioX = 1; + this.sizeRatioY = 1; + this.maxPosX = 0; + this.maxPosY = 0; + + if ( this.options.interactive ) { + if ( !this.options.disableTouch ) { + utils.addEvent(this.indicator, 'touchstart', this); + utils.addEvent(window, 'touchend', this); + } + if ( !this.options.disablePointer ) { + utils.addEvent(this.indicator, 'MSPointerDown', this); + utils.addEvent(window, 'MSPointerUp', this); + } + if ( !this.options.disableMouse ) { + utils.addEvent(this.indicator, 'mousedown', this); + utils.addEvent(window, 'mouseup', this); + } + } + + if ( this.options.fade ) { + this.wrapperStyle[utils.style.transform] = this.scroller.translateZ; + this.wrapperStyle[utils.style.transitionDuration] = utils.isBadAndroid ? '0.001s' : '0ms'; + this.wrapperStyle.opacity = '0'; + } +} + +Indicator.prototype = { + handleEvent: function (e) { + switch ( e.type ) { + case 'touchstart': + case 'MSPointerDown': + case 'mousedown': + this._start(e); + break; + case 'touchmove': + case 'MSPointerMove': + case 'mousemove': + this._move(e); + break; + case 'touchend': + case 'MSPointerUp': + case 'mouseup': + case 'touchcancel': + case 'MSPointerCancel': + case 'mousecancel': + this._end(e); + break; + } + }, + + destroy: function () { + if ( this.options.interactive ) { + utils.removeEvent(this.indicator, 'touchstart', this); + utils.removeEvent(this.indicator, 'MSPointerDown', this); + utils.removeEvent(this.indicator, 'mousedown', this); + + utils.removeEvent(window, 'touchmove', this); + utils.removeEvent(window, 'MSPointerMove', this); + utils.removeEvent(window, 'mousemove', this); + + utils.removeEvent(window, 'touchend', this); + utils.removeEvent(window, 'MSPointerUp', this); + utils.removeEvent(window, 'mouseup', this); + } + + if ( this.options.defaultScrollbars ) { + this.wrapper.parentNode.removeChild(this.wrapper); + } + }, + + _start: function (e) { + var point = e.touches ? e.touches[0] : e; + + e.preventDefault(); + e.stopPropagation(); + + this.transitionTime(); + + this.initiated = true; + this.moved = false; + this.lastPointX = point.pageX; + this.lastPointY = point.pageY; + + this.startTime = utils.getTime(); + + if ( !this.options.disableTouch ) { + utils.addEvent(window, 'touchmove', this); + } + if ( !this.options.disablePointer ) { + utils.addEvent(window, 'MSPointerMove', this); + } + if ( !this.options.disableMouse ) { + utils.addEvent(window, 'mousemove', this); + } + + this.scroller._execEvent('beforeScrollStart'); + }, + + _move: function (e) { + var point = e.touches ? e.touches[0] : e, + deltaX, deltaY, + newX, newY, + timestamp = utils.getTime(); + + if ( !this.moved ) { + this.scroller._execEvent('scrollStart'); + } + + this.moved = true; + + deltaX = point.pageX - this.lastPointX; + this.lastPointX = point.pageX; + + deltaY = point.pageY - this.lastPointY; + this.lastPointY = point.pageY; + + newX = this.x + deltaX; + newY = this.y + deltaY; + + this._pos(newX, newY); + +// INSERT POINT: indicator._move + + e.preventDefault(); + e.stopPropagation(); + }, + + _end: function (e) { + if ( !this.initiated ) { + return; + } + + this.initiated = false; + + e.preventDefault(); + e.stopPropagation(); + + utils.removeEvent(window, 'touchmove', this); + utils.removeEvent(window, 'MSPointerMove', this); + utils.removeEvent(window, 'mousemove', this); + + if ( this.scroller.options.snap ) { + var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y); + + var time = this.options.snapSpeed || Math.max( + Math.max( + Math.min(Math.abs(this.scroller.x - snap.x), 1000), + Math.min(Math.abs(this.scroller.y - snap.y), 1000) + ), 300); + + if ( this.scroller.x != snap.x || this.scroller.y != snap.y ) { + this.scroller.directionX = 0; + this.scroller.directionY = 0; + this.scroller.currentPage = snap; + this.scroller.scrollTo(snap.x, snap.y, time, this.scroller.options.bounceEasing); + } + } + + if ( this.moved ) { + this.scroller._execEvent('scrollEnd'); + } + }, + + transitionTime: function (time) { + time = time || 0; + this.indicatorStyle[utils.style.transitionDuration] = time + 'ms'; + + if ( !time && utils.isBadAndroid ) { + this.indicatorStyle[utils.style.transitionDuration] = '0.001s'; + } + }, + + transitionTimingFunction: function (easing) { + this.indicatorStyle[utils.style.transitionTimingFunction] = easing; + }, + + refresh: function () { + this.transitionTime(); + + if ( this.options.listenX && !this.options.listenY ) { + this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none'; + } else if ( this.options.listenY && !this.options.listenX ) { + this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none'; + } else { + this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none'; + } + + if ( this.scroller.hasHorizontalScroll && this.scroller.hasVerticalScroll ) { + utils.addClass(this.wrapper, 'iScrollBothScrollbars'); + utils.removeClass(this.wrapper, 'iScrollLoneScrollbar'); + + if ( this.options.defaultScrollbars && this.options.customStyle ) { + if ( this.options.listenX ) { + this.wrapper.style.right = '8px'; + } else { + this.wrapper.style.bottom = '8px'; + } + } + } else { + utils.removeClass(this.wrapper, 'iScrollBothScrollbars'); + utils.addClass(this.wrapper, 'iScrollLoneScrollbar'); + + if ( this.options.defaultScrollbars && this.options.customStyle ) { + if ( this.options.listenX ) { + this.wrapper.style.right = '2px'; + } else { + this.wrapper.style.bottom = '2px'; + } + } + } + + var r = this.wrapper.offsetHeight; // force refresh + + if ( this.options.listenX ) { + this.wrapperWidth = this.wrapper.clientWidth; + if ( this.options.resize ) { + this.indicatorWidth = Math.max(Math.round(this.wrapperWidth * this.wrapperWidth / (this.scroller.scrollerWidth || this.wrapperWidth || 1)), 8); + this.indicatorStyle.width = this.indicatorWidth + 'px'; + } else { + this.indicatorWidth = this.indicator.clientWidth; + } + + this.maxPosX = this.wrapperWidth - this.indicatorWidth; + + if ( this.options.shrink == 'clip' ) { + this.minBoundaryX = -this.indicatorWidth + 8; + this.maxBoundaryX = this.wrapperWidth - 8; + } else { + this.minBoundaryX = 0; + this.maxBoundaryX = this.maxPosX; + } + + this.sizeRatioX = this.options.speedRatioX || (this.scroller.maxScrollX && (this.maxPosX / this.scroller.maxScrollX)); + } + + if ( this.options.listenY ) { + this.wrapperHeight = this.wrapper.clientHeight; + if ( this.options.resize ) { + this.indicatorHeight = Math.max(Math.round(this.wrapperHeight * this.wrapperHeight / (this.scroller.scrollerHeight || this.wrapperHeight || 1)), 8); + this.indicatorStyle.height = this.indicatorHeight + 'px'; + } else { + this.indicatorHeight = this.indicator.clientHeight; + } + + this.maxPosY = this.wrapperHeight - this.indicatorHeight; + + if ( this.options.shrink == 'clip' ) { + this.minBoundaryY = -this.indicatorHeight + 8; + this.maxBoundaryY = this.wrapperHeight - 8; + } else { + this.minBoundaryY = 0; + this.maxBoundaryY = this.maxPosY; + } + + this.maxPosY = this.wrapperHeight - this.indicatorHeight; + this.sizeRatioY = this.options.speedRatioY || (this.scroller.maxScrollY && (this.maxPosY / this.scroller.maxScrollY)); + } + + this.updatePosition(); + }, + + updatePosition: function () { + var x = this.options.listenX && Math.round(this.sizeRatioX * this.scroller.x) || 0, + y = this.options.listenY && Math.round(this.sizeRatioY * this.scroller.y) || 0; + + if ( !this.options.ignoreBoundaries ) { + if ( x < this.minBoundaryX ) { + if ( this.options.shrink == 'scale' ) { + this.width = Math.max(this.indicatorWidth + x, 8); + this.indicatorStyle.width = this.width + 'px'; + } + x = this.minBoundaryX; + } else if ( x > this.maxBoundaryX ) { + if ( this.options.shrink == 'scale' ) { + this.width = Math.max(this.indicatorWidth - (x - this.maxPosX), 8); + this.indicatorStyle.width = this.width + 'px'; + x = this.maxPosX + this.indicatorWidth - this.width; + } else { + x = this.maxBoundaryX; + } + } else if ( this.options.shrink == 'scale' && this.width != this.indicatorWidth ) { + this.width = this.indicatorWidth; + this.indicatorStyle.width = this.width + 'px'; + } + + if ( y < this.minBoundaryY ) { + if ( this.options.shrink == 'scale' ) { + this.height = Math.max(this.indicatorHeight + y * 3, 8); + this.indicatorStyle.height = this.height + 'px'; + } + y = this.minBoundaryY; + } else if ( y > this.maxBoundaryY ) { + if ( this.options.shrink == 'scale' ) { + this.height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, 8); + this.indicatorStyle.height = this.height + 'px'; + y = this.maxPosY + this.indicatorHeight - this.height; + } else { + y = this.maxBoundaryY; + } + } else if ( this.options.shrink == 'scale' && this.height != this.indicatorHeight ) { + this.height = this.indicatorHeight; + this.indicatorStyle.height = this.height + 'px'; + } + } + + this.x = x; + this.y = y; + + if ( this.scroller.options.useTransform ) { + this.indicatorStyle[utils.style.transform] = 'translate(' + x + 'px,' + y + 'px)' + this.scroller.translateZ; + } else { + this.indicatorStyle.left = x + 'px'; + this.indicatorStyle.top = y + 'px'; + } + }, + + _pos: function (x, y) { + if ( x < 0 ) { + x = 0; + } else if ( x > this.maxPosX ) { + x = this.maxPosX; + } + + if ( y < 0 ) { + y = 0; + } else if ( y > this.maxPosY ) { + y = this.maxPosY; + } + + x = this.options.listenX ? Math.round(x / this.sizeRatioX) : this.scroller.x; + y = this.options.listenY ? Math.round(y / this.sizeRatioY) : this.scroller.y; + + this.scroller.scrollTo(x, y); + }, + + fade: function (val, hold) { + if ( hold && !this.visible ) { + return; + } + + clearTimeout(this.fadeTimeout); + this.fadeTimeout = null; + + var time = val ? 250 : 500, + delay = val ? 0 : 300; + + val = val ? '1' : '0'; + + this.wrapperStyle[utils.style.transitionDuration] = time + 'ms'; + + this.fadeTimeout = setTimeout((function (val) { + this.wrapperStyle.opacity = val; + this.visible = +val; + }).bind(this, val), delay); + } +}; + +IScroll.utils = utils; + +if ( typeof module != 'undefined' && module.exports ) { + module.exports = IScroll; +} else { + window.IScroll = IScroll; +} + +})(window, document, Math); \ No newline at end of file diff --git a/assets/html/jquery-2.1.0.min.js b/assets/html/jquery-2.1.0.min.js new file mode 100644 index 0000000..cbe6abe --- /dev/null +++ b/assets/html/jquery-2.1.0.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m=a.document,n="2.1.0",o=function(a,b){return new o.fn.init(a,b)},p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};o.fn=o.prototype={jquery:n,constructor:o,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=o.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return o.each(this,a,b)},map:function(a){return this.pushStack(o.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},o.extend=o.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||o.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(o.isPlainObject(d)||(e=o.isArray(d)))?(e?(e=!1,f=c&&o.isArray(c)?c:[]):f=c&&o.isPlainObject(c)?c:{},g[b]=o.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},o.extend({expando:"jQuery"+(n+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===o.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isPlainObject:function(a){if("object"!==o.type(a)||a.nodeType||o.isWindow(a))return!1;try{if(a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=o.trim(a),a&&(1===a.indexOf("use strict")?(b=m.createElement("script"),b.text=a,m.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":k.call(a)},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?o.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),o.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||o.guid++,f):void 0},now:Date.now,support:l}),o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=o.type(a);return"function"===c||o.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);o.find=t,o.expr=t.selectors,o.expr[":"]=o.expr.pseudos,o.unique=t.uniqueSort,o.text=t.getText,o.isXMLDoc=t.isXML,o.contains=t.contains;var u=o.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(o.isFunction(b))return o.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return o.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return o.filter(b,a,c);b=o.filter(b,a)}return o.grep(a,function(a){return g.call(b,a)>=0!==c})}o.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?o.find.matchesSelector(d,a)?[d]:[]:o.find.matches(a,o.grep(b,function(a){return 1===a.nodeType}))},o.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(o(a).filter(function(){for(b=0;c>b;b++)if(o.contains(e[b],this))return!0}));for(b=0;c>b;b++)o.find(a,e[b],d);return d=this.pushStack(c>1?o.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?o(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=o.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof o?b[0]:b,o.merge(this,o.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:m,!0)),v.test(c[1])&&o.isPlainObject(b))for(c in b)o.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=m.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=m,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):o.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(o):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),o.makeArray(a,this))};A.prototype=o.fn,y=o(m);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};o.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&o(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),o.fn.extend({has:function(a){var b=o(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(o.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?o(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&o.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?o.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(o(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(o.unique(o.merge(this.get(),o(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}o.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return o.dir(a,"parentNode")},parentsUntil:function(a,b,c){return o.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return o.dir(a,"nextSibling")},prevAll:function(a){return o.dir(a,"previousSibling")},nextUntil:function(a,b,c){return o.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return o.dir(a,"previousSibling",c)},siblings:function(a){return o.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return o.sibling(a.firstChild)},contents:function(a){return a.contentDocument||o.merge([],a.childNodes)}},function(a,b){o.fn[a]=function(c,d){var e=o.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=o.filter(d,e)),this.length>1&&(C[a]||o.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return o.each(a.match(E)||[],function(a,c){b[c]=!0}),b}o.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):o.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){o.each(b,function(b,c){var d=o.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&o.each(arguments,function(a,b){var c;while((c=o.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?o.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},o.extend({Deferred:function(a){var b=[["resolve","done",o.Callbacks("once memory"),"resolved"],["reject","fail",o.Callbacks("once memory"),"rejected"],["notify","progress",o.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return o.Deferred(function(c){o.each(b,function(b,f){var g=o.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&o.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?o.extend(a,d):d}},e={};return d.pipe=d.then,o.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&o.isFunction(a.promise)?e:0,g=1===f?a:o.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&o.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;o.fn.ready=function(a){return o.ready.promise().done(a),this},o.extend({isReady:!1,readyWait:1,holdReady:function(a){a?o.readyWait++:o.ready(!0)},ready:function(a){(a===!0?--o.readyWait:o.isReady)||(o.isReady=!0,a!==!0&&--o.readyWait>0||(H.resolveWith(m,[o]),o.fn.trigger&&o(m).trigger("ready").off("ready")))}});function I(){m.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),o.ready()}o.ready.promise=function(b){return H||(H=o.Deferred(),"complete"===m.readyState?setTimeout(o.ready):(m.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},o.ready.promise();var J=o.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===o.type(c)){e=!0;for(h in c)o.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,o.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(o(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};o.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=o.expando+Math.random()}K.uid=1,K.accepts=o.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,o.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(o.isEmptyObject(f))o.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,o.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{o.isArray(b)?d=b.concat(b.map(o.camelCase)):(e=o.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!o.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?o.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}o.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),o.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length; +while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=o.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=o.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),o.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||o.isArray(c)?d=L.access(a,b,o.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=o.queue(a,b),d=c.length,e=c.shift(),f=o._queueHooks(a,b),g=function(){o.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:o.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),o.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";l.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return m.activeElement}catch(a){}}o.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=o.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof o!==U&&o.event.triggered!==b.type?o.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n&&(l=o.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=o.event.special[n]||{},k=o.extend({type:n,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&o.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),o.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n){l=o.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||o.removeEvent(a,n,r.handle),delete i[n])}else for(n in i)o.event.remove(a,n+b[j],c,d,!0);o.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,p=[d||m],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||m,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+o.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[o.expando]?b:new o.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:o.makeArray(c,[b]),n=o.event.special[q]||{},e||!n.trigger||n.trigger.apply(d,c)!==!1)){if(!e&&!n.noBubble&&!o.isWindow(d)){for(i=n.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||m)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:n.bindType||q,l=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),l&&l.apply(g,c),l=k&&g[k],l&&l.apply&&o.acceptData(g)&&(b.result=l.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||n._default&&n._default.apply(p.pop(),c)!==!1||!o.acceptData(d)||k&&o.isFunction(d[q])&&!o.isWindow(d)&&(h=d[k],h&&(d[k]=null),o.event.triggered=q,d[q](),o.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=o.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=o.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=o.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((o.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?o(e,this).index(i)>=0:o.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return o.nodeName(a,"table")&&o.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)o.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=o.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&o.nodeName(a,b)?o.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}o.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=o.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||o.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===o.type(e))o.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;o.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===o.inArray(e,d))&&(i=o.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f,g,h=o.event.special,i=0;void 0!==(c=a[i]);i++){if(o.acceptData(c)&&(f=c[L.expando],f&&(b=L.cache[f]))){if(d=Object.keys(b.events||{}),d.length)for(g=0;void 0!==(e=d[g]);g++)h[e]?o.event.remove(c,e):o.removeEvent(c,e,b.handle);L.cache[f]&&delete L.cache[f]}delete M.cache[c[M.expando]]}}}),o.fn.extend({text:function(a){return J(this,function(a){return void 0===a?o.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?o.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||o.cleanData(ob(c)),c.parentNode&&(b&&o.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(o.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return o.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(o.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,o.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,n=k-1,p=a[0],q=o.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(c=o.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=o.map(ob(c,"script"),kb),g=f.length;k>j;j++)h=c,j!==n&&(h=o.clone(h,!0,!0),g&&o.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,o.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&o.contains(i,h)&&(h.src?o._evalUrl&&o._evalUrl(h.src):o.globalEval(h.textContent.replace(hb,"")))}return this}}),o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){o.fn[a]=function(a){for(var c,d=[],e=o(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),o(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d=o(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:o.css(d[0],"display");return d.detach(),e}function tb(a){var b=m,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||o("