aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <shade@chemlab.org>2013-02-13 07:08:55 (GMT)
committerSteve Kondik <shade@chemlab.org>2013-02-13 07:08:55 (GMT)
commit012b8e877044b0e04d7ec3dfa1226fc16a953909 (patch)
tree3c201d1bca19eeb3cb34af7fed4405b2dff8083c
parent1d9caebe5ca61453ecb4b1b0f3be79d271ffa40c (diff)
parentfbef8b9578aaa422d5bd3153eb50df739815672c (diff)
downloadandroid_build-mr1.1-staging.zip
android_build-mr1.1-staging.tar.gz
android_build-mr1.1-staging.tar.bz2
Merge tag 'android-4.2.2_r1' of https://android.googlesource.com/platform/build into 1.1mr1.1-staging
Android 4.2.2 release 1 Conflicts: core/build_id.mk core/tasks/apicheck.mk target/product/full_base.mk Change-Id: I085357b5573fec85b05d3fc0a86c053a647e2572
-rw-r--r--CleanSpec.mk2
-rw-r--r--core/Makefile6
-rw-r--r--core/build_id.mk2
-rw-r--r--core/config.mk2
-rw-r--r--core/definitions.mk23
-rw-r--r--core/droiddoc.mk6
-rw-r--r--core/tasks/apicheck.mk60
-rw-r--r--core/version_defaults.mk2
-rw-r--r--envsetup.sh8
-rw-r--r--target/product/core.mk1
-rw-r--r--target/product/full_base.mk12
-rw-r--r--target/product/mini.mk4
-rw-r--r--tools/droiddoc/templates-ds/assets/GPL-LICENSE.txt278
-rw-r--r--tools/droiddoc/templates-ds/assets/LICENSE.txt20
-rw-r--r--tools/droiddoc/templates-ds/assets/android-developer-core.css (renamed from tools/droiddoc/templates-sdk/assets/android-developer-core.css)0
-rw-r--r--tools/droiddoc/templates-ds/assets/android-developer-docs.css (renamed from tools/droiddoc/templates-sdk/assets/android-developer-docs.css)0
-rw-r--r--tools/droiddoc/templates-ds/assets/css/default.css4435
-rw-r--r--tools/droiddoc/templates-ds/assets/css/fullscreen.css200
-rw-r--r--tools/droiddoc/templates-ds/assets/design/default.js188
-rw-r--r--tools/droiddoc/templates-ds/assets/images/android-developers-logo.pngbin0 -> 3195 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/android_wrench.pngbin0 -> 3633 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/arrow-left-develop.pngbin0 -> 3036 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/arrow-left.pngbin0 -> 3144 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/arrow-right-develop.pngbin0 -> 2960 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/arrow-right.pngbin0 -> 2757 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/arrow_bluelink_down.pngbin0 -> 180 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/arrow_bluelink_up.pngbin0 -> 181 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/arrow_left_off.jpgbin0 -> 592 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/arrow_left_on.jpgbin0 -> 692 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/arrow_right_off.jpgbin0 -> 592 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/arrow_right_on.jpgbin0 -> 692 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/arrows-up-down.pngbin0 -> 162 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/bg_community_leftDiv.jpgbin0 -> 10692 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/bg_fade.jpgbin0 -> 300 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/bg_gradient.jpgbin0 -> 1376 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/bg_images_sprite.pngbin0 -> 2008 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/bg_logo.pngbin0 -> 1525 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/blog-default.pngbin0 -> 72570 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/body-gradient-tab.pngbin0 -> 192 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/body-gradient.pngbin0 -> 146 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/close.pngbin0 -> 312 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/dac_logo.pngbin0 -> 2170 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/developers-logo.pngbin0 -> 10155 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/fullscreen.pngbin0 -> 1154 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/grad-rule-qv.pngbin0 -> 249 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/Android_Dev_Lab_l.pngbin0 -> 16512 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/GDC2011.pngbin0 -> 15892 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/GTV_icon_large.pngbin0 -> 7553 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/GTV_icon_small.pngbin0 -> 3576 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/IO-logo-2011.pngbin0 -> 11210 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/IO-logo.pngbin0 -> 3673 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/adc2_l.pngbin0 -> 111790 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/adc2_s.pngbin0 -> 27250 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/android_adc.pngbin0 -> 1849 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/bg_home_announcement.pngbin0 -> 2840 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/bg_home_bottom.jpgbin0 -> 2180 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/bg_home_carousel.pngbin0 -> 3654 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/bg_home_carousel_board.pngbin0 -> 1902 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/bg_home_carousel_wheel.pngbin0 -> 2041 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/carousel_buttons_sprite.pngbin0 -> 3413 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/devphone-large.pngbin0 -> 16630 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/devphone-small.pngbin0 -> 1944 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/donut-android.pngbin0 -> 9386 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/eclair-android.pngbin0 -> 11311 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/froyo-android.pngbin0 -> 17086 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/gdc-logo.pngbin0 -> 2739 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/gingerdroid.pngbin0 -> 11690 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/google-plus-small.pngbin0 -> 5042 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/google-plus.pngbin0 -> 21315 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/honeycomb-android.pngbin0 -> 13716 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/icon-about.pngbin0 -> 5573 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/icon-design.pngbin0 -> 5739 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/icon-develop.pngbin0 -> 5364 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/icon-distribute.pngbin0 -> 4588 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/ics-android.pngbin0 -> 15002 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/io-large.pngbin0 -> 5522 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/home/io-small.pngbin0 -> 1427 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/maps-large.pngbin0 -> 39756 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/maps-small.pngbin0 -> 3424 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/market-large.pngbin0 -> 5752 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/market-small.pngbin0 -> 3134 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/sdk-large.pngbin0 -> 1616 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/home/sdk-small.pngbin0 -> 2381 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/hr_gray_main.jpgbin0 -> 378 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/hr_gray_side.jpgbin0 -> 344 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/icon_contribute.jpgbin0 -> 1021 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/icon_design.pngbin0 -> 697 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/icon_download.jpgbin0 -> 1192 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/icon_download2.jpgbin0 -> 653 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/icon_guidelines_logo.pngbin0 -> 44163 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/icon_market.jpgbin0 -> 1022 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/icon_more.pngbin0 -> 1098 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/icon_play.pngbin0 -> 10201 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/icon_robot.jpgbin0 -> 638 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/icon_search.pngbin0 -> 1406 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/icon_world.jpgbin0 -> 511 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/left_off.jpgbin0 -> 592 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/left_on.jpgbin0 -> 692 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/locale.pngbin0 -> 393 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/logo_breadcrumbz.jpgbin0 -> 3311 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/more_bottom.pngbin0 -> 1055 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/more_check.pngbin0 -> 1014 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/more_mid.pngbin0 -> 958 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/more_top.pngbin0 -> 1447 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/open_source.pngbin0 -> 6340 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/preliminary.pngbin0 -> 2251 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/quicknav_arrow.pngbin0 -> 2951 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/quicknav_btn_bg.pngbin0 -> 1024 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/resizable-e.gifbin0 -> 2713 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/resizable-e2.gifbin0 -> 2680 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/resizable-eg.gifbin0 -> 3075 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/resizable-s.gifbin0 -> 2617 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/resizable-s2.gifbin0 -> 2618 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resizable-s2.pngbin0 -> 966 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/resizable-sg.gifbin0 -> 3057 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resource-article.pngbin0 -> 889 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resource-big-article.pngbin0 -> 2095 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resource-big-sample.pngbin0 -> 2480 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resource-big-tutorial.pngbin0 -> 2544 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resource-big-video.pngbin0 -> 2155 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resource-sample.pngbin0 -> 972 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resource-tutorial.pngbin0 -> 1001 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/resource-video.pngbin0 -> 835 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/right_off.jpgbin0 -> 592 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/right_on.jpgbin0 -> 692 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/sidenav-rule.pngbin0 -> 258 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/slide_1.jpgbin0 -> 3060 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/slide_2.jpgbin0 -> 3736 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/slide_3.jpgbin0 -> 3151 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/slide_large_1.jpgbin0 -> 19240 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/slide_large_2.jpgbin0 -> 20188 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/slide_large_3.jpgbin0 -> 20202 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/slide_off.jpgbin0 -> 676 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/slide_on.jpgbin0 -> 733 bytes
-rwxr-xr-xtools/droiddoc/templates-ds/assets/images/spacer.gifbin0 -> 96 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/callout.pngbin0 -> 1383 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_land_span13.pngbin0 -> 64431 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_land_span8.pngbin0 -> 30679 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_port_span5.pngbin0 -> 39994 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_port_span9.pngbin0 -> 75920 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/disclosure_down.pngbin0 -> 238 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/disclosure_left.pngbin0 -> 229 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/disclosure_right.pngbin0 -> 228 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/disclosure_up.pngbin0 -> 221 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/gototop.pngbin0 -> 262 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/ico_action.pngbin0 -> 415 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/ico_good.pngbin0 -> 318 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/ico_movie_inline.pngbin0 -> 1040 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/ico_phone_tablet.pngbin0 -> 302 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/ico_use.pngbin0 -> 437 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/ico_web.pngbin0 -> 1037 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/ico_wrong.pngbin0 -> 286 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/styles/open_new_page.pngbin0 -> 980 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/triangle-closed-small.pngbin0 -> 166 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/triangle-closed.pngbin0 -> 3565 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/triangle-opened-small.pngbin0 -> 170 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/triangle-opened.pngbin0 -> 3567 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/uiguidelines1.pngbin0 -> 5258 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/images/video-droid.pngbin0 -> 1614 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/jdiff_logo.gif (renamed from tools/droiddoc/templates-sdk/assets/jdiff_logo.gif)bin390 -> 390 bytes
-rw-r--r--tools/droiddoc/templates-ds/assets/js/docs.js2433
-rw-r--r--tools/droiddoc/templates-ds/assets/js/global-libraries-combined.js (renamed from tools/droiddoc/templates-sdk/assets/js/global-libraries-combined.js)0
-rwxr-xr-xtools/droiddoc/templates-ds/assets/js/grid/960.gridder.css (renamed from tools/droiddoc/templates-sdk/assets/js/grid/960.gridder.css)0
-rwxr-xr-xtools/droiddoc/templates-ds/assets/js/grid/960.gridder.js (renamed from tools/droiddoc/templates-sdk/assets/js/grid/960.gridder.js)0
-rw-r--r--tools/droiddoc/templates-ds/assets/js/prettify.js28
-rw-r--r--tools/droiddoc/templates-ds/assets/scroller/jquery.jscrollpane.min.js (renamed from tools/droiddoc/templates-sdk/assets/scroller/jquery.jscrollpane.min.js)0
-rw-r--r--tools/droiddoc/templates-ds/assets/scroller/jquery.mousewheel.min.js (renamed from tools/droiddoc/templates-sdk/assets/scroller/jquery.mousewheel.min.js)0
-rw-r--r--tools/droiddoc/templates-ds/assets/triangle-none.gif (renamed from tools/droiddoc/templates-sdk/assets/triangle-none.gif)bin240 -> 240 bytes
-rw-r--r--tools/droiddoc/templates-ds/class.cs654
-rw-r--r--tools/droiddoc/templates-ds/classes.cs47
-rw-r--r--tools/droiddoc/templates-ds/components/masthead.cs231
-rw-r--r--tools/droiddoc/templates-ds/customizations.cs370
-rw-r--r--tools/droiddoc/templates-ds/data.hdf4
-rw-r--r--tools/droiddoc/templates-ds/designpage.cs99
-rw-r--r--tools/droiddoc/templates-ds/docpage.cs174
-rw-r--r--tools/droiddoc/templates-ds/footer.cs20
-rw-r--r--tools/droiddoc/templates-ds/gcm_navtree_data.cs3
-rw-r--r--tools/droiddoc/templates-ds/gms_navtree_data.cs3
-rw-r--r--tools/droiddoc/templates-ds/head_tag.cs53
-rw-r--r--tools/droiddoc/templates-ds/header.cs3
-rw-r--r--tools/droiddoc/templates-ds/header_tabs.cs2
-rw-r--r--tools/droiddoc/templates-ds/navtree_data.cs3
-rw-r--r--tools/droiddoc/templates-ds/nosidenavpage.cs27
-rw-r--r--tools/droiddoc/templates-ds/package.cs61
-rw-r--r--tools/droiddoc/templates-ds/packages.cs43
-rw-r--r--tools/droiddoc/templates-ds/sampleindex.cs53
-rw-r--r--tools/droiddoc/templates-ds/sdkpage.cs492
-rw-r--r--tools/droiddoc/templates-ds/timestamp.cs1
-rw-r--r--tools/droiddoc/templates-ds/trailer.cs48
-rw-r--r--tools/droiddoc/templates-sdk/assets/css/default.css973
-rw-r--r--tools/droiddoc/templates-sdk/assets/js/android_3p-bundle.js2766
-rw-r--r--tools/droiddoc/templates-sdk/assets/js/docs.js428
-rw-r--r--tools/droiddoc/templates-sdk/class.cs4
-rw-r--r--tools/droiddoc/templates-sdk/classes.cs4
-rw-r--r--tools/droiddoc/templates-sdk/components/masthead.cs67
-rw-r--r--tools/droiddoc/templates-sdk/customizations.cs54
-rw-r--r--tools/droiddoc/templates-sdk/docpage.cs35
-rw-r--r--tools/droiddoc/templates-sdk/footer.cs2
-rw-r--r--tools/droiddoc/templates-sdk/gcm_navtree_data.cs3
-rw-r--r--tools/droiddoc/templates-sdk/gms_navtree_data.cs3
-rw-r--r--tools/droiddoc/templates-sdk/head_tag.cs30
-rw-r--r--tools/droiddoc/templates-sdk/navtree_data.cs3
-rw-r--r--tools/droiddoc/templates-sdk/nosidenavpage.cs2
-rw-r--r--tools/droiddoc/templates-sdk/package.cs6
-rw-r--r--tools/droiddoc/templates-sdk/packages.cs4
-rw-r--r--tools/droiddoc/templates-sdk/sampleindex.cs2
-rw-r--r--tools/droiddoc/templates-sdk/sdkpage.cs286
-rw-r--r--tools/droiddoc/templates-sdk/timestamp.cs1
-rw-r--r--tools/droiddoc/templates-sdk/trailer.cs38
-rwxr-xr-xtools/releasetools/build_image.py40
210 files changed, 14181 insertions, 671 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk
index f4d45ff..59b7d68 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -150,6 +150,8 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/core/Makefile b/core/Makefile
index 98cd055..5544895 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -584,7 +584,7 @@ ifneq (true,$(TARGET_USERIMAGES_SPARSE_EXT_DISABLED))
endif
ifeq ($(INTERNAL_USERIMAGES_USE_EXT),true)
-INTERNAL_USERIMAGES_DEPS := $(MKEXTUSERIMG) $(MAKE_EXT4FS)
+INTERNAL_USERIMAGES_DEPS := $(MKEXTUSERIMG) $(MAKE_EXT4FS) $(SIMG2IMG) $(E2FSCK)
else
INTERNAL_USERIMAGES_DEPS := $(MKYAFFS2)
endif
@@ -1105,7 +1105,9 @@ DISTTOOLS := $(HOST_OUT_EXECUTABLES)/minigzip \
$(HOST_OUT_JAVA_LIBRARIES)/dumpkey.jar \
$(HOST_OUT_JAVA_LIBRARIES)/signapk.jar \
$(HOST_OUT_EXECUTABLES)/mkuserimg.sh \
- $(HOST_OUT_EXECUTABLES)/make_ext4fs
+ $(HOST_OUT_EXECUTABLES)/make_ext4fs \
+ $(HOST_OUT_EXECUTABLES)/simg2img \
+ $(HOST_OUT_EXECUTABLES)/e2fsck
OTATOOLS := $(DISTTOOLS) \
$(HOST_OUT_EXECUTABLES)/aapt
diff --git a/core/build_id.mk b/core/build_id.mk
index 6d56e51..9eeb4bb 100644
--- a/core/build_id.mk
+++ b/core/build_id.mk
@@ -19,4 +19,4 @@
# (like "CRB01"). It must be a single word, and is
# capitalized by convention.
-export BUILD_ID=JOP40G
+export BUILD_ID=JDQ39
diff --git a/core/config.mk b/core/config.mk
index 51920f4..ab06f6a 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -297,6 +297,8 @@ MKEXT2IMG := $(HOST_OUT_EXECUTABLES)/genext2fs$(HOST_EXECUTABLE_SUFFIX)
MAKE_EXT4FS := $(HOST_OUT_EXECUTABLES)/make_ext4fs$(HOST_EXECUTABLE_SUFFIX)
MKEXTUSERIMG := $(HOST_OUT_EXECUTABLES)/mkuserimg.sh
MKEXT2BOOTIMG := external/genext2fs/mkbootimg_ext2.sh
+SIMG2IMG := $(HOST_OUT_EXECUTABLES)/simg2img$(HOST_EXECUTABLE_SUFFIX)
+E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
MKTARBALL := build/tools/mktarball.sh
TUNE2FS := $(HOST_OUT_EXECUTABLES)/tune2fs$(HOST_EXECUTABLE_SUFFIX)
E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
diff --git a/core/definitions.mk b/core/definitions.mk
index a02f55f..a2d22c7 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -2064,6 +2064,29 @@ $(if $(_erm_new_modules),$(eval $(1) += $(_erm_new_modules))\
endef
###########################################################
+## API Check
+###########################################################
+
+# eval this to define a rule that runs apicheck.
+#
+# Args:
+# $(1) target
+# $(2) stable api file
+# $(3) api file to be tested
+# $(4) arguments for apicheck
+# $(5) command to run if apicheck failed
+# $(6) target dependent on this api check
+# $(7) additional dependencies
+define check-api
+$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(APICHECK) $(7)
+ @echo "Checking API:" $(1)
+ $(hide) ( $(APICHECK_COMMAND) $(4) $(2) $(3) || ( $(5) ; exit 38 ) )
+ $(hide) mkdir -p $$(dir $$@)
+ $(hide) touch $$@
+$(6): $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp
+endef
+
+###########################################################
## Other includes
###########################################################
diff --git a/core/droiddoc.mk b/core/droiddoc.mk
index 639f219..211a002 100644
--- a/core/droiddoc.mk
+++ b/core/droiddoc.mk
@@ -147,6 +147,11 @@ $(full_target): PRIVATE_DROIDDOC_HTML_DIR := -htmldir $(LOCAL_PATH)/$(LOCAL_DROI
else
$(full_target): PRIVATE_DROIDDOC_HTML_DIR :=
endif
+ifneq ($(strip $(LOCAL_ADDITIONAL_HTML_DIR)),)
+$(full_target): PRIVATE_ADDITIONAL_HTML_DIR := -htmldir2 $(LOCAL_PATH)/$(LOCAL_ADDITIONAL_HTML_DIR)
+else
+$(full_target): PRIVATE_ADDITIONAL_HTML_DIR :=
+endif
# TODO: not clear if this is used any more
$(full_target): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
@@ -171,6 +176,7 @@ $(full_target): $(full_src_files) $(droiddoc_templates) $(droiddoc) $(html_dir_f
-docletpath $(PRIVATE_DOCLETPATH) \
-templatedir $(PRIVATE_CUSTOM_TEMPLATE_DIR) \
$(PRIVATE_DROIDDOC_HTML_DIR) \
+ $(PRIVATE_ADDITIONAL_HTML_DIR) \
$(addprefix -bootclasspath ,$(PRIVATE_BOOTCLASSPATH)) \
$(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
-sourcepath $(PRIVATE_SOURCE_PATH)$(addprefix :,$(PRIVATE_CLASSPATH)) \
diff --git a/core/tasks/apicheck.mk b/core/tasks/apicheck.mk
index c6d2ab1..753b5bc 100644
--- a/core/tasks/apicheck.mk
+++ b/core/tasks/apicheck.mk
@@ -22,58 +22,48 @@ ifeq (,$(filter true, $(BUILD_TINY_ANDROID) $(TARGET_BUILD_PDK)))
.PHONY: checkapi
-# eval this to define a rule that runs apicheck.
-#
-# Args:
-# $(1) target
-# $(2) stable api file
-# $(3) api file to be tested
-# $(4) arguments for apicheck
-# $(5) command to run if apicheck failed
-define check-api
-$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(APICHECK)
- @echo -e ${CL_YLW}"Checking API:"${CL_RST} $(1)
- $(hide) ( $(APICHECK_COMMAND) $(4) $(2) $(3) || ( $(5) ; exit 38 ) )
- $(hide) mkdir -p $$(dir $$@)
- $(hide) touch $$@
-checkapi: $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp
-endef
-
# Run the checkapi rules by default.
droidcore: checkapi
last_released_sdk_version := $(lastword $(call numerically_sort, \
- $(filter-out $(SRC_API_DIR)/current, \
+ $(filter-out current, \
$(patsubst $(SRC_API_DIR)/%.txt,%, $(wildcard $(SRC_API_DIR)/*.txt)) \
)\
))
# INTERNAL_PLATFORM_API_FILE is the one build by droiddoc.
+# Note that since INTERNAL_PLATFORM_API_FILE is the byproduct of api-stubs module,
+# (See frameworks/base/Android.mk)
+# we need to add api-stubs as additional dependency of the api check.
# Check that the API we're building hasn't broken the last-released
# SDK version.
$(eval $(call check-api, \
- checkapi-last, \
- $(SRC_API_DIR)/$(last_released_sdk_version).txt, \
- $(INTERNAL_PLATFORM_API_FILE), \
- -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 \
- -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
- -error 16 -error 17 -error 18 , \
- cat $(BUILD_SYSTEM)/apicheck_msg_last.txt \
- ))
+ checkapi-last, \
+ $(SRC_API_DIR)/$(last_released_sdk_version).txt, \
+ $(INTERNAL_PLATFORM_API_FILE), \
+ -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 \
+ -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+ -error 16 -error 17 -error 18 , \
+ cat $(BUILD_SYSTEM)/apicheck_msg_last.txt, \
+ checkapi, \
+ $(call doc-timestamp-for,api-stubs) \
+ ))
# Check that the API we're building hasn't changed from the not-yet-released
# SDK version.
$(eval $(call check-api, \
- checkapi-current, \
- $(SRC_API_DIR)/current.txt, \
- $(INTERNAL_PLATFORM_API_FILE), \
- -error 2 -error 3 -error 4 -error 5 -error 6 \
- -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
- -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
- -error 25 , \
- cat $(BUILD_SYSTEM)/apicheck_msg_current.txt \
- ))
+ checkapi-current, \
+ $(SRC_API_DIR)/current.txt, \
+ $(INTERNAL_PLATFORM_API_FILE), \
+ -error 2 -error 3 -error 4 -error 5 -error 6 \
+ -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+ -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
+ -error 25 , \
+ cat $(BUILD_SYSTEM)/apicheck_msg_current.txt, \
+ checkapi, \
+ $(call doc-timestamp-for,api-stubs) \
+ ))
.PHONY: update-api
update-api: $(INTERNAL_PLATFORM_API_FILE) | $(ACP)
diff --git a/core/version_defaults.mk b/core/version_defaults.mk
index fb1f361..e3ba14f 100644
--- a/core/version_defaults.mk
+++ b/core/version_defaults.mk
@@ -41,7 +41,7 @@ ifeq "" "$(PLATFORM_VERSION)"
# which is the version that we reveal to the end user.
# Update this value when the platform version changes (rather
# than overriding it somewhere else). Can be an arbitrary string.
- PLATFORM_VERSION := 4.2.1
+ PLATFORM_VERSION := 4.2.2
endif
ifeq "" "$(PLATFORM_SDK_VERSION)"
diff --git a/envsetup.sh b/envsetup.sh
index 30c7878..55eae37 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -127,8 +127,8 @@ function setpaths()
fi
if [ -n "$ANDROID_PRE_BUILD_PATHS" ] ; then
export PATH=${PATH/$ANDROID_PRE_BUILD_PATHS/}
- # strip trailing ':', if any
- export PATH=${PATH/%:/}
+ # strip leading ':', if any
+ export PATH=${PATH/:%/}
fi
# and in with the new
@@ -174,8 +174,8 @@ function setpaths()
export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
export ANDROID_QTOOLS=$T/development/emulator/qtools
export ANDROID_DEV_SCRIPTS=$T/development/scripts
- export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN$ARM_EABI_TOOLCHAIN_PATH$CODE_REVIEWS:$ANDROID_DEV_SCRIPTS
- export PATH=$PATH$ANDROID_BUILD_PATHS
+ export ANDROID_BUILD_PATHS=$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN$ARM_EABI_TOOLCHAIN_PATH$CODE_REVIEWS:$ANDROID_DEV_SCRIPTS:
+ export PATH=$ANDROID_BUILD_PATHS$PATH
unset ANDROID_JAVA_TOOLCHAIN
unset ANDROID_PRE_BUILD_PATHS
diff --git a/target/product/core.mk b/target/product/core.mk
index da1abae..f23646a 100644
--- a/target/product/core.mk
+++ b/target/product/core.mk
@@ -33,7 +33,6 @@ PRODUCT_PACKAGES += \
KeyChain \
MediaProvider \
PackageInstaller \
- PhotoTable \
PicoTts \
SettingsProvider \
SharedStorageBackup \
diff --git a/target/product/full_base.mk b/target/product/full_base.mk
index fe71a57..4776baa 100644
--- a/target/product/full_base.mk
+++ b/target/product/full_base.mk
@@ -24,6 +24,7 @@ PRODUCT_PACKAGES := \
VideoEditor \
WAPPushManager
+
PRODUCT_PACKAGES += \
libvideoeditor_jni \
libvideoeditor_core \
@@ -31,6 +32,17 @@ PRODUCT_PACKAGES += \
libvideoeditor_videofilters \
libvideoeditorplayer
+PRODUCT_PACKAGES += \
+ Galaxy4 \
+ HoloSpiralWallpaper \
+ LiveWallpapers \
+ LiveWallpapersPicker \
+ MagicSmokeWallpapers \
+ NoiseField \
+ PhaseBeam \
+ VisualizationWallpapers \
+ PhotoTable
+
# Additional settings used in all AOSP builds
PRODUCT_PROPERTY_OVERRIDES := \
ro.com.android.dateformat=MM-dd-yyyy
diff --git a/target/product/mini.mk b/target/product/mini.mk
index 76d4511..b69c917 100644
--- a/target/product/mini.mk
+++ b/target/product/mini.mk
@@ -218,7 +218,7 @@ $(call inherit-product-if-exists, frameworks/base/data/sounds/AudioPackage5.mk)
PRODUCT_PACKAGES += \
TestingCamera \
Home \
- DummySystemUI \
- DummySettings \
+ SystemUI \
+ Settings \
libsurfaceflinger_ddmconnection
diff --git a/tools/droiddoc/templates-ds/assets/GPL-LICENSE.txt b/tools/droiddoc/templates-ds/assets/GPL-LICENSE.txt
new file mode 100644
index 0000000..66a0f18
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/GPL-LICENSE.txt
@@ -0,0 +1,278 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES. \ No newline at end of file
diff --git a/tools/droiddoc/templates-ds/assets/LICENSE.txt b/tools/droiddoc/templates-ds/assets/LICENSE.txt
new file mode 100644
index 0000000..e84328b
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2011 John Resig, http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/tools/droiddoc/templates-sdk/assets/android-developer-core.css b/tools/droiddoc/templates-ds/assets/android-developer-core.css
index f548a6c..f548a6c 100644
--- a/tools/droiddoc/templates-sdk/assets/android-developer-core.css
+++ b/tools/droiddoc/templates-ds/assets/android-developer-core.css
diff --git a/tools/droiddoc/templates-sdk/assets/android-developer-docs.css b/tools/droiddoc/templates-ds/assets/android-developer-docs.css
index b8b9c71..b8b9c71 100644
--- a/tools/droiddoc/templates-sdk/assets/android-developer-docs.css
+++ b/tools/droiddoc/templates-ds/assets/android-developer-docs.css
diff --git a/tools/droiddoc/templates-ds/assets/css/default.css b/tools/droiddoc/templates-ds/assets/css/default.css
new file mode 100644
index 0000000..da06e31
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/css/default.css
@@ -0,0 +1,4435 @@
+/* color definitions */
+/* 16 column layout */
+/* clearfix idiom */
+/* common mixins */
+/* page layout + top-level styles */
+::-webkit-selection,
+::-moz-selection,
+::selection {
+ background-color: #0099cc;
+ color: #fff; }
+
+html, body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ background-color:#F9F9F9;
+ -webkit-font-smoothing: antialiased;
+ /* prevent subpixel antialiasing, which thickens the text */
+ /* text-rendering: optimizeLegibility; */
+ /* turned off ligatures due to bug 5945455 */ }
+
+body {
+ color: #222;
+ font: 14px/19px Roboto, sans-serif;
+ font-weight: 400;
+ letter-spacing:.1;
+ padding:0 10px; }
+
+#page-container {
+ width: 940px;
+ margin: 0 40px; }
+
+#page-header {
+ height: 80px;
+ margin-bottom: 20px;
+ font-size: 48px;
+ line-height: 48px;
+ font-weight: 100;
+ padding-left: 10px; }
+ #page-header a {
+ display: block;
+ position: relative;
+ top: 20px;
+ text-decoration: none;
+ color: #555555 !important; }
+
+#main-row {
+ display: inline-block; }
+ #main-row:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden; }
+ * html #main-row {
+ height: 1px; }
+
+#page-footer {
+ margin-left: 190px;
+ margin-top: 80px;
+ color: #999999;
+ padding-bottom: 40px;
+ font-size: 12px;
+ line-height: 15px; }
+ #page-footer a {
+ color: #777777; }
+ #page-footer #copyright {
+ margin-bottom: 10px; }
+
+#nav-container {
+ width: 160px;
+ min-height: 10px;
+ margin-right: 20px;
+ float: left; }
+
+#nav {
+ margin:0;
+ padding:0 0 30px;
+}
+
+#side-nav {
+ min-height:5px; /* silly way to avoid doc floating left when nav goes fixed */
+ margin-bottom:1px;
+}
+#devdoc-nav {
+ outline:none;
+ width:auto;
+ margin: 20px 0 0; }
+
+#devdoc-nav h2 {
+ border:0;
+}
+
+#devdoc-nav.fixed {
+ position: fixed;
+ margin:0;
+ top: 20px; }
+
+#devdoc-nav span.small {
+ font-size:12px;
+ font-weight:normal;
+}
+
+#content {
+ width: 760px;
+ float: left; }
+
+a:hover,
+acronym:hover {
+ color: #7aa1b0 !important; }
+
+a:focus,
+a:active {
+ color: #33b5e5 !important; }
+
+a.external-link {
+ background:url('../images/styles/open_new_page.png') no-repeat 100% 50%;
+ padding-right:16px;
+}
+
+img {
+ border: none; }
+#jd-content img {
+ margin-bottom:15px;
+}
+
+ul {
+ margin: 0;
+ padding: 0; }
+
+strong {
+ font-weight: 500; }
+
+em {
+ font-style: italic; }
+
+acronym,
+.tooltip-link {
+ border-bottom: 1px dotted #555555;
+ cursor: help; }
+
+acronym:hover,
+.tooltip-link:hover {
+ color: #7aa1b0;
+ border-bottom-color: #7aa1b0; }
+
+img.with-shadow,
+video.with-shadow {
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25); }
+
+/* disclosures mixin */
+/* content layout */
+.layout-content-row {
+ display: inline-block;
+ margin-bottom: 10px; }
+ .layout-content-row:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden; }
+ * html .layout-content-row {
+ height: 1px; }
+
+.layout-content-col {
+ float: left;
+ margin-left: 20px; }
+ .layout-content-col:first-child {
+ margin-left: 0; }
+ .layout-content-col h3,
+ .layout-content-col h4 {
+ margin-top:0; }
+
+.layout-content-col.span-1 {
+ width: 40px; }
+
+.layout-content-col.span-2 {
+ width: 100px; }
+
+.layout-content-col.span-3 {
+ width: 160px; }
+
+.layout-content-col.span-4 {
+ width: 220px; }
+
+.layout-content-col.span-5 {
+ width: 280px; }
+
+.layout-content-col.span-6 {
+ width: 340px; }
+
+.layout-content-col.span-7 {
+ width: 400px; }
+
+.layout-content-col.span-8 {
+ width: 460px; }
+
+.layout-content-col.span-9 {
+ width: 520px; }
+
+.layout-content-col.span-10 {
+ width: 580px; }
+
+.layout-content-col.span-11 {
+ width: 640px; }
+
+.layout-content-col.span-12 {
+ width: 700px; }
+
+.layout-content-col.span-13 {
+ width: 760px; }
+
+.vspace.size-1 {
+ height: 10px; }
+
+.vspace.size-2 {
+ height: 20px; }
+
+.vspace.size-3 {
+ height: 30px; }
+
+.vspace.size-4 {
+ height: 40px; }
+
+.vspace.size-5 {
+ height: 50px; }
+
+.vspace.size-6 {
+ height: 60px; }
+
+.vspace.size-7 {
+ height: 70px; }
+
+.vspace.size-8 {
+ height: 80px; }
+
+.vspace.size-9 {
+ height: 90px; }
+
+.vspace.size-10 {
+ height: 100px; }
+
+.vspace.size-11 {
+ height: 110px; }
+
+.vspace.size-12 {
+ height: 120px; }
+
+.vspace.size-13 {
+ height: 130px; }
+
+.vspace.size-14 {
+ height: 140px; }
+
+.vspace.size-15 {
+ height: 150px; }
+
+.vspace.size-16 {
+ height: 160px; }
+
+/* nav */
+#nav {
+ /* section header divs */
+ /* expanded section header divs */
+ /* sublinks */ }
+ #nav li {
+ list-style-type: none;
+ font-size: 14px;
+ margin:0;
+ padding:0;
+ line-height: 15px; }
+ #nav a {
+ color: #555555;
+ text-decoration: none;
+ word-wrap:break-word; }
+ #nav .nav-section-header {
+ position: relative;
+ margin-bottom: 1px;
+ padding: 0 30px 0 0; }
+ #nav li.selected a, #nav li.selected > .nav-section-header > a {
+ color: #09C;
+ }
+ #nav li.selected ul li a {
+ /* don't highlight child items */
+ color: #555555; }
+ #nav .nav-section .nav-section .nav-section-header {
+ /* no white line between second level sections */
+ margin-bottom: 0; }
+ /* section header links */
+ #nav > li > div > a {
+ display: block;
+ color: #333333;
+ font-weight: 500;
+ padding: 10px 0 10px 10px; }
+ #nav .nav-section-header:after {
+ content: '';
+ background: transparent url(../images/styles/disclosure_down.png) no-repeat scroll 50% 50%;
+ width: 34px;
+ height: 34px;
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 0; }
+ #nav .nav-section-header.empty:after {
+ display: none; }
+ /* nested nav headers */
+ #nav .nav-section .nav-section {
+ position: relative;
+ padding: 0;
+ margin: 0; }
+ #nav .nav-section li a {
+ /* first gen child (2nd level li) */
+ display:block;
+ font-weight: normal;
+ text-transform: none;
+ padding: 7px 5px 7px 10px;
+ }
+ #nav .nav-section li li a {
+ /* second gen child (3rd level li) */
+ padding: 5px 5px 5px 10px;
+ }
+ #nav li.expanded .nav-section-header {
+ background:#e9e9e9;
+ background: rgba(0, 0, 0, 0.05); }
+ #nav li.expanded li .nav-section-header {
+ background: transparent; }
+ #nav li.expanded li ul {
+ /* 3rd level ul */
+ padding:0 0 0 10px;
+ }
+ #nav li.expanded > .nav-section-header:after {
+ content: '';
+ background: transparent url(../images/styles/disclosure_up.png) no-repeat scroll 50% 50%;
+ width: 34px;
+ height: 34px; }
+ #nav li.expanded li ul.tree-list-children {
+ padding:0;
+ }
+ #nav li.expanded li ul.tree-list-children .tree-list-children {
+ padding:0 0 0 10px;
+ }
+ #nav li span.tree-list-subtitle {
+ display:inline-block;
+ padding:5px 0 0 10px;
+ color:#555;
+ text-transform:uppercase;
+ font-size:12px;
+ }
+ #nav li span.tree-list-subtitle:before {
+ content: '—';
+ }
+ #nav li span.tree-list-subtitle:after {
+ content: '—';
+ }
+ #nav li ul {
+ display:none;
+ overflow: hidden;
+ margin: 0; }
+ #nav li ul.animate-height-in {
+ -webkit-transition: height 0.25s ease-in;
+ -moz-transition: height 0.25s ease-in;
+ transition: height 0.25s ease-in; }
+ #nav li ul.animate-height-out {
+ -webkit-transition: height 0.25s ease-out;
+ -moz-transition: height 0.25s ease-out;
+ transition: height 0.25s ease-out; }
+ #nav li ul li {
+ padding: 0; }
+ #nav li li li {
+ padding: 0; }
+ #nav li.expanded ul {
+ }
+ #nav li ul > li {
+ padding:0;
+ }
+ #nav li ul > li:last-child {
+ padding-bottom:5px;
+ }
+ #nav li ul.tree-list-children > li:last-child {
+ padding-bottom:0;
+ }
+ #nav li.expanded ul > li {
+ background:#efefef;
+ background: rgba(0, 0, 0, 0.03); }
+ #nav li.expanded ul > li li {
+ background:inherit; }
+ #nav li ul.tree-list-children ul {
+ display:block; }
+
+.new,
+.new-child {
+ font-size: .78em;
+ font-weight: bold;
+ color: #ff3d3d;
+ vertical-align:top;
+ white-space:nowrap;
+}
+
+/* content header */
+.content-header {
+ height: 30px;
+ margin:20px 0 25px;
+ padding:0 0 10px;}
+.content-header.just-links {
+ margin-bottom:0;
+ padding-bottom:0;}
+
+.content-header h1 {
+ color:#000;
+ margin:0;
+ border-bottom:0;
+ padding:0;
+}
+
+.content-footer {
+ border-top: 1px solid #ccc;
+ margin-top: 10px;
+ padding-top:10px;
+ height: 30px; }
+
+.content-footer .col-9 {
+ margin-left:0;
+}
+.content-footer .col-4 {
+ margin-right:0;
+}
+.content-footer.wrap {
+ width:940px;
+}
+
+.paging-links {
+ position: relative; }
+ .paging-links a {
+ position: absolute; }
+ .paging-links a,
+ .training-nav-top a {
+ font-size: 14px;
+ line-height: 30px;
+ color: #555555;
+ text-decoration: none;
+ text-transform: uppercase; }
+ .paging-links .prev-page-link:before,
+ .training-nav-top .prev-page-link:before {
+ content: '';
+ background: transparent url(../images/styles/disclosure_left.png) no-repeat scroll 50% 50%;
+ width: 10px;
+ height: 10px;
+ display: inline-block;
+ margin-right: 5px; }
+ .training-nav-top .next-page-link,
+ .training-nav-top .start-class-link,
+ .training-nav-top .start-course-link {
+ right: 10px; }
+ .paging-links .prev-page-link {
+ left: -15px; }
+ .paging-links .next-page-link {
+ right: 0px; }
+ .next-page-link:after,
+ .start-class-link:after,
+ .start-course-link:after,
+ .next-class-link:after {
+ content: '';
+ background: transparent url(../images/styles/disclosure_right.png) no-repeat scroll 50% 50%;
+ width: 10px;
+ height: 10px;
+ display: inline-block;
+ margin-left: 5px; }
+
+
+ .training-nav-top a {
+ display:block;
+ float:left;
+ width:122px;
+ height:28px;
+ padding: 8px;
+ line-height:28px;
+ text-align:center;
+ border:1px solid #DADADA;
+ border-bottom:0;
+ }
+
+ .training-nav-top a.next-page-link {
+ border-left:0;
+ width:123px;
+ }
+
+ .paging-links a.disabled,
+ .training-nav-top a.disabled,
+ .content-footer a.disabled {
+ color:#bbb;
+ }
+
+ .paging-links a.disabled:hover,
+ .training-nav-top a.disabled:hover,
+ .content-footer a.disabled:hover {
+ cursor:default;
+ color:#bbb !important;
+ }
+
+ .training-nav-top a.start-class-link,
+ .training-nav-top a.start-course-link {
+ width:262px;
+ }
+
+ /* list of classes on course landing page */
+ ol.class-list {
+ list-style:none;
+ margin-left:0;
+ }
+ ol.class-list>li {
+ margin:0 0 15px;
+ padding:5px 0 0;
+ overflow:hidden;
+ border-top:1px solid #ccc;
+ }
+ ol.class-list li a.title {
+ font-size:16px;
+ margin:0;
+ clear:left;
+ display:block;
+ height:32px;
+ padding:0 4px;
+ }
+ ol.class-list li a.title h2 {
+ color:inherit;
+ margin:0 0 10px;
+ display:block;
+ float:left;
+ width:675px;
+ }
+ ol.class-list li a.title span {
+ display:none;
+ float:left;
+ font-size:18px;
+ font-weight:bold;
+ background: transparent url(../images/styles/disclosure_right.png) no-repeat scroll 50% 50%;
+ width: 10px;
+ height: 32px;
+ }
+ ol.class-list li a.title:hover {
+ background:#ddd;
+ color:#258AAF !important;
+ }
+ ol.class-list li a.title:hover span {
+ display:block;
+ }
+
+ #jd-content
+ ol.class-list li img {
+ float:left;
+ clear:left;
+ width:64px;
+ margin:0 20px 0 0;
+ }
+ ol.class-list li p.description {
+ float:left;
+ display:block;
+ width:250px;
+ margin:0;
+ }
+ ol.class-list li p.description.article {
+ width: 550px;
+ }
+ ol.class-list ol {
+ float:left;
+ width:320px;
+ margin:0 0 0 30px;
+ list-style:none;
+ margin:0 0 0 20px;
+ }
+ ol.class-list div.lessons li {
+ margin:0 0 6px;
+ line-height:16px;
+ }
+
+
+ .hide {
+ display:none !important;
+ }
+
+ .content-footer.next-class {
+ display:block;
+ border:0;
+ margin-top:0;
+ padding-top:0;
+ }
+
+ .content-footer.next-class a.next-class-link {
+ display:block;
+ float:right;
+ text-transform:uppercase;
+ }
+
+
+
+ /* inner-doc tabs w/ title */
+
+div#title-tabs-wrapper {
+ border-bottom:1px solid #ccc;
+ margin:20px 0 30px;
+}
+h1.with-title-tabs {
+ display:inline-block;
+ margin:0 0 -1px 0;
+ padding:0 60px 0 0;
+ border-bottom:1px solid #F9F9F9;
+}
+ul#title-tabs {
+ list-style:none;
+ padding:0;
+ height:29px;
+ margin:0;
+ font-size:16px;
+ line-height:26px;
+ display:inline-block;
+ vertical-align:bottom;
+}
+ul#title-tabs li {
+ display:block;
+ float:left;
+ margin-right:40px;
+ border-bottom: 3px solid transparent;
+}
+ul#title-tabs li.selected {
+ border-bottom: 3px solid #93C;
+}
+ul#title-tabs li a {
+ color:#333;
+}
+ul#title-tabs li a:hover,
+ul#title-tabs li a:active {
+ color:#93C !important;
+}
+
+
+
+/* content body */
+@-webkit-keyframes glowheader {
+ from {
+ background-color: #33b5e5;
+ color: #000;
+ border-bottom-color: #000; }
+
+ to {
+ background-color: transparent;
+ color: #33b5e5;
+ border-bottom-color: #33b5e5; } }
+
+@-moz-keyframes glowheader {
+ from {
+ background-color: #33b5e5;
+ color: #000;
+ border-bottom-color: #000; }
+
+ to {
+ background-color: transparent;
+ color: #33b5e5;
+ border-bottom-color: #33b5e5; } }
+
+@keyframes glowheader {
+ from {
+ background-color: #33b5e5;
+ color: #000;
+ border-bottom-color: #000; }
+
+ to {
+ background-color: transparent;
+ color: #33b5e5;
+ border-bottom-color: #33b5e5; } }
+
+h2:target,
+h3:target {
+ -webkit-animation-name: glowheader;
+ -moz-animation-name: glowheader;
+ animation-name: glowheader;
+ -webkit-animation-duration: 0.7s;
+ -moz-animation-duration: 0.7s;
+ animation-duration: 0.7s;
+ -webkit-animation-timing-function: ease-out;
+ -moz-animation-timing-function: ease-out;
+ animation-timing-function: ease-out; }
+
+.design ol h4 {
+ margin-bottom:0;
+}
+.design ol {
+ counter-reset: item; }
+ .design ol>li {
+ font-size: 14px;
+ line-height: 20px;
+ list-style-type: none;
+ position: relative; }
+ .design ol>li:before {
+ content: counter(item) ". ";
+ counter-increment: item;
+ position: absolute;
+ left: -20px;
+ top: 0; }
+ .design ol li.value-1:before {
+ content: "1. "; }
+ .design ol li.value-2:before {
+ content: "2. "; }
+ .design ol li.value-3:before {
+ content: "3. "; }
+ .design ol li.value-4:before {
+ content: "4. "; }
+ .design ol li.value-5:before {
+ content: "5. "; }
+ .design ol li.value-6:before {
+ content: "6. "; }
+ .design ol li.value-7:before {
+ content: "7. "; }
+ .design ol li.value-8:before {
+ content: "8. "; }
+ .design ol li.value-9:before {
+ content: "9. "; }
+ .design ol li.value-10:before {
+ content: "10. "; }
+.design .with-callouts ol>li {
+ list-style-position: inside;
+ margin-left: 0; }
+ .design .with-callouts ol>li:before {
+ display: inline;
+ left: -20px;
+ float: left;
+ width: 17px;
+ color: #33b5e5;
+ font-weight: 500; }
+.design .with-callouts ul>li {
+ list-style-position: outside; }
+
+/* special list items */
+li.no-bullet {
+ list-style-type: none !important; }
+li.no-bullet *{
+ margin:0; }
+
+.design li.with-icon {
+ position: relative;
+ margin-left: 20px;
+ min-height: 30px; }
+ .design li.with-icon p {
+ margin-left: 0 !important; }
+ .design li.with-icon:before {
+ position: absolute;
+ left: -40px;
+ top: 0;
+ content: '';
+ width: 30px;
+ height: 30px; }
+ .design li.with-icon.tablet:before {
+ background-image: url(../images/styles/ico_phone_tablet.png); }
+ .design li.with-icon.web:before {
+ background-image: url(../images/styles/ico_web.png); }
+ .design li.with-icon.action:before {
+ background-image: url(../images/styles/ico_action.png); }
+ .design li.with-icon.use:before {
+ background-image: url(../images/styles/ico_use.png); }
+
+/* figures and callouts */
+.figure {
+ position: relative; }
+ .figure.pad-below {
+ margin-bottom: 20px; }
+ .figure .figure-callout {
+ position: absolute;
+ color: #fff;
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 23px;
+ text-align: center;
+ background: transparent url(../images/styles/callout.png) no-repeat scroll 50% 50%;
+ padding-right: 2px;
+ width: 30px;
+ height: 29px;
+ z-index: 1000; }
+ .figure .figure-callout.top {
+ top: -9px; }
+ .figure .figure-callout.right {
+ right: -5px; }
+
+.figure-caption {
+ margin: 0 10px 20px 0;
+ font-size: 14px;
+ line-height: 20px;
+ font-style: italic; }
+
+/* rows of figures */
+.figure-row {
+ font-size: 0;
+ line-height: 0;
+ /* to prevent space between figures */ }
+ .figure-row .figure {
+ display: inline-block;
+ vertical-align: top; }
+ .figure-row .figure + .figure {
+ margin-left: 10px;
+ /* reintroduce space between figures */ }
+
+/* video containers */
+.framed-galaxynexus-land-span-13 {
+ background: transparent url(../images/styles/device_galaxynexus_blank_land_span13.png) no-repeat
+scroll top left;
+ padding: 42px 122px 62px 126px;
+ overflow: hidden; }
+ .framed-galaxynexus-land-span-13, .framed-galaxynexus-land-span-13 video,
+.framed-galaxynexus-land-span-13 img {
+ width: 512px;
+ height: 286px; }
+
+
+.framed-galaxynexus-land-span-8{
+ background: transparent url(../images/styles/device_galaxynexus_blank_land_span8.png) no-repeat
+scroll top left;
+ padding: 26px 68px 38px 72px;
+ overflow: hidden; }
+ .framed-galaxynexus-land-span-8, .framed-galaxynexus-land-span-8 video,
+.framed-galaxynexus-land-span-8 img {
+ width: 320px;
+ height: 180px; }
+
+.framed-galaxynexus-port-span-9 {
+ background: transparent url(../images/styles/device_galaxynexus_blank_port_span9.png) no-repeat
+scroll top left;
+ padding: 95px 122px 107px 124px;
+ overflow: hidden; }
+ .framed-galaxynexus-port-span-9, .framed-galaxynexus-port-span-9 video,
+.framed-galaxynexus-port-span-9 img {
+ width: 274px;
+ height: 488px; }
+
+.framed-galaxynexus-port-span-5 {
+ background: transparent url(../images/styles/device_galaxynexus_blank_port_span5.png) no-repeat
+scroll top left;
+ padding: 75px 31px 76px 33px;
+ overflow: hidden; }
+ .framed-galaxynexus-port-span-5, .framed-galaxynexus-port-span-5 video,
+.framed-galaxynexus-port-span-5 img {
+ width: 216px;
+ height: 384px; }
+
+/* landing page disclosures */
+.landing-page-link {
+ text-decoration: none;
+ font-weight: 500;
+ color: #333333; }
+ .landing-page-link:after {
+ content: '';
+ background: transparent url(../images/styles/disclosure_right.png) no-repeat scroll 50% 50%;
+ width: 10px;
+ height: 10px;
+ display: inline-block;
+ margin-left: 5px; }
+
+/* tooltips */
+.tooltip-box {
+ position: absolute;
+ background-color: rgba(0, 0, 0, 0.9);
+ border-radius: 2px;
+ font-size: 14px;
+ line-height: 20px;
+ color: #fff;
+ padding: 6px 10px;
+ max-width: 250px;
+ z-index: 10000; }
+ .tooltip-box.below:after {
+ position: absolute;
+ content: '';
+ line-height: 0;
+ display: block;
+ top: -10px;
+ left: 5px;
+ border: 5px solid transparent;
+ border-bottom-color: rgba(0, 0, 0, 0.9); }
+
+/* video note */
+.video-instructions {
+ margin-top: 10px;
+ margin-bottom: 10px; }
+ .video-instructions:before {
+ content: '';
+ background: transparent url(../images/styles/ico_movie_inline.png) no-repeat scroll top left;
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ margin-right: 8px; }
+ .video-instructions:after {
+ content: 'Click device screen to replay movie.'; }
+
+/* download buttons */
+.download-button {
+ display: block;
+ margin-bottom: 5px;
+ text-decoration: none;
+ background-color: #33b5e5;
+ color: #fff !important;
+ font-weight: 500;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12);
+ padding: 6px 12px;
+ border-radius: 2px; }
+ .download-button:hover, .download-button:focus {
+ background-color: #0099cc;
+ color: #fff !important; }
+ .download-button:active {
+ background-color: #006699; }
+
+/* UI tables and other things found in Writing style and Settings pattern */
+.ui-table {
+ width: 100%;
+ background-color: #282828;
+ color: #fff;
+ border-radius: 2px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);
+ border-collapse: separate; }
+ .ui-table th,
+ .ui-table td {
+ padding: 5px 10px;
+ background-color: inherit;
+ border:0;}
+ .ui-table thead th {
+ font-weight: bold; }
+ .ui-table tfoot td {
+ border-top: 1px solid #494949;
+ border-right: 1px solid #494949;
+ text-align: center; }
+ .ui-table tfoot td:last-child {
+ border-right: 0; }
+
+.layout-with-list-item-margins {
+ margin-left: 30px !important; }
+
+.emulate-content-left-padding {
+ margin-left: 10px; }
+
+.do-dont-label {
+ margin-bottom: 10px;
+ padding-left: 20px;
+ background: transparent none no-repeat scroll 0px 3px; }
+ .do-dont-label.bad {
+ background-image: url(../images/styles/ico_wrong.png); }
+ .do-dont-label.good {
+ background-image: url(../images/styles/ico_good.png); }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/***** PREVIOUSLY style.css ******************/
+
+
+
+
+
+@media screen, projection, print {
+[dir='rtl'] {
+ direction: rtl;
+}
+html {
+ line-height: 20px;
+}
+pre, table, input, textarea, code {
+ font-size: 1em;
+}
+address, abbr, cite {
+ font-style: normal;
+}
+[dir='rtl'] th {
+ text-align: right;
+}
+html[lang^=ja] blockquote, html[lang^=ja] q, html[lang^=ko] blockquote, html[lang^=ko] q,
+html[lang^=zh] blockquote, html[lang^=zh] q {
+ font-style: normal;
+}
+q {
+ font-style: italic;
+}
+fieldset, iframe, img {
+ border: 0;
+}
+img {
+ -ms-interpolation-mode: bicubic;
+ vertical-align: middle;
+ max-width: 100%;
+}
+q {
+ quotes: none;
+}
+sup, sub {
+ font-size: 11px;
+ line-height: 0;
+}
+}
+
+@media screen, projection {
+
+table, fieldset {
+ margin: 0;
+}
+h1 {
+ color:#333;
+ font-size: 22px;
+ margin: 20px 0 20px;
+ padding:0 0 10px;
+}
+h1, h2 {
+ line-height: 32px;
+}
+h1.short {
+ margin-right:320px;
+}
+h1.short {
+ margin-right:320px;
+}
+h1.super {
+ font-size: 37px;
+}
+h2 {
+ color:#333;
+ font-size: 20px;
+ margin: 20px 0 20px;
+ padding:0;
+}
+h3 {
+ color:#333;
+ font-size: 18px;
+}
+h3, h4 {
+ color:#333;
+ line-height: 20px;
+ margin: 10px 0;
+}
+h4 {
+ font-size: 16px;
+}
+h5 {
+ font-size: 14px;
+}
+h5, h6 {
+ margin: 5px 0;
+}
+h6 {
+ font-size: 12px;
+}
+hr { /* applied to the bottom of h2 elements */
+ height: 1px;
+ margin: 5px 0 20px;
+ border: 0;
+ background: #ccc;
+}
+p, pre, table, form {
+ margin: 0 0 15px;
+}
+small {
+ font-size: 11.5px;
+ color: #000;
+}
+ul, ol {
+ margin: 0 0 15px 18px;
+ padding: 0;
+}
+[dir='rtl'] ul, [dir='rtl'] ol {
+ margin: 10px 30px 10px 10px;
+}
+ul ul, ul ol, ol ul, ol ol {
+ margin-bottom: 0;
+ margin-top: 0;
+}
+li {
+ margin:0 0 5px;
+}
+dd {
+ margin:0 0 10px 30px;
+}
+dd p {
+ margin:10px 0 0;
+}
+li p,
+li pre,
+li ul,
+li ol {
+ margin-top:5px;
+ margin-bottom:5px;
+}
+pre strong, pre b, a strong, a b, a code {
+ color: inherit;
+}
+pre, code {
+ color: #060;
+ font: 14px/1.5 'courier new', courier, monospace;
+}
+code {
+ font-weight:bold;
+}
+
+legend {
+ display: none;
+}
+a:link, a:visited {
+ color: #258aaf;
+ text-decoration: none;
+}
+a:focus, a:hover, a:active {
+ color: #33B5E5;
+ text-decoration: none;
+}
+strong, b {
+ font-weight:bold;
+ color: #222;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border:0;
+ margin: .5em 1em 1em 0;
+ width:100%; /* consistent table widths; within IE's quirks */
+ background-color:#f7f7f7;
+}
+th, td {
+ padding: 4px 12px;
+ vertical-align: top;
+ text-align: left;
+}
+td {
+ background-color:inherit;
+ border:solid 1px #DDD;
+}
+td *:last-child {
+ margin-bottom:0;
+}
+th {
+ background-color: #999;
+ color: #fff;
+ border:solid 1px #DDD;
+ font-weight: normal;
+}
+tr:first-of-type th:first-of-type:empty {
+ visibility: hidden;
+}
+/* --------------------------------------------------------------------------
+Footer
+*/
+.line {
+ clear: both;
+ background: #acbc00;
+ background: -moz-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #acbc00),
+color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
+ background: -webkit-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
+ background: -o-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
+ background: -ms-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
+ background: linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
+ height: 2px;
+ margin-top: 150px;
+ position: relative;
+ z-index: 11;
+}
+#footer {
+ font-size:11px;
+ clear: both;
+ color: #999;
+ padding: 15px 0;
+ margin-top:10px;
+ width:auto;
+}
+#footer-local ul {
+ list-style: none;
+ margin: 5px 0 30px 0;
+}
+#footer-local li {
+ display: inline;
+}
+#footer-local li+li:before {
+ content: '|';
+ padding: 0 3px;
+ color: #e5e5e5;
+}
+#footer-global {
+ padding: 10px 15px;
+ background: #f5f5f5;
+}
+#footer-global {
+ border-top: 1px solid #ebebeb;
+ font-size: 11.5px;
+ line-height: 1.8;
+ list-style: none;
+}
+#footer-global ul {
+ margin: 0;
+}
+#footer-global li {
+ display: inline;
+ font-weight: bold;
+}
+#footer-global li+li:before {
+ content: '¬?';
+ padding: 0 3px;
+}
+* html #footer-global li {
+ margin: 0 13px 0 0;
+}
+* [dir='rtl'] #footer-global li {
+ margin: 0 0 0 13px;
+}
+*+html #footer-global li {
+ margin: 0 13px 0 0;
+}
+*+[dir='rtl'] #footer-global li {
+ margin: 0 0 0 13px;
+}
+#footer-global li a {
+ font-weight: normal;
+}
+.locales {
+ margin: 10px 0 0 0px;
+}
+[dir='rtl'] .locales {
+ background-position: right center;
+ float: left;
+ padding: 0 24px 0 0;
+}
+.locales form {
+ margin: 0;
+}
+.locales select, .sites select {
+ line-height: 3.08;
+ margin: 0px 0;
+ border: solid 1px #EBEBEB;
+ -webkit-appearance: none;
+ background: white url('../images/arrows-up-down.png') right center no-repeat;
+ height: 30px;
+ color: #222;
+ line-height: normal;
+ padding: 5px;
+ width: 230px;
+}
+}
+
+/* =============================================================================
+ Print Only
+ ========================================================================== */
+@media print {
+ /* configure printed page */
+ @page {
+ margin: 0.75in 1in;
+ widows: 4;
+ orphans: 4;
+ }
+
+ /* reset spacing metrics */
+ html, body, .wrap {
+ margin: 0 !important;
+ padding: 0 !important;
+ width: auto !important;
+ }
+
+ /* leave enough space on the left for bullets */
+ body {
+ padding-left: 20px !important;
+ }
+ #doc-col {
+ margin-left: 0;
+ }
+
+ /* hide a bunch of non-content elements */
+ #header, #footer, #nav-x, #side-nav,
+ .training-nav-top, .training-nav-bottom,
+ #doc-col .content-footer,
+ .nav-x, .nav-y,
+ .paging-links,
+ a.totop {
+ display: none !important;
+ }
+
+ /* remove extra space above page titles */
+ #doc-col .content-header {
+ margin-top: 0;
+ }
+
+ /* bump up spacing above subheadings */
+ h2 {
+ margin-top: 40px !important;
+ }
+
+ /* print link URLs where possible and give links default text color */
+ p a:after {
+ content: " (" attr(href) ")";
+ font-size: 80%;
+ }
+ p a {
+ word-wrap: break-word;
+ }
+ a {
+ color: inherit;
+ }
+
+ /* syntax highlighting rules */
+ .str { color: #060; }
+ .kwd { color: #006; font-weight: bold; }
+ .com { color: #600; font-style: italic; }
+ .typ { color: #404; font-weight: bold; }
+ .lit { color: #044; }
+ .pun { color: #440; }
+ .pln { color: #000; }
+ .tag { color: #006; font-weight: bold; }
+ .atn { color: #404; }
+ .atv { color: #060; }
+}
+
+/* =============================================================================
+ Columns
+ ========================================================================== */
+
+@media screen, projection, print {
+.full {
+ padding: 2.5em 0;
+ border-top: solid 1px #ddd;
+ border-bottom: solid 1px #ddd;
+ background: #f7f7f7;
+}
+.wrap {
+ margin: 0 auto;
+ width: 940px;
+ clear: both;
+}
+.cols {
+ height: 1%;
+ margin: 0 -1.533742331288343558282%;
+ width: 103.06748466257669%}
+*+html .cols {
+ margin-bottom: 20px;
+}
+.cols:after {
+ clear: both;
+ content: ' ';
+ display: block;
+ height: 0;
+ visibility: hidden;
+}
+.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
+.col-13, .col-14, .col-15, .col-16 {
+ display: inline;
+ float: left;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+/*
+* html .col-1, * html .col-2, * html .col-3, * html .col-4, * html .col-5, * html .col-6, * html
+.col-7, * html .col-8, * html .col-9, * html .col-10, * html .col-11, * html .col-12 {
+ margin: 0;
+ padding: 0 1.4% 20px;
+}
+[dir='rtl'] .col-1, [dir='rtl'] .col-2, [dir='rtl'] .col-3, [dir='rtl'] .col-4, [dir='rtl'] .col-5,
+[dir='rtl'] .col-6, [dir='rtl'] .col-7, [dir='rtl'] .col-8, [dir='rtl'] .col-9, [dir='rtl'] .col-10,
+[dir='rtl'] .col-11, [dir='rtl'] .col-12 {
+ float: right;
+}
+*/
+.col-1 { width: 40px }
+.col-2 { width: 100px }
+.col-3 { width: 160px }
+.col-4 { width: 220px }
+.col-5 { width: 280px }
+.col-6 { width: 340px }
+.col-7 { width: 400px }
+.col-8 { width: 460px }
+.col-9 { width: 520px }
+.col-10 { width: 580px }
+.col-11 { width: 640px }
+.col-12 { width: 700px }
+.col-13 { width: 760px }
+.col-14 { width: 820px }
+.col-15 { width: 880px }
+.col-16 { width: 940px }
+}
+
+.col-right {
+ margin-right:0px;
+}
+
+@media screen and (max-width:772px) {
+.col-5, .col-6, .col-7 {
+ clear: both;
+ width: 97.0238096%}
+}
+
+/* =============================================================================
+ Layout
+ ========================================================================== */
+@media screen, projection, print {
+
+/* --------------------------------------------------------------------------
+Header, Login, Nav-X, Search
+*/
+#header {
+ padding: 2.2em 0 0.2em 0;
+}
+#header:before, #header:after {
+ content: "";
+ display: table;
+ clear: both
+}
+.logo, .nav-x {
+ float: left;
+}
+.nav-x {
+ margin-top: -2px;
+ list-style-type: none;
+}
+.nav-x a {
+ color: #333;
+ font-size: 16px;
+}
+.design a.selected {
+ color: #33b5e5;
+}
+.develop a.selected {
+ color: #F80;
+}
+.distribute a.selected {
+ color: #9C0;
+}
+
+
+
+.nav-x li {
+ display: inline;
+ margin-right: 45px;
+}
+.search {
+ float: right;
+ position: relative;
+ width: 220px
+}
+.search .bottom, .search .left, .search .right {
+ position: absolute;
+ background-color: #a3a3a3;
+}
+.search .bottom {
+ width: 220px;
+ height: 1px;
+ top: 24px;
+ left: 0
+}
+.search .left, .search .right {
+ height: 5px;
+ width: 1px
+}
+.search .left { top: 19px; left: 0 }
+.search .right { top: 19px; right: 0 }
+.search form {
+ float: left;
+ margin-top: 2px;
+ width: inherit;
+}
+.search .close,
+#player-frame .close {
+ position: absolute;
+ right: 8px;
+ bottom: 4px;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ text-indent: -1000em;
+ background: url(../images/close.png) no-repeat 0 0;
+ z-index:9999;
+}
+.search .close:hover, .search .close:focus,
+#player-frame .close:hover, #player-frame .close:focus {
+ background-position: -16px 0;
+ cursor:pointer;
+}
+#player-frame .close {
+ top: 6px;
+}
+.search form input {
+ color: #999;
+ font-size: 1em;
+ width: inherit;
+ border: none;
+ margin: 0;
+ padding:0 0 0 6px;
+ z-index: 1500;
+ background-color: transparent
+}
+.search:hover .bottom, .search:hover .left, .search:hover .right {
+ background-color: #33b5e5;
+}
+.search:hover .icon {
+ background-position: -8px 0
+}
+.search form input:focus {
+ color: #222;
+ font-weight: bold;
+ outline:0;
+}
+/* Search Dropdown */
+.search-dropdown {
+ padding: 15px;
+ width: 192px;
+ border: solid 1px #c5c5c5;
+ background: #fff;
+ position: absolute;
+ top: 35px;
+ left: 0;
+ -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
+ -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.2);
+ box-shadow: 0 0 10px rgba(0,0,0,0.2)
+}
+.search-dropdown ul, .search-dropdown ul li {
+ list-style-type: none;
+ margin: 0;
+ padding: 0
+}
+.search-dropdown ul li {
+ clear: both
+}
+.search-dropdown img {
+ float: left;
+ margin: 0 10px 10px 0
+}
+.search-dropdown h6 {
+ color: #222;
+ margin: 0;
+ line-height: normal
+}
+.search-dropdown .desc {
+ color: #999;
+ font-size: 11.5px;
+ line-height: normal;
+ margin: 0;
+}
+.search-dropdown li a:hover h6, .search-dropdown li a:hover .desc {
+ color: #33b5e5
+}
+/* --------------------------------------------------------------------------
+Buttons
+*/
+.button, a.button, .button-secondary, a.button-secondary {
+ border-image: initial;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+ cursor: pointer;
+}
+.button, a.button {
+ display:inline-block;
+ background-color: #09c;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
+ background-image: -webkit-linear-gradient(top, #2faddb, #09c);
+ background-image: -moz-linear-gradient(top, #2faddb, #09c);
+ background-image: -ms-linear-gradient(top, #2faddb, #09c);
+ background-image: -o-linear-gradient(top, #2faddb, #09c);
+ background-image: linear-gradient(top, #2faddb, #09c);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#0099cc',GradientType=0);
+ border: 1px solid #3990ab;
+ color: #fff;
+}
+.button-secondary, a.button-secondary {
+ background-color: #f3f3f3;
+ border: 1px solid #dcdcdc;
+ color: #444;
+}
+a.button, a.button:visited, a.button-secondary, a.button-secondary:visited {
+ margin-right: 16px;
+ font-weight: 400;
+ min-width: 54px;
+ outline: 0;
+ padding: 8px 15px;
+ text-align: center;
+}
+.button, .button-secondary {
+ margin-right: 16px;
+ font-weight: 400;
+ min-width: 54px;
+ outline: 0;
+ padding: 0 15px;
+ text-align: center;
+}
+.button:hover, a.button:hover {
+ border-color: #09c;
+ background-color: #4cadcb;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5dbcd9), to(#4cadcb));
+ background-image: -webkit-linear-gradient(top, #5dbcd9, #4cadcb);
+ background-image: -moz-linear-gradient(top, #5dbcd9, #4cadcb);
+ background-image: -ms-linear-gradient(top, #5dbcd9, #4cadcb);
+ background-image: -o-linear-gradient(top, #5dbcd9, #4cadcb);
+ background-image: linear-gradient(top, #5dbcd9, #4cadcb);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9',
+EndColorStr='#4cadcb',GradientType=0);
+ color: #fff !important;
+}
+.button:active, a.button:active {
+ background-color: #1e799a;
+ background-image: none;
+ border-color: #30b7e6;
+}
+a.button.big.subtitle {
+ line-height:18px;
+}
+.button-secondary:hover, a.button-secondary:hover {
+ border-color: #dbdbdb;
+ background-color: #f3f3f3;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
+ background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
+ background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
+ background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
+ background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
+ background-image: linear-gradient(top, #f9f9f9, #ececec);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
+EndColorStr='#ececec');
+ color: #33B5E5 !important;
+}
+.button-secondary:active, a.button-secondary:active {
+ border-color: #dadada;
+ background: #ebebeb; /* Old browsers */
+ /* IE9 SVG, needs conditional override of 'filter' to 'none' */
+ background:
+url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/
+Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0Jv
+eD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+
+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIg
+eDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZWJl
+YiIgc3RvcC1vcGFjaXR5PSIxIi8+
+CiAgICA8c3RvcCBvZmZzZXQ9IjEwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+
+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZhZmFmYSIgc3RvcC1vcGFjaXR5PSIxIi8+
+CiAgICA8c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+
+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNmY2ZjYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFy
+R3JhZGllbnQ+
+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIg
+Lz4KPC9zdmc+);
+ background: -moz-linear-gradient(top, #ebebeb 0%, #f9f9f9 5%, #fafafa 50%, #f9f9f9 90%,
+#ffffff 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb),
+color-stop(5%,#f9f9f9), color-stop(50%,#fafafa), color-stop(90%,#f9f9f9), color-stop(100%,#ffffff));
+/* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9
+90%,#ffffff 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
+100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
+100%); /* IE10+ */
+ background: linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
+100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebebeb',
+endColorstr='#ffffff',GradientType=0 ); /* IE6-8 */
+ -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ color: #258AAF !important;
+}
+.button.big {
+ font-size:20px;
+ display:inline-block;
+}
+.button.big span.small {
+ font-size:14px;
+}
+.button-caption {
+ margin-top:10px;
+ font-size:12px;
+ font-style:italic;
+}
+
+.button.disabled,
+.button.disabled:hover,
+.button.disabled:active {
+ background:#ebebeb;
+ color:#999 !important;
+ border-color:#999;
+ cursor:default;
+}
+
+.training-nav-top a.button-secondary,
+.training-nav-bottom a.button-secondary {
+ display:block;
+ float:left;
+ margin:0;
+ width:130px;
+ text-transform:uppercase;
+ font-weight:bold;
+
+ background-color: #f3f3f3;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
+ background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
+ background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
+ background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
+ background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
+ background-image: linear-gradient(top, #f9f9f9, #ececec);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
+EndColorStr='#ececec');
+ color: #33B5E5;
+}
+
+.training-nav-top a.button-secondary:hover,
+.training-nav-bottom a.button-secondary:hover {
+ background-color: #09c;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
+ background-image: -webkit-linear-gradient(top, #2faddb, #09c);
+ background-image: -moz-linear-gradient(top, #2faddb, #09c);
+ background-image: -ms-linear-gradient(top, #2faddb, #09c);
+ background-image: -o-linear-gradient(top, #2faddb, #09c);
+ background-image: linear-gradient(top, #2faddb, #09c);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#09c');
+ border: 1px solid #3990ab;
+ color: #fff !important;
+}
+
+.training-nav-top a.button-secondary.last,
+.training-nav-bottom a.button-secondary.last {
+ border-left:0;
+}
+
+.training-nav-top a.button-secondary.double-size,
+.training-nav-bottom a.button-secondary.double-size {
+ width:291px;
+}
+
+.training-nav-top,
+.training-nav-bottom {
+ float:right;
+ margin:0 0 0 20px;
+}
+
+.training-nav-bottom {
+ padding:0 0 20px;
+}
+
+#tb-wrapper,
+#qv-wrapper {
+ float:right;
+ clear:right;
+ margin:-27px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
+ padding:0 0 20px;
+}
+
+#tb,
+#qv {
+ font-size:13px;
+ line-height:18px;
+ width:238px;
+ border:1px solid #ccc;
+ float:right;
+}
+
+#tb {
+ width:278px;
+}
+
+#tb h2,
+#qv h2 {
+ margin:10px 15px;
+ padding:0;
+ text-transform:uppercase;
+ border-bottom:1px solid gainsboro;
+}
+
+#tb *,
+#qv * {
+ font-size:inherit;
+}
+
+#tb .download-box {
+ padding:0 0 0 15px;
+}
+
+#tb .download-box .filename {
+ font-size:11px;
+ margin:4px 4px 10px;
+ color:#666;
+}
+
+
+/* Dev guide quicknav */
+
+.sidebox-wrapper {
+ float:right;
+ clear:right;
+ margin:0 0 0 20px;
+ padding:0 0 20px;
+}
+
+.sidebox {
+ width:226px;
+ font-size:13px;
+ line-height:18px;
+ border-left:4px solid #99CC00;
+ float:right;
+ padding:0 0 0 10px;
+ margin:0 0 1em 20px;
+}
+
+.sidebox h2,
+.sidebox h3,
+.sidebox h4,
+.sidebox h5 {
+ font-weight:bold;
+ margin:0 0 10px;
+}
+
+.sidebox * {
+ font-size:inherit;
+}
+
+#tb ol,
+#tb ul,
+#qv ul {
+ margin:0 15px 10px 35px;
+}
+
+#qv ol {
+ list-style:none;
+ margin:0 15px 15px;
+ font-size:inherit;
+ line-height:inherit;
+}
+
+#tb ol ol,
+#tb ul ul,
+#qv ol ol,
+#qv ul ul,
+.sidebox ol ol,
+.sidebox ul ul {
+ margin-bottom:0;
+}
+
+#qv ol ol {
+ margin:3px 0 3px 15px;
+}
+
+.sidebox p,
+#qv p,
+#tb p {
+ margin: 0 0 10px;
+}
+
+
+/* --------------------------------------------------------------------------
+Form
+*/
+.article form {
+ margin: 0 0 20px;
+}
+.article form .form-required {
+ color: #dd4b39;
+}
+.article form fieldset {
+ margin: 0 0 20px;
+ padding: 0;
+}
+.article form legend {
+ display: block;
+ line-height: 1.5;
+ margin: 0;
+ padding: 0;
+}
+/*
+.article form ol, .article form ul {
+ margin: 0 0 0 1em;
+ padding: 0 0 0 1em;
+}
+[dir='rtl'] .article form ol, [dir='rtl'] .article form ul {
+ margin: 0 1em 0 0;
+ padding: 0 1em 0 0;
+}
+.article form ol ul, .article form ul ul, [dir='rtl'] .article form ol ul, [dir='rtl'] .article form
+ul ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+.article form li {
+ margin: 0 0 20px;
+}
+.article form li li {
+ margin: 0 0 5px;
+}
+*/
+.article form label {
+ display: block;
+ margin: 0 0 5px;
+ padding: 0;
+}
+.article form input[type='text'], .article form select, .article form textarea, .article form
+.checkbox-group, .article form .radio-group {
+ margin-bottom: 15px;
+}
+.checkbox-group input {
+ width: 13px;
+ height: 13px;
+ background: #fff;
+ border: solid 1px #c6c6c6;
+ float: left;
+}
+.article form .checkbox-group, .article form .radio-group {
+ display: block
+}
+.article form select {
+ border: solid 1px #ebebeb;
+ border-top-color: #ddd;
+ -webkit-appearance: none;
+ background: #f3f3f3 url(../images/arrows-up-down.png) right center no-repeat;
+ height: 30px;
+ color: #222;
+ line-height: normal;
+ padding: 5px;
+ width: 130px;
+}
+
+.article form .browse .browse-msg {
+ font-size: 11.5px;
+}
+.article form .browse .button-secondary {
+ height: auto;
+ line-height: 25px;
+ font-size: 11px;
+ padding: 0 8px;
+ margin: 0 10px 15px 0;
+}
+.article form input[type='text'], .article form textarea {
+ border: 1px solid #ebebeb;
+ border-top-color: #dcdcdc;
+ color: #222;
+ line-height: normal;
+ padding: 6px 10px;
+ width: 300px;
+}
+.article form textarea {
+ height: 150px;
+}
+.article form input[type='text']:focus, .article form textarea:focus {
+ border-color: #33B5E5;
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
+ -o-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
+ outline: 0;
+}
+.article form input[disabled], .article form textarea[disabled], .article form label.form-disabled {
+ color: #999;
+}
+.article form input[type='text'][disabled], .article form textarea[disabled] {
+ background-color: #ebebeb;
+}
+form .form-error input[type='text'], form .form-error textarea {
+ border-color: #dd4b39;
+ margin-right: 20px;
+}
+.aside {
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ margin: 10px 0;
+ padding: 20px;
+ color: #666;
+ position: relative;
+ background: #f9f9f9;
+}
+/*
+.aside, .notification, .promo {
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ margin: 10px 0;
+ padding: 10px;
+ position: relative;
+}
+.aside>:first-child, .notification>:first-child, .promo>:first-child {
+ margin-top: 0;
+}
+.aside>:last-child, .notification>:last-child, .promo>:last-child {
+ margin-bottom: 0;
+}
+.aside {
+ background: #f9f9f9;
+}
+.notification {
+ background: #fffbe4;
+ border-color: #f8f6e6;
+}
+.promo {
+ background: #f6f9ff;
+ border-color: #eff2f9;
+}
+*/
+
+/* SDK TOS styles */
+
+div.sdk-terms {
+ white-space: pre-wrap;
+ word-wrap: break-word;
+ font-family: inherit;
+ font-size: inherit;
+ padding: 10px;
+ height: 370px;
+ width: 738px;
+ border: 1px solid #444;
+ background: transparent;
+ overflow:auto;
+ margin:0 0 10px;
+}
+
+div.sdk-terms.fullsize {
+ padding: 0;
+ height: auto;
+ width: auto;
+ border:none;
+}
+
+div.sdk-terms h3,
+div.sdk-terms h2 {
+ margin:0;
+}
+
+div#sdk-terms-form {
+ padding:0 0 0 10px;
+}
+
+div#sdk-terms-form input {
+ display:inline;
+ margin:4px 4px 4px 0;
+}
+
+
+/* --------------------------------------------------------------------------
+Code Style
+*/
+pre {
+ margin:0 0 1em 0;
+ padding: 1em;
+ overflow: auto;
+ border: solid 1px #ddd;
+ background: #f7f7f7;
+}
+.str { color: #080; }
+.kwd { color: #008; }
+.com { color: #800; }
+.typ { color: #606; }
+.lit { color: #066; }
+.pun { color: #660; }
+.pln { color: #000; }
+.tag { color: #008; }
+.atn { color: #828; }
+.atv { color: #080; }
+.dec { color: #606; }
+
+/* --------------------------------------------------------------------------
+Three-Pane
+*/
+/* Package Nav & Classes Nav */
+.three-pane {
+ position: relative;
+ border-top: solid 1px #ebebeb;
+}
+#packages-nav .js-pane,
+#classes-nav .js-pane {
+ overflow:visible;
+}
+#packages-nav {
+ height:270px;
+ max-height: inherit;
+ overflow: hidden;
+ position: relative;
+}
+#classes-nav {
+ overflow: hidden;
+ position: relative;
+}
+#packages-nav ul, #classes-nav ul {
+ list-style-type: none;
+ margin: 10px 0 20px 0;
+ padding: 0;
+}
+#classes-nav li {
+ font-weight: bold;
+ margin: 5px 0;
+}
+#packages-nav li,
+#classes-nav li li {
+ margin: 0;
+}
+#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
+#classes-nav li a, #classes-nav li a:active, #classes-nav li a:visited {
+ padding: 0 0 0 4px;
+}
+#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
+#classes-nav li li a, #classes-nav li li a:active, #classes-nav li li a:visited,
+#nav-tree li a, #nav-tree li a:active, #nav-tree li a:visited {
+ color: #222;
+ font-weight: normal;
+}
+#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
+#classes-nav li li a, #classes-nav li li a:active, #classes-nav li li a:visited {
+ display: block;
+}
+#packages-nav li.selected a, #packages-nav li.selected a:active, #packages-nav li.selected
+a:visited,
+#classes-nav li li.selected a, #classes-nav li li.selected a:active, #classes-nav li li.selected
+a:visited,
+#nav-tree li div.selected {
+ font-weight: 500;
+ color: #0099cc;
+ background-color:#fff; }
+ #packages-nav li.selected ul li a,
+ #classes-nav li.selected ul li a {
+ /* don't highlight child items */
+ color: #555555; }
+#nav-tree li div.selected a {
+ font-weight: 500;
+ color: #0099cc;
+}
+#nav-swap {
+ height:30px;
+ border-top:1px solid #ccc;
+}
+#nav-swap a {
+ display:inline-block;
+ height:100%;
+ color: #222;
+ font-size: 12px;
+ padding: 5px 0 5px 5px;
+}
+
+#nav-swap .fullscreen {
+ float: right;
+ width: 24px;
+ height: 24px;
+ text-indent: -1000em;
+ padding:0;
+ margin:3px 5px 0;
+ background: url(../images/fullscreen.png) no-repeat -24px 0;
+}
+#nav-swap .fullscreen.disabled {
+ background-position: 0 0;
+}
+#nav-swap .fullscreen:hover,
+#nav-swap .fullscreen:focus {
+ cursor:pointer;
+}
+
+
+/* nav tree */
+#side-nav, #devdoc-nav, #swapper,
+#nav-tree, #tree-list {
+ overflow:hidden;
+ margin-left:0;
+}
+
+#nav-tree ul {
+ list-style:none;
+ padding:0;
+ margin:10px 0;
+}
+
+#nav-tree ul li div {
+ padding:0 0 0 4px;
+}
+
+#side-nav #nav-tree ul li a,
+#side-nav #nav-tree ul li span.no-children {
+ padding: 0;
+ margin: 0;
+}
+
+#nav-tree .plus {
+ margin: 0 3px 0 0;
+}
+
+#nav-tree ul ul {
+ list-style: none;
+ margin: 0;
+ padding: 0 0 0 0;
+}
+
+#nav-tree ul li {
+ margin: 0;
+ padding: 0 0 0 0;
+ white-space: nowrap;
+}
+
+#nav-tree .children_ul {
+ padding:0;
+ margin:0;
+}
+#nav-tree .children_ul li div {
+ padding:0 0 0 10px;
+}
+#nav-tree .children_ul .children_ul li div {
+ padding:0 0 0 20px;
+}
+
+#nav-tree a.nolink {
+ color: #222;
+ text-decoration: none;
+}
+
+#nav-tree span.label {
+ width: 100%;
+}
+
+#nav-tree {
+ overflow-x: auto;
+ overflow-y: scroll;
+ outline:0;
+}
+
+
+/* Content */
+#doc-col {
+ margin-right:0;
+}
+#doc-content-container {
+ margin-left: 291px
+}
+#doc-header, #doc-content {
+ padding: 1em 2em;
+}
+#doc-header {
+ background: #f7f7f7;
+}
+#doc-header h1 {
+ line-height: 0;
+ margin-bottom: 15px;
+}
+#api-info-block {
+ float: right;
+ font-weight: bold;
+}
+#api-info-block a, #api-info-block a:active, #api-info-block a:visited {
+ color: #222;
+}
+#api-info-block a:hover, #api-info-block a:focus {
+ color: #33B5E5;
+}
+#api-nav-header {
+ height:19px; /* plus 16px padding = 35; same as #nav li */
+ font-size:14px;
+ padding: 8px 0;
+ margin: 0;
+ border-bottom: 1px solid #CCC;
+ background:#e9e9e9;
+ background: rgba(0, 0, 0, 0.05); /* matches #nav li.expanded */
+
+}
+#api-nav-title {
+ padding:0 5px;
+ white-space:nowrap;
+}
+
+#api-level-toggle {
+ float:right;
+ padding:0 5px;
+}
+
+#api-level-toggle label {
+ margin:0;
+ vertical-align:top;
+ line-height: 19px;
+ font-size:13px;
+ height: 19px;
+}
+
+#api-level-toggle .select-wrapper {
+ width: 35px;
+ display: inline-block;
+ overflow: hidden;
+}
+#api-level-toggle select {
+ border: 0;
+ appearance:none;
+ -moz-appearance:none;
+ -webkit-appearance: none;
+ background: transparent url(../images/arrows-up-down.png) 23px 5px no-repeat;
+ color: #222;
+ height: 19px;
+ line-height: 19px;
+ padding: 0;
+ margin:1px 0 0 0;
+ width:150%;
+ font-size:13px;
+ vertical-align:top;
+ outline:0;
+}
+
+
+/* Toggle for revision notes and stuff */
+div.toggle-content.closed .toggle-content-toggleme {
+ display:none;
+}
+
+#jd-content img.toggle-content-img {
+ margin:0 5px 5px 0;
+}
+div.toggle-content p {
+ margin:10px 0 0;
+}
+div.toggle-content-toggleme {
+ padding:0 0 0 15px;
+}
+
+
+/* API LEVEL FILTERED MEMBERS */
+
+.absent,
+.absent a:link,
+.absent a:visited,
+.absent a:hover,
+.absent * {
+ color:#bbb !important;
+ cursor:default !important;
+ text-decoration:none !important;
+}
+#devdoc-nav li.absent.selected,
+#devdoc-nav li.absent.selected *,
+#devdoc-nav div.label.absent.selected,
+#devdoc-nav div.label.absent.selected * {
+ background-color:#eaeaea !important;
+}
+.absent h4.jd-details-title,
+.absent h4.jd-details-title * {
+ background-color:#f6f6f6 !important;
+}
+.absent img {
+ opacity: .3;
+ filter: alpha(opacity=30);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
+}
+
+
+
+
+
+
+
+
+
+/* JQUERY RESIZABLE STYLES */
+.ui-resizable { position: relative; }
+.ui-resizable-handle { position: absolute; display: none; font-size: 0.1px; z-index:1; }
+.ui-resizable .ui-resizable-handle { display: block; border-bottom: 1px solid #e4e4e4; }
+/*body .ui-resizable-disabled .ui-resizable-handle { display: none; }
+body .ui-resizable-autohide .ui-resizable-handle { display: none; }*/
+.ui-resizable-s { cursor: s-resize; height: 10px; width: 100% !important; bottom: -11px; left: 0;
+border-bottom: solid 1px #ededed;
+ background: #f7f7f7 url("../images/resizable-s2.png") no-repeat scroll center center; }
+/*
+.ui-resizable-e {
+cursor: e-resize; width: 10px; right: 0; top: 0; height: 100%; border-right: solid
+1px #ededed;background: #f7f7f7 url("../images/resizable-e2.png") no-repeat scroll center center; }
+*/
+
+/* --------------------------------------------------------------------------
+Lightbox
+*/
+.lightbox {
+ width: 769px;
+ padding: 1.5em;
+ margin: 0 auto;
+ border: solid 1px #dcdcdc;
+ background: #fff;
+ -moz-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
+ -webkit-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
+ box-shadow: 1px 1px 5px rgba(0,0,0,0.1)
+}
+.lightbox .header {
+ float: left;
+ width: 720px;
+ margin: -10px 20px 10px 0;
+}
+.lightbox .close {
+ float: right;
+ width: 10px;
+ height: 10px;
+ margin: -10px -10px 10px 0;
+ text-indent: -1000em;
+ background: url(../images/close.png) no-repeat 0 0;
+}
+.lightbox .close:hover, .lightbox .close:focus {
+ background-position: -10px 0;
+}
+
+/* --------------------------------------------------------------------------
+Misc
+*/
+
+
+.clearfix:before, .clearfix:after {
+ content: "";
+ display: table
+}
+.clearfix:after {
+ clear: both
+}
+.clearfix {
+ *zoom: 1
+}
+table.blank th, table.blank td {
+ border: 0;
+ background: none
+}
+.caption {
+ margin: 0.5em 0 2em 0;
+ color: #000;
+ font-size: 11.5px;
+}
+
+.nolist {
+ list-style:none;
+ margin-left:0;
+}
+#tb .nolist {
+ margin-left:15px;
+}
+
+
+pre.classic {
+ background-color:transparent;
+ border:none;
+ padding:0;
+}
+
+p.img-caption {
+ margin: -10px 0 20px;
+ font-size:13px;
+ color:#666;
+}
+
+div.figure {
+ float:right;
+ clear:right;
+ margin:10px 0 0 0;
+ padding:0 0 0 20px;
+ /* width must be defined w/ an inline style matching the image width */
+}
+
+p.table-caption {
+ margin: 0 0 4px 0;
+ font-size:13px;
+ color:#666;
+}
+
+p.code-caption {
+ margin: 0 0 4px 0;
+ font: 13px/1.5 'courier new', courier, monospace;
+ color:#666;
+}
+
+div.note,
+div.caution,
+div.warning {
+ margin: 0 0 15px;
+}
+
+p.note, div.note,
+p.caution, div.caution,
+p.warning, div.warning {
+ padding: 0 0 0 10px;
+ border-left: 4px solid;
+}
+
+p.note, div.note {
+ border-color: #258AAF;
+}
+
+p.caution, div.caution {
+ border-color: #FF8800;
+}
+
+p.warning, div.warning {
+ border-color: #ff4443;
+}
+
+div.note.design {
+ border-left: 4px solid #33B5E5;
+}
+
+div.note.develop {
+ border-left: 4px solid #F80;
+}
+
+div.note.distribute {
+ border-left: 4px solid #9C0;
+}
+
+.note p, .caution p, .warning p {
+ margin:0 0 5px;
+}
+
+.note p:last-child, .caution p:last-child, .warning p:last-child {
+ margin-bottom:0;
+}
+
+body.about blockquote {
+ display:block;
+ float:right;
+ width:280px;
+ font-size:20px;
+ font-style:italic;
+ line-height:24px;
+ color:#33B5E5;
+ margin:0 0 20px 30px;
+}
+
+div.design-announce p {
+ margin:0 0 10px;
+}
+
+#devdoc-nav a.totop {
+ display:block;
+ top:0;
+ width:inherit;
+ background: transparent url(../images/styles/gototop.png) no-repeat scroll 50% 50%;
+ text-indent:-9999em;
+}
+#devdoc-nav a.totop {
+ position:fixed;
+ display:none;
+}
+#devdoc-nav a.totop:hover {
+ background-color:#33B5E5;
+}
+
+.content-footer a.totop {
+ text-transform:uppercase;
+ line-height:30px;
+}
+
+.expandable {
+ height:34px;
+ padding-left:20px;
+ position:relative;
+}
+.expandable:before {
+ content: '';
+ background-image: url(../images/styles/disclosure_down.png);
+ background-repeat:no-repeat;
+ background-position: -12px -9px;
+ width: 20px;
+ height: 20px;
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ left: 0; }
+}
+.expandable.expanded:before {
+ background-image: url(../images/styles/disclosure_up.png);
+}
+
+
+
+/* -----------------------------------------------
+Dialog box for popup messages
+*/
+
+div.dialog {
+ height:0;
+ margin:0 auto;
+}
+
+div.dialog>div {
+ z-index:99;
+ position:fixed;
+ margin:70px 0;
+ width: 391px;
+ height: 200px;
+ background: #F7F7F7;
+-moz-box-shadow: 0 0 15px rgba(0,0,0,0.5);
+-webkit-box-shadow: 0 0 15px rgba(0,0,0,0.5);
+box-shadow: 0 0 15px rgba(0,0,0,0.5);
+}
+/* IE6 can't position fixed */
+* html div.dialog div { position:absolute; }
+
+
+div#deprecatedSticker {
+ display:none;
+ z-index:99;
+ position:fixed;
+ right:15px;
+ top:114px;
+ margin:0;
+ padding:1em;
+ background:#FFF;
+ border:1px solid #dddd00;
+ box-shadow:-5px 5px 10px #ccc;
+ -moz-box-shadow:-5px 5px 10px #ccc;
+ -webkit-box-shadow:-5px 5px 10px #ccc;
+}
+
+div#naMessage {
+ display:none;
+ width:555px;
+ height:0;
+ margin:0 auto;
+}
+
+div#naMessage div {
+ z-index:99;
+ width:450px;
+ position:fixed;
+ margin:50px 0;
+ padding:4em 4em 3em;
+ background:#FFF;
+ border:1px solid #999;
+ box-shadow:-10px 10px 40px #888;
+ -moz-box-shadow:-10px 10px 40px #888;
+ -webkit-box-shadow:-10px 10px 40px #888;
+}
+/* IE6 can't position fixed */
+* html div#naMessage div { position:absolute; }
+
+div#naMessage strong {
+ font-size:1.1em;
+}
+
+
+/* --------------------------------------------------------------------------
+Slideshow Controls & Next/Prev
+*/
+.slideshow-next, .slideshow-prev {
+ width: 20px;
+ height: 36px;
+ text-indent: -1000em;
+}
+.slideshow-container {
+ margin: 2em 0;
+}
+.slideshow-container:before, .slideshow-container:after {
+ content: "";
+ display: table;
+ clear: both;
+}
+a.slideshow-next, a.slideshow-next:visited {
+
+ float: right;
+
+ background: url(../images/arrow-right.png) no-repeat 0 0
+
+}
+
+a.slideshow-prev, a.slideshow-prev:visited {
+
+ float: left;
+
+ background: url(../images/arrow-left.png) no-repeat 0 0
+
+}
+
+.slideshow-next:hover, .slideshow-prev:hover, .slideshow-next:focus, .slideshow-prev:focus {
+
+ background-position: 0 -36px
+
+}
+
+.slideshow-next:active, .slideshow-prev:active {
+
+ background-position: 0 -72px
+
+}
+.slideshow-nav {
+ width: 74px;
+ margin: 0 auto;
+}
+.slideshow-nav a, .slideshow-nav a:visited {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ margin: 0 2px 20px 2px;
+ background: #ccc;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
+}
+.slideshow-nav a:hover, .slideshow-nav a:focus {
+
+ background: #33B5E5
+}
+
+.slideshow-nav a:active {
+
+ background: #1e799a;
+ background: #ebebeb;
+ -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+}
+.slideshow-nav a.active, .slideshow-nav a.active:active, .slideshow-nav a.active:visited {
+ background: #33B5E5
+}
+/* --------------------------------------------------------------------------
+Tabs
+*/
+ul.tabs {
+ padding: 0;
+ margin: 2em 0 0 0;
+}
+ul.tabs:before, ul.tabs:after {
+ content: "";
+ display: table;
+ clear: both;
+}
+ul.tabs li {
+ list-style-type: none;
+ float: left;
+}
+ul.tabs li a, ul.tabs li a:active, ul.tabs li a:visited {
+ display: block;
+ height: 36px;
+ line-height: 36px;
+ padding: 0 15px;
+ margin-right: 2px;
+ color: #222;
+ -moz-border-radius-topleft: 2px;
+ -moz-border-radius-topright: 2px;
+ -moz-border-radius-bottomright: px;
+ -moz-border-radius-bottomleft: px;
+ -webkit-border-radius: 2px 2px px px;
+ border-radius: 2px 2px px px;
+ border-top: solid 1px #ebebeb;
+ border-left: solid 1px #ebebeb;
+ border-right: solid 1px #ebebeb;
+ background-color: #fff;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#fafafa));
+ background-image: -webkit-linear-gradient(top, #ffffff, #fafafa);
+ background-image: -moz-linear-gradient(top, #ffffff, #fafafa);
+ background-image: -ms-linear-gradient(top, #ffffff, #fafafa);
+ background-image: -o-linear-gradient(top, #ffffff, #fafafa);
+ background-image: linear-gradient(top, #ffffff, #fafafa);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff',
+EndColorStr='#fafafa');
+}
+ul.tabs li a:hover {
+ color: #33B5E5;
+}
+ul.tabs li a.selected {
+ height: 37px;
+ color: #33B5E5;
+ background-color: #f7f7f7;
+ background-image: none;
+ border-color: #ddd;
+}
+.tab-content {
+ padding: 1.2em;
+ margin: -1px 0 2em 0;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+ border: solid 1px #ddd;
+ background: #f7f7f7;
+}
+/* --------------------------------------------------------------------------
+Feature Boxes
+*/
+.feature-box {
+ width: 291px;
+ height: 200px;
+ position: relative;
+ background: #F7F7F7;
+}
+.box-border .top, .box-border .bottom, .box-border .left, .box-border .right {
+ z-index: 100;
+ position: absolute;
+ background-color: #aaa;
+}
+.box-border .top, .box-border .bottom {
+ width: 291px;
+ height: 1px;
+}
+.dialog .box-border .top,
+.dialog .box-border .bottom { width:391px; }
+
+.box-border .left, .box-border .right {
+ width: 1px;
+ height: 8px;
+}
+.box-border .top { top: 0; left: 0 }
+.box-border .top .left { top: 1px; left: 0 }
+.box-border .top .right { top: 1px; right: 0 }
+.box-border .bottom .left { top: -8px; left: 0 }
+.box-border .bottom { top: 200px; left: 0 }
+.box-border .bottom .right { top: -8px; right: 0 }
+
+.feature-box h4,
+.dialog h4 {
+ margin: 15px 18px 10px;
+ padding:0;
+}
+
+.feature-box p,
+.dialog p {
+ margin: 10px 18px;
+ padding:0;
+}
+.feature-box .link,
+.dialog .link {
+ border-top: 1px solid #dedede;
+ bottom: 0;
+ position: absolute;
+ width: inherit;
+}
+.feature-box a, .feature-box h4,
+.dialog a, .dialog h4 {
+ -webkit-transition: color .4s ease;
+ -moz-transition: color .4s ease;
+ -o-transition: color .4s ease;
+ transition: color .4s ease;
+}
+.feature-box:hover {
+ cursor: pointer;
+}
+.feature-box:hover .box-border .top, .feature-box:hover .box-border .bottom, .feature-box:hover
+.left, .feature-box:hover .right {
+ background-color: #33B5E5;
+}
+.feature-box:hover h4, .feature-box:hover a {
+ color: #33B5E5;
+}
+/* --------------------------------------------------------------------------
+Page-Specific Styles
+*/
+.colors {
+ position: relative;
+ float: left;
+ width: 92px;
+ margin: 40px 0 20px;
+}
+.colors div {
+ color: #fff;
+ font-size: 11.5px;
+ width: 82px;
+ height: 82px;
+ margin-top:-30px;
+ line-height: 82px;
+ text-align: center;
+ border: solid 5px #fff;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* ########### REFERENCE DOCS ################## */
+
+#packages-nav h2,
+#classes-nav h2 {
+ font-size:18px;
+ margin:0;
+ padding:0 0 0 4px;
+}
+
+#jd-header {
+ padding: 0 0 5px;
+ margin: 20px 0 10px;
+ font-size:13px;
+ border-bottom:solid 1px #ccc;
+}
+
+#jd-header h1 {
+ margin:0;
+ padding:0;
+}
+
+/* page-top-right container for reference pages (holds
+links to summary tables) */
+#api-info-block {
+ font-size:13px;
+ margin:20px 0 0;
+ padding:0 10px 6px;
+ font-weight:normal;
+ float:right;
+ text-align:right;
+ color:#999;
+ max-width:70%;
+}
+
+#api-info-block div.api-level {
+ font-weight:bold;
+ font-size:inherit;
+ float:none;
+ color:#222;
+ padding:0;
+ margin:0;
+}
+
+/* inheritance table */
+.jd-inheritance-table {
+ border-spacing:0;
+ margin:0;
+ padding:0;
+ font-size:13px;
+ background-color:transparent;
+}
+.jd-inheritance-table tr td {
+ border: none;
+ margin: 0;
+ padding: 0;
+ background-color:transparent;
+}
+.jd-inheritance-table .jd-inheritance-space {
+ font-weight:bold;
+ width:1em;
+}
+.jd-inheritance-table .jd-inheritance-interface-cell {
+ padding-left: 17px;
+}
+
+
+
+.jd-sumtable a {
+ text-decoration:none;
+}
+
+.jd-sumtable a:hover {
+ text-decoration:underline;
+}
+
+/* the link inside a sumtable for "Show All/Hide All" */
+.toggle-all {
+ display:block;
+ float:right;
+ font-weight:normal;
+ font-size:0.9em;
+}
+
+/* adjustments for in/direct subclasses tables */
+.jd-sumtable.jd-sumtable-subclasses {
+ margin: 1em 0 0 0;
+ max-width:968px;
+ background-color:transparent;
+ font-size:13px;
+}
+
+/* extra space between end of method name and open-paren */
+.sympad {
+ margin-right: 2px;
+}
+
+/* right alignment for the return type in sumtable */
+.jd-sumtable .jd-typecol {
+ text-align:right;
+}
+
+/* adjustments for the expando table-in-table */
+.jd-sumtable-expando {
+ margin:.5em 0;
+ padding:0;
+}
+
+/* a div that holds a short description */
+.jd-descrdiv {
+ padding:3px 1em 0 1em;
+ margin:0;
+ border:0;
+}
+
+#jd-content img.jd-expando-trigger-img {
+ padding:0 4px 4px 0;
+ margin:0;
+}
+
+.jd-sumtable-subclasses div#subclasses-direct,
+.jd-sumtable-subclasses div#subclasses-indirect {
+ margin:0 0 0 13px;
+}
+
+
+
+/********* MEMBER REF *************/
+
+
+.jd-details {
+/* border:1px solid #669999;
+ padding:4px; */
+ margin:0 0 1em;
+}
+
+/* API reference: a container for the
+.tagdata blocks that make up the detailed
+description */
+.jd-details-descr {
+ padding:0;
+ margin:.5em .25em;
+}
+
+/* API reference: a block containing
+a detailed description, a params table,
+seealso list, etc */
+.jd-tagdata {
+ margin:.5em 1em;
+}
+
+.jd-tagdata p {
+ margin:0 0 1em 1em;
+}
+
+/* API reference: adjustments to
+the detailed description block */
+.jd-tagdescr {
+ margin:.25em 0 .75em 0;
+}
+
+.jd-tagdescr ol,
+.jd-tagdescr ul {
+ margin:0 2.5em;
+ padding:0;
+}
+
+.jd-tagdescr table,
+.jd-tagdescr img {
+ margin:.25em 1em;
+}
+
+.jd-tagdescr li {
+margin:0 0 .25em 0;
+padding:0;
+}
+
+/* API reference: heading marking
+the details section for constants,
+attrs, methods, etc. */
+h4.jd-details-title {
+ font-size:1.15em;
+ background-color: #E2E2E2;
+ margin:1.5em 0 .6em;
+ padding:3px 95px 3px 3px; /* room for api-level */
+}
+body.google h4.jd-details-title {
+ background-color: #FFF;
+ padding-top:5px;
+ border-top: 1px solid #ccc;
+}
+body.google table.jd-sumtable th {
+ background-color: #FFF;
+ color:#000;
+}
+
+h4.jd-tagtitle {
+ margin:0;
+}
+
+h4 .normal {
+ font-weight:normal;
+}
+
+/* API reference: heading for "Parameters", "See Also", etc.,
+in details sections */
+h5.jd-tagtitle {
+ margin:0 0 .25em 0;
+ font-size:1em;
+}
+
+.jd-tagtable {
+ margin:0;
+ background-color:transparent;
+ width:auto;
+}
+
+.jd-tagtable td,
+.jd-tagtable th {
+ border:none;
+ background-color:#fff;
+ vertical-align:top;
+ font-weight:normal;
+ padding:2px 10px;
+}
+
+.jd-tagtable th {
+ font-style:italic;
+}
+
+/* Inline api level indicator for methods */
+div.api-level {
+ font-size:.8em;
+ font-weight:normal;
+ color:#999;
+ float:right;
+ padding:0 8px 0;
+ margin-top:-30px;
+}
+
+table.jd-tagtable td,
+table.jd-tagtable th {
+ background-color:transparent;
+}
+
+table.jd-tagtable th {
+ color:inherit;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* SEARCH FILTER */
+
+#search_autocomplete {
+ font-weight:normal;
+}
+
+#search_filtered_wrapper {
+ width: 193px;
+ float: right;
+}
+#search_filtered_div {
+ position:absolute;
+ z-index:9999;
+ min-width:171px; /* +padding and border makes this match input width */
+ padding:5px;
+ border: solid 1px #C5C5C5;
+ background: white;
+ top: 35px;
+ -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
+ -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
+}
+
+ul#search_filtered {
+ min-width:100%;
+ margin:0;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+
+#search_filtered li{
+ line-height:1.5em;
+ margin: 0 0 2px;
+ padding: 0;
+}
+
+#search_filtered li a {
+ padding:0 5px;
+ color:#222 !important;
+}
+
+#search_filtered .jd-selected {
+ background-color: #33B5E5;
+ cursor:pointer;
+}
+#search_filtered .jd-selected,
+#search_filtered .jd-selected a {
+ color:#f7f7f7 !important;
+}
+
+.no-display {
+ display: none;
+}
+
+.jd-autocomplete {
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 1px;
+ padding-bottom: 1px;
+ font-size: 0.81em;
+ border: none;
+ margin: 0;
+ line-height: 1.05em;
+}
+
+.show-item {
+ display: table-row;
+}
+.hide-item {
+ display: hidden;
+}
+
+
+
+
+
+/* SEARCH RESULTS */
+
+
+#leftSearchControl .gsc-twiddle {
+ background-image : none;
+}
+
+#leftSearchControl td, #searchForm td {
+ border: 0px solid #000;
+ padding:0;
+}
+
+#leftSearchControl .gsc-resultsHeader .gsc-title {
+ padding-left : 0px;
+ font-weight : bold;
+ font-size : 13px;
+ color:#006699;
+ display : none;
+}
+
+#leftSearchControl .gsc-resultsHeader div.gsc-results-selector {
+ display : none;
+}
+
+#leftSearchControl .gsc-resultsRoot {
+ padding-top : 6px;
+}
+
+#leftSearchControl div.gs-visibleUrl-long {
+ display : block;
+ color:#006699;
+}
+
+#leftSearchControl .gsc-webResult {
+ padding:0 0 20px 0;
+}
+
+.gsc-webResult div.gs-visibleUrl-short,
+table.gsc-branding,
+.gsc-clear-button {
+ display : none;
+}
+
+.gsc-cursor-box .gsc-cursor div.gsc-cursor-page,
+.gsc-cursor-box .gsc-trailing-more-results a.gsc-trailing-more-results,
+#leftSearchControl a,
+#leftSearchControl a b {
+ color:#006699;
+}
+
+.gsc-resultsHeader {
+ display: none;
+}
+
+/* Disable built in search forms */
+.gsc-control form.gsc-search-box {
+ display : none;
+}
+table.gsc-search-box {
+ margin:6px 0 0 0;
+ border-collapse:collapse;
+}
+
+td.gsc-input {
+ padding:0 2px;
+ width:100%;
+ vertical-align:middle;
+}
+
+input.gsc-input {
+ border:1px solid #BCCDF0;
+ width:99%;
+ padding-left:2px;
+ font-size:.95em;
+}
+
+td.gsc-search-button {
+ text-align: right;
+ padding:0;
+ vertical-align:top;
+}
+
+
+#searchResults {
+ overflow:hidden; /* because the repositioned page links makes the section think it needs to scroll
+(it doesn't) */
+ height:auto;
+}
+
+#searchResults .gsc-control {
+ position:relative;
+ width:auto;
+ padding:0 0 10px;
+}
+
+#searchResults .gsc-tabsArea {
+ position:relative;
+ white-space:nowrap;
+ float:left;
+ width:200px;
+}
+
+#searchResults .gsc-above-wrapper-area {
+ display:none;
+}
+
+#searchResults .gsc-resultsbox-visible {
+ float:left;
+ width:720px;
+ margin-left:20px;
+}
+
+#searchResults .gsc-tabHeader {
+ padding: 3px 6px;
+ position:relative;
+ width:auto;
+ display:block;
+}
+
+#searchResults h2#searchTitle {
+ padding:0;
+ margin:5px 0;
+ border:none;
+}
+
+#searchResults h2#searchTitle em {
+ font-style:normal;
+ color:#33B5E5;
+}
+
+#searchResults .gsc-table-result {
+ margin:5px 0 10px 0;
+ background-color:transparent;
+}
+#searchResults .gs-web-image-box, .gs-promotion-image-box {
+ width:120px;
+}
+#searchResults .gs-web-image-box img.gs-image, .gs-promotion-image-box img.gs-promotion-image {
+ max-width:120px;
+}
+
+#searchResults .gsc-table-result .gsc-thumbnail {
+ padding:0 20px 0 0;
+}
+
+#searchResults td {
+ background-color:transparent;
+}
+
+#searchResults .gsc-expansionArea {
+ position:relative;
+}
+#searchResults .gsc-tabsArea .gsc-cursor-box {
+ width:200px;
+ padding:20px 0 0 1px;
+}
+#searchResults .gsc-cursor-page {
+ display:inline-block;
+ float:left;
+ margin:-1px 0 0 -1px;
+ padding:0;
+ height:27px;
+ width:27px;
+ text-align:center;
+ line-height:2;
+}
+
+#searchResults .gsc-tabHeader.gsc-tabhInactive,
+#searchResults .gsc-cursor-page {
+ text-decoration:none;
+ color:#258AAF;
+ border: solid 1px #DADADA;
+}
+
+#searchResults .gsc-tabHeader.gsc-tabhInactive:hover,
+#searchResults .gsc-cursor-page:hover {
+ border-color: #DBDBDB;
+ background-color: #F3F3F3;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#F9F9F9), to(#ECECEC));
+ background-image: -webkit-linear-gradient(top, #F9F9F9, #ECECEC);
+ background-image: -moz-linear-gradient(top, #F9F9F9, #ECECEC);
+ background-image: -ms-linear-gradient(top, #F9F9F9, #ECECEC);
+ background-image: -o-linear-gradient(top, #F9F9F9, #ECECEC);
+ background-image: linear-gradient(top, #F9F9F9, #ECECEC);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
+EndColorStr='#ececec');
+ color: #33B5E5;
+}
+
+#searchResults .gsc-tabHeader.gsc-tabhActive,
+#searchResults .gsc-tabHeader.gsc-tabhActive:hover,
+#searchResults .gsc-cursor-page.gsc-cursor-current-page,
+#searchResults .gsc-cursor-page.gsc-cursor-current-page:hover {
+ color:#fff;
+ background-color: #09C;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#2FADDB), to(#09C));
+ background-image: -webkit-linear-gradient(top, #2FADDB, #09C);
+ background-image: -moz-linear-gradient(top, #2FADDB, #09C);
+ background-image: -ms-linear-gradient(top, #2FADDB, #09C);
+ background-image: -o-linear-gradient(top, #2FADDB, #09C);
+ background-image: linear-gradient(top, #2FADDB, #09C);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#09c');
+ border: 1px solid #3990AB;
+ z-index:100;
+}
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*********** PREVIOUSLY dac-styles.css ***************/
+
+
+
+
+
+::-webkit-selection,
+::-moz-selection,
+::selection {
+ background-color: #0099cc;
+ color: #fff; }
+
+#header {
+ border-bottom:0;
+}
+
+#header .wrap {
+ max-width:940px;
+ height:41px;
+ border-bottom:1px solid;
+ border-color: #ccc;
+ position:relative;
+}
+
+.about #header .wrap {
+ border-color: #9933CC;
+}
+
+.design #header .wrap {
+ border-color: #33b5e5;
+}
+
+.develop #header .wrap {
+ border-color: #F80;
+}
+
+.distribute #header .wrap {
+ border-color: #9C0;
+}
+
+.logo a {
+ width:123px;
+ float:left;
+}
+
+#header .logo {
+ margin-top: -6px;
+ margin-left: 0px;
+ margin-bottom:0px;
+ width: 160px;
+ padding-right:10px;
+}
+
+.search {
+ height:25px;
+ margin-top: -3px;
+ margin-bottom: 0px;
+}
+
+
+
+/* Quicknav */
+.btn-quicknav {
+ width:20px;
+ height:28px;
+ float:left;
+ margin-left:6px;
+ padding-right:10px;
+ position:relative;
+ cursor:pointer;
+ border-right:1px solid #CCC;
+}
+
+.btn-quicknav a {
+ zoom:1;
+ position:absolute;
+ top:13px;
+ left:5px;
+ display:block;
+ text-indent:-9999em;
+ width:10px;
+ height:5px;
+ background:url(../images/quicknav_arrow.png) no-repeat;
+}
+
+.btn-quicknav a.arrow-active {
+ background-position: 0 -5px;
+ display:none;
+}
+
+#header-wrap.quicknav a.arrow-inactive {
+ display:none;
+}
+
+.btn-quicknav.active a.arrow-active {
+ display:block;
+}
+
+.nav-x li {
+ display:block;
+ float:left;
+ margin-right:45px;
+ -webkit-transition: all 0.25s linear;
+ -moz-transition: all 0.25s linear;
+ -ms-transition: all 0.25s linear;
+ -o-transition: all 0.25s linear;
+ transition: all 0.25s linear;
+}
+
+#header-wrap.quicknav .nav-x li {
+ min-width:160px;
+ margin-right:20px;
+}
+
+#header-wrap.quicknav li.last {
+ margin-right:0px;
+}
+
+#quicknav {
+ float:none;
+ clear:both;
+ margin-left:180px;
+ margin-top:-30px;
+ display:none;
+ overflow:hidden;
+}
+
+#header-wrap.quicknav #quicknav {
+
+}
+
+#quicknav ul {
+ margin:10px 0;
+ padding:0;
+}
+
+#quicknav ul li.design {
+ border-top:1px solid #33b5e5;
+}
+
+#quicknav ul li.develop {
+ border-top:1px solid #FF8800;
+}
+
+#quicknav ul li.distribute {
+ border-top:1px solid #99cc00;
+}
+
+#quicknav ul li {
+ display:block;
+ float:left;
+ margin:0 20px 0 0;
+ min-width:140px;
+}
+
+#quicknav ul li.last {
+ margin-right:0px;
+}
+
+#quicknav ul li ul li {
+ float:none;
+}
+
+#quicknav ul li ul li a {
+ color:#222;
+}
+
+#quicknav ul li li ul,
+#quicknav ul li li ul li {
+ margin:0;
+}
+
+#quicknav ul li li ul li:before {
+ content:"\21B3";
+}
+
+#header-wrap {
+ -webkit-transition: all 0.25s ease-out;
+ -moz-transition: all 0.25s ease-out;
+ -ms-transition: all 0.25s ease-out;
+ -o-transition: all 0.25s ease-out;
+ transition: all 0.25s ease-out;
+
+}
+
+#header-wrap.quicknav {
+ height:196px;
+
+}
+
+/* SEARCH AND MORE */
+.search {
+ position: absolute;
+ width: 50px;
+ height:28px;
+ display: block;
+ margin-top:-3px;
+ margin-bottom:7px;
+ overflow:hidden;
+ z-index:100;
+ right:54px;
+ -webkit-transition: width 0.4s ease;
+ -moz-transition: width 0.4s ease;
+ -o-transition: width 0.4s ease;
+ transition: width 0.4s ease;
+}
+
+.search #search-btn {
+ width:50px;
+ height:28px;
+ background:url(../images/icon_search.png) no-repeat;
+ float:left;
+}
+
+.search-inner {
+ width:245px;
+}
+
+.search:hover, .search.active {
+ width:245px;
+}
+
+.search .bottom, .search .left, .search .right {
+ position: absolute;
+ background-color: #a2a2a2
+}
+
+.search .bottom {
+ width: 214px;
+ height: 1px;
+ top: 24px;
+ left: 0
+}
+
+.search .left, .search .right {
+ height: 5px;
+ width: 1px
+}
+
+.search .left {
+ top: 22px;
+ left: 56px;
+ background-color:#CCC;
+}
+
+.search .right {
+ top: 22px;
+ left: 238px;
+ background-color:#CCC;
+}
+
+.search form {
+ margin-top: 2px;
+ width: 162px;
+ float:left;
+}
+
+.search form input {
+ color: #2f2f2f;
+ font-size: 0.95em;
+ width: 178px;
+ border: none;
+ margin-left: 6px;
+ z-index: 1500;
+ position: relative;
+ background-color: transparent;
+ border-bottom:1px solid #CCC;
+ padding:0 0 0 4px;
+ outline:none;
+ height:24px;
+}
+
+.search:hover form input {
+ border-bottom:1px solid #33B5E5;
+}
+
+.search:hover .bottom, .search:hover .left, .search:hover .right {
+ background-color: #33b5e5;
+}
+
+.search:hover #search-btn {
+ background-position: 0 -28px
+}
+
+.search form input:focus {
+ color: #222;
+ font-weight: bold
+}
+
+.moremenu {
+ float: right;
+ position: relative;
+ width: 50px;
+ height:28px;
+ display: block;
+ margin-top:-3px;
+ margin-bottom:7px;
+ overflow:hidden;
+ -webkit-transition: width 0.25s ease;
+ -moz-transition: width 0.25s ease;
+ -o-transition: width 0.25s ease;
+ transition: width 0.25s ease;
+}
+
+.moremenu #more-btn {
+ width:40px;
+ height:28px;
+ background:url(../images/icon_more.png) no-repeat;
+ border-left:1px solid #CCC;
+ float:left;
+ cursor:pointer;
+}
+
+.moremenu:hover #more-btn {
+ background-position:0 -28px;
+}
+
+.morehover {
+ position:absolute;
+ right:6px;
+ top:-9px;
+ width:40px;
+ height:35px;
+ z-index:99;
+ overflow:hidden;
+
+ -webkit-opacity:0;
+ -moz-opacity:0;
+ -o-opacity:0;
+ opacity:0;
+
+ -webkit-transform-origin:100% 0%;
+ -moz-transform-origin:100% 0%;
+ -o-transform-origin:100% 0%;
+ transform-origin:100% 0%;
+
+ -webkit-transition-property: -webkit-opacity;
+ -webkit-transition-duration: .25s;
+ -webkit-transition-timing-function:ease;
+
+ -moz-transition-property: -webkit-opacity;
+ -moz-transition-duration: .25s;
+ -moz-transition-timing-function:ease;
+
+ -o-transition-property: -webkit-opacity;
+ -o-transition-duration: .25s;
+ -o-transition-timing-function:ease;
+
+ -transition-property: -webkit-opacity;
+ -transition-duration: .25s;
+ -transition-timing-function:ease;
+}
+
+.morehover:hover,
+.morehover.hover {
+ opacity:1;
+ height:385px;
+ width:268px;
+ -webkit-transition-property:height, -webkit-opacity;
+}
+
+.morehover .top {
+ width:268px;
+ height:39px;
+ background:url(../images/more_top.png) no-repeat;
+}
+
+.morehover .mid {
+ width:228px;
+ background:url(../images/more_mid.png) repeat-y;
+ padding:10px 20px 0 20px;
+}
+
+.morehover .mid .header {
+ border-bottom:1px solid #ccc;
+ font-weight:bold;
+}
+
+.morehover .bottom {
+ width:268px;
+ height:6px;
+ background:url(../images/more_bottom.png) no-repeat;
+}
+
+.morehover ul {
+ margin:10px 10px 20px 0;
+}
+
+.morehover ul li {
+ list-style:none;
+}
+
+.morehover ul li.active a,
+.morehover ul li.active a:hover {
+ color:#222 !important;
+}
+
+.morehover ul li.active img {
+ margin-right:4px;
+}
+
+
+
+
+/* MARQUEE */
+.slideshow-container {
+ width:100%;
+ overflow:hidden;
+ position:relative;
+}
+.slideshow-container .slideshow-prev {
+ position:absolute;
+ top:50%;
+ left:0px;
+ margin-top:-36px;
+ z-index:99;
+}
+.slideshow-container .slideshow-next {
+ position:absolute;
+ top:50%;
+ margin-top:-36px;
+ z-index:99;
+ right:0px;
+}
+
+.slideshow-container .pagination {
+ position:absolute;
+ bottom:20px;
+ width:100%;
+ text-align:center;
+ z-index:99;
+}
+.slideshow-container .pagination ul {
+ margin:0;
+}
+.slideshow-container .pagination ul li{
+ display: inline-block;
+ width:12px;
+ height:12px;
+ text-indent:-8000px;
+ list-style:none;
+ margin: 0 2px;
+ border-radius:6px;
+ background-color:#ccc;
+ cursor:pointer;
+ -webkit-transition:color .5s ease-in;
+ -moz-transition:color .5s ease-in;
+ -o-transition:color .5s ease-in;
+ transition:color .5s ease-in;
+}
+.slideshow-container .pagination ul li:hover {
+ background-color:#999;
+}
+.slideshow-container .pagination ul li.active {
+ background-color:#33b5e5;
+}
+.slideshow-container .pagination ul li.active:hover {
+ background-color:#33b5e5;
+}
+.slideshow-container ul li {
+ display:inline;
+ list-style:none;
+}
+
+
+
+
+a.download-sdk {
+ float:right;
+ margin:-10px 0;
+ height:30px;
+ padding-top:4px;
+ padding-bottom:0px;
+}
+
+#nav-x {
+ padding-top: 14px;
+}
+
+#nav-x .wrap {
+ min-height:34px;
+}
+
+#nav-x .wrap,
+#searchResults.wrap {
+ max-width:940px;
+ border-bottom:1px solid #CCC;
+}
+
+#searchResults.wrap #leftSearchControl {
+ min-height:700px
+}
+.nav-x {
+ margin-left:0;
+ margin-bottom:0;
+}
+
+
+
+
+
+
+
+
+
+
+/*
+ * CSS Styles that are needed by jScrollPane for it to operate correctly.
+ */
+
+.jspContainer {
+ overflow: hidden;
+ position: relative;
+}
+
+.jspPane {
+ position: absolute;
+ overflow: hidden;
+ width:auto !important; /* to avoid cut-off api names in reference in horiz scroll */
+}
+
+.jspVerticalBar {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 4px;
+ height: 100%;
+ background: #f5f5f5;
+}
+
+.jspHorizontalBar {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 4px;
+ background: #f5f5f5;
+}
+
+.jspVerticalBar *,
+.jspHorizontalBar * {
+ margin: 0;
+ padding: 0;
+}
+.jspCap {
+ display: block;
+}
+
+.jspVerticalBar .jspCap {
+ height: 4px;
+}
+
+.jspHorizontalBar .jspCap {
+ width: 0;
+ height: 100%;
+}
+
+.jspHorizontalBar .jspCap {
+ float: left;
+}
+
+.jspTrack {
+ position: relative;
+}
+
+.jspDrag {
+ background: #bbb;
+ position: relative;
+ top: 0;
+ left: 0;
+ cursor: pointer;
+}
+
+.jspDrag:hover,
+.jspDrag:active {
+ border-color: #09c;
+ background-color: #4cadcb;
+ background-image: -webkit-gradient(linear, left top, right top, from(#5dbcd9), to(#4cadcb));
+ background-image: -webkit-linear-gradient(left, #5dbcd9, #4cadcb);
+ background-image: -moz-linear-gradient(left, #5dbcd9, #4cadcb);
+ background-image: -ms-linear-gradient(left, #5dbcd9, #4cadcb);
+ background-image: -o-linear-gradient(left, #5dbcd9, #4cadcb);
+ background-image: linear-gradient(left, #5dbcd9, #4cadcb);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9', EndColorStr='#4cadcb');
+}
+
+.jspHorizontalBar .jspTrack,
+.jspHorizontalBar .jspDrag {
+ float: left;
+ height: 100%;
+}
+
+.jspArrow {
+ background: #999;
+ text-indent: -20000px;
+ display: block;
+ cursor: pointer;
+}
+
+.jspArrow.jspDisabled {
+ cursor: default;
+ background: #ccc;
+}
+
+.jspVerticalBar .jspArrow {
+ height: 16px;
+}
+
+.jspHorizontalBar .jspArrow {
+ width: 16px;
+ float: left;
+ height: 100%;
+}
+
+.jspVerticalBar .jspArrow:focus {
+ outline: none;
+}
+
+.jspCorner {
+ float: left;
+ height: 100%;
+}
+
+/* Yuk! CSS Hack for IE6 3 pixel bug :( */
+* html .jspCorner {
+ margin: 0 -3px 0 0;
+}
+/******* end of jscrollpane *********/
+
+
+
+
+
+/************ DEVELOP HOMEPAGE ******************/
+
+/* Slideshow */
+.slideshow-develop {
+ height: 300px;
+ width: 940px;
+ position: relative;
+ overflow:hidden;
+}
+.slideshow-develop .frame {
+ width: 940px;
+ height: 300px;
+}
+.slideshow-develop img.play {
+ max-width:350px;
+ max-height:240px;
+ margin:20px 0 0 90px;
+ -webkit-transform: perspective(800px ) rotateY( 35deg );
+ box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
+ -webkit-box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
+}
+.slideshow-develop img.play.no-shadow {
+ box-shadow: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+}
+.slideshow-develop img.play.no-transform {
+ -webkit-transform: none;
+}
+.slideshow-develop a.slideshow-next {
+ background: url(../images/arrow-right-develop.png);
+}
+.slideshow-develop a.slideshow-prev {
+ background: url(../images/arrow-left-develop.png);
+}
+.slideshow-develop .content-right {
+ float: left;
+}
+.slideshow-develop .content-right h2 {
+ padding:0;
+ margin-bottom:10px;
+ border:none;
+}
+.slideshow-develop .item {
+ height: 300px;
+ width: 940px;
+}
+.slideshow-develop .pagination ul li.active {
+ background-color: #F80;
+}
+.slideshow-develop .pagination ul li.active:hover {
+ background-color: #F80;
+}
+.slideshow-develop .item hr {
+ margin:5px 0 10px;
+}
+.slideshow-develop .item p {
+ margin:10px 0;
+}
+.slideshow-develop .item p.title-intro {
+ position:absolute;
+ margin:0;
+}
+
+/* Feeds */
+.feed ul {
+ margin: 0;
+}
+.feed .feed-nav {
+ height: 25px;
+ border-bottom: 1px solid #CCC;
+}
+.feed .feed-nav li {
+ list-style: none;
+ float: left;
+ height: 21px; /* +4px bottom border = 25px; same as .feed-nav */
+ margin-right: 25px;
+ cursor: pointer;
+}
+.feed .feed-nav li.active {
+ color: #000;
+ border-bottom: 4px solid #F80;
+}
+.feed .feed-container {
+ overflow: hidden;
+ width: 460px;
+}
+.feed .feed-container .feed-frame {
+ width: 1000px;
+}
+.feed .feed-container .feed-frame ul {
+ float: left;
+ width:460px;
+}
+.feed .feed-container .feed-frame ul ul {
+ float: none;
+ margin:10px 0 0 30px;
+}
+.feed .feed-container .feed-frame li {
+ list-style: none;
+ margin: 20px 0 20px 0;
+ width: 460px;
+ height:93px;
+}
+.feed .feed-container .feed-frame li.playlist {
+ height:auto;
+}
+.feed .feed-container .feed-frame li.playlist a {
+ height:93px;
+ display:block;
+}
+.feed .feed-container .feed-frame li.more {
+ height:20px;
+ margin:10px 0 5px 5px;
+}
+.feed .feed-container .feed-frame li.more a {
+ height:inherit;
+}
+.feed .feed-container .feed-frame li.playlist-video {
+ list-style: none;
+ margin: 0;
+ width: 460px;
+ height:55px;
+ font-size:12px;
+}
+.feed .feed-container .feed-frame li.playlist-video a {
+ height:45px;
+ padding:5px;
+}
+.feed .feed-container .feed-frame li.playlist-video h5 {
+ font-size:12px;
+ line-height:13px;
+ margin:0;
+}
+.feed .feed-container .feed-frame li.playlist-video p {
+ margin:5px 0 0;
+ line-height:15px;
+}
+.feed-container .feed-frame div.feed-image {
+ float: left;
+ border: 1px solid #999;
+ margin:0 20px 0 0;
+ width:122px;
+ height:92px;
+ background:url('../images/blog-default.png') no-repeat 0 0;
+ background-size:180px;
+}
+#jd-content .feed .feed-container .feed-frame li img {
+ float: left;
+ border: 1px solid #999;
+ margin:0 20px 0 0;
+ width:122px;
+ height:92px;
+}
+#jd-content .feed .feed-container .feed-frame li.playlist-video img {
+ width:inherit;
+ height:inherit;
+}
+
+.feed .feed-container .feed-frame li a,
+.feed .feed-container .feed-frame li a:active {
+ color:#555 !important;
+}
+
+.feed .feed-container .feed-frame li a:hover,
+.feed .feed-container .feed-frame li a:hover * {
+ color:#7AA1B0 !important;
+}
+
+/* Video player */
+#player-wrapper {
+ display:none;
+ margin: -1px auto 0;
+ position: relative;
+ width: 940px;
+ height: 0px;
+}
+#player-frame {
+ background: #EFEFEF;
+ border: 1px solid #CCC;
+ padding: 0px 207px;
+ z-index: 10; /* stay above marque, but below search suggestions */
+ width: 525px;
+ height: 330px;
+ position: relative;
+}
+
+
+
+/************ DISTRIBUTE HOMEPAGE ***************/
+
+.marquee {
+ width: 760px;
+}
+.marquee .main-img {
+ float: left;
+ margin-top: 20px;
+ width: 490px;
+}
+.marquee .copy {
+ width: 270px;
+ float: left;
+ margin-top: 30px;
+}
+.distribute-features {
+ margin: 0;
+}
+.distribute-features ul {
+ margin: 0;
+}
+.distribute-features ul li {
+ list-style: none;
+ float: left;
+ border-top: 1px solid #9C0;
+ width: 220px;
+ margin-right: 50px;
+}
+.distribute-features ul li.last {
+ margin-right: 0px;
+}
+
+
+
+/************ DEVELOP TOPIC CONTAINERS ************/
+
+.landing-banner,
+.landing-docs {
+ margin:20px 0 0;
+}
+.landing-banner div:first-child,
+.landing-docs div:first-child,
+.landing-docs .col-12 {
+ margin-left:0;
+ min-height:280px;
+}
+.landing-banner div:last-child,
+.landing-docs div:last-child,
+.landing-docs .col-12 {
+ margin-right:0;
+}
+
+.landing-banner h1 {
+ margin-top:0;
+}
+.landing-docs {
+ clear:left;
+ overflow:hidden;
+}
+.landing-docs h3 {
+ font-size:14px;
+ line-height:21px;
+ color:#555;
+ text-transform:uppercase;
+ border-bottom:1px solid #CCC;
+ margin:0 0 20px;
+}
+.landing-docs a {
+ color:#333 !important;
+}
+
+.landing-docs a:hover,
+.landing-docs a:hover * {
+ color:#7AA1B0 !important
+}
+
+.landing-docs .normal-links a {
+ color:#258aaf !important;
+}
+
+.plusone {
+ float:right;
+}
+
+
+
+/************* HOME/LANDING PAGE *****************/
+
+.slideshow-home {
+ height: 500px;
+ width: 940px;
+ border-bottom: 1px solid #CCC;
+ position: relative;
+ margin: 0;
+}
+.slideshow-home .frame {
+ width: 940px;
+ height: 500px;
+}
+.slideshow-home .content-left {
+ float: left;
+ text-align: center;
+ vertical-align: center;
+ margin: 0 0 0 35px;
+}
+.slideshow-home .content-right {
+ margin: 80px 0 0 0;
+}
+.slideshow-home .content-right p {
+ margin-bottom: 10px;
+}
+.slideshow-home .content-right p:last-child {
+ margin-top: 15px;
+}
+.slideshow-home .content-right h1 {
+ padding:0;
+}
+.slideshow-home .item {
+ height: 500px;
+ width: 940px;
+}
+.home-sections {
+ padding: 30px 20px 20px;
+ margin: 20px 0;
+ background: -webkit-linear-gradient(top, #F6F6F6,#F9F9F9);
+}
+.home-sections ul {
+ margin: 0;
+}
+.home-sections ul li {
+ float: left;
+ display: block;
+ list-style: none;
+ width: 170px;
+ height: 35px;
+ border: 1px solid #ccc;
+ background: white;
+ margin-right: 10px;
+ border-radius: 1px;
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ box-shadow: 1px 1px 5px #EEE;
+ -webkit-box-shadow: 1px 1px 5px #EEE;
+ -moz-box-shadow: 1px 1px 5px #EEE;
+ background: white;
+}
+.home-sections ul li:hover {
+ background: #F9F9F9;
+ border: 1px solid #CCC;
+}
+.home-sections ul li a,
+.home-sections ul li a:hover {
+ font-weight: bold;
+ margin-top: 8px;
+ line-height: 18px;
+ float: left;
+ width: 100%;
+ text-align: center;
+ color: #09c !important;
+}
+.home-sections ul li a {
+ font-weight: bold;
+ margin-top: 8px;
+ line-height: 18px;
+ float: left;
+ width:100%;
+ text-align:center;
+}
+.home-sections ul li img {
+ float: left;
+ margin: -8px 0 0 10px;
+}
+.home-sections ul li.last {
+ margin-right: 0px;
+}
+.fullpage #footer {
+ margin-top: -40px;
+}
diff --git a/tools/droiddoc/templates-ds/assets/css/fullscreen.css b/tools/droiddoc/templates-ds/assets/css/fullscreen.css
new file mode 100644
index 0000000..71cf65b
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/css/fullscreen.css
@@ -0,0 +1,200 @@
+
+/* =============================================================================
+ Columns
+ ========================================================================== */
+/* Applied to body to debug layout alignments
+.grid {
+ width:100%;
+ height:100%;
+ background:url(../images/grid.png) center repeat-y;
+ top:0px;
+ margin:auto;
+ position:absolute;
+}
+*/
+
+@media screen, projection, print {
+.full {
+ padding: 2.5em 0;
+ border-top: solid 1px #ddd;
+ border-bottom: solid 1px #ddd;
+ background: #f7f7f7;
+}
+.wrap {
+ margin: 0 auto;
+ width: 100%;
+ min-width:600px;
+ clear: both;
+}
+.cols {
+ height: 1%;
+ margin: 0 -1.533742331288343558282%;
+ width: 103.06748466257669%}
+*+html .cols {
+ margin-bottom: 20px;
+}
+.cols:after {
+ clear: both;
+ content: ' ';
+ display: block;
+ height: 0;
+ visibility: hidden;
+}
+.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
+.col-13, .col-14, .col-15, .col-16 {
+ float: left;
+ margin: 0 1.063829787234% 20px 1.063829787234%;
+}
+* html .col-1, * html .col-2, * html .col-3, * html .col-4, * html .col-5, * html .col-6, * html
+.col-7, * html .col-8, * html .col-9, * html .col-10, * html .col-11, * html .col-12, * html
+.col-13, * html .col-14, * html .col-15, * html .col-16 {
+ margin: 0;
+ margin: 0 1.063829787234% 20px 1.063829787234%;
+}
+[dir='rtl'] .col-1, [dir='rtl'] .col-2, [dir='rtl'] .col-3, [dir='rtl'] .col-4, [dir='rtl'] .col-5,
+[dir='rtl'] .col-6, [dir='rtl'] .col-7, [dir='rtl'] .col-8, [dir='rtl'] .col-9, [dir='rtl'] .col-10,
+[dir='rtl'] .col-11, [dir='rtl'] .col-12 {
+ float: right;
+}
+.col-1 {
+ width: 4.16666666666667%;
+}
+.col-2 {
+ width: 10.4166666666667%;
+}
+.col-3 {
+ width: 16.6666666666667%;
+}
+.col-4 {
+ width: 22.9166666666667%;
+}
+.col-5 {
+ width: 29.1666666666667%;
+}
+.col-6 {
+ width: 35.4166666666667%;
+}
+.col-7 {
+ width: 41.6666666666667%;
+}
+.col-8 {
+ width: 47.9166666666667%;
+}
+.col-9 {
+ width: 55.3333333333333%;
+}
+.col-10 {
+ width: 60.4166666666667%;
+}
+.col-11 {
+ width: 66.6666666666667%;
+}
+.col-12 {
+ width: 72.9166666666667%;
+}
+.col-13 {
+ width: 79.1666666666667%;
+}
+.col-14 {
+ width: 85.4166666666667%;
+}
+.col-15 {
+ width: 91.6666666666667%;
+}
+.col-16 {
+ width: 97.9166666666667%;
+}
+
+
+
+
+
+
+
+#header .col-1,
+#nav-x .col-1 { width: 40px }
+#header .col-2,
+#nav-x .col-2 { width: 100px }
+#header .col-3,
+#nav-x .col-3 { width: 160px }
+#header .col-4,
+#nav-x .col-4 { width: 220px }
+#header .col-5,
+#nav-x .col-5 { width: 280px }
+#header .col-6,
+#nav-x .col-6 { width: 340px }
+#header .col-7,
+#nav-x .col-7 { width: 400px }
+#header .col-8,
+#nav-x .col-8 { width: 460px }
+#header .col-9,
+#nav-x .col-9 { width: 520px }
+#header .col-10,
+#nav-x .col-10 { width: 580px }
+#header .col-11,
+#nav-x .col-11 { width: 640px }
+#header .col-12,
+#nav-x .col-12 { width: 700px }
+#header .col-13,
+#nav-x .col-13 { width: 760px }
+#header .col-14,
+#nav-x .col-14 { width: 820px }
+#header .col-15,
+#nav-x .col-15 { width: 880px }
+#header .col-16,
+#nav-x .col-16 { width: 940px }
+
+
+
+body {
+ padding:0 20px;
+}
+#header,
+#searchResults,
+#nav-x {
+ margin:0;
+}
+#body-content {
+ margin:0;
+}
+#body-content > .col-12 {
+ width:77.9804965%;
+ margin:0 0 0 0.97%; /* this percentage chosen to make IE9 happy */
+}
+#side-nav {
+ width: 19.9804965%;
+ margin:0 1.063829787234% 0 0;
+}
+
+#header .wrap {
+ max-width: 100%;
+}
+
+#nav-x .wrap,
+#searchResults.wrap {
+ max-width:100%;
+}
+
+.nav-x {
+ margin:-2px 0 0 0;
+}
+
+#devdoc-nav.fixed,
+#devdoc-nav.fixed a.totop {
+ left:20px; /* !important ... for IE i think */
+}
+
+
+
+
+}
+
+.col-right {
+ margin-right:0px;
+}
+
+@media screen and (max-width:772px) {
+.col-5, .col-6, .col-7 {
+ clear: both;
+ width: 97.0238096%}
+} \ No newline at end of file
diff --git a/tools/droiddoc/templates-ds/assets/design/default.js b/tools/droiddoc/templates-ds/assets/design/default.js
new file mode 100644
index 0000000..3ba8486
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/design/default.js
@@ -0,0 +1,188 @@
+$(document).ready(function() {
+ // prep nav expandos
+ var pagePath = document.location.pathname;
+ if (pagePath.indexOf(SITE_ROOT) == 0) {
+ pagePath = pagePath.substr(SITE_ROOT.length);
+ if (pagePath == '' || pagePath.charAt(pagePath.length - 1) == '/') {
+ pagePath += 'index.html';
+ }
+ }
+
+ if (SITE_ROOT.match(/\.\.\//) || SITE_ROOT == '') {
+ // If running locally, SITE_ROOT will be a relative path, so account for that by
+ // finding the relative URL to this page. This will allow us to find links on the page
+ // leading back to this page.
+ var pathParts = pagePath.split('/');
+ var relativePagePathParts = [];
+ var upDirs = (SITE_ROOT.match(/(\.\.\/)+/) || [''])[0].length / 3;
+ for (var i = 0; i < upDirs; i++) {
+ relativePagePathParts.push('..');
+ }
+ for (var i = 0; i < upDirs; i++) {
+ relativePagePathParts.push(pathParts[pathParts.length - (upDirs - i) - 1]);
+ }
+ relativePagePathParts.push(pathParts[pathParts.length - 1]);
+ pagePath = relativePagePathParts.join('/');
+ } else {
+ // Otherwise the page path should be an absolute URL.
+ pagePath = SITE_ROOT + pagePath;
+ }
+
+ // select current page in sidenav and set up prev/next links if they exist
+ var $selNavLink = $('.nav-y').find('a[href="' + pagePath + '"]');
+ if ($selNavLink.length) {
+ $selListItem = $selNavLink.closest('li');
+
+ $selListItem.addClass('selected');
+ $selListItem.closest('li>ul').addClass('expanded');
+
+ // set up prev links
+ var $prevLink = [];
+ var $prevListItem = $selListItem.prev('li');
+ if ($prevListItem.length) {
+ if ($prevListItem.hasClass('nav-section')) {
+ // jump to last topic of previous section
+ $prevLink = $prevListItem.find('a:last');
+ } else {
+ // jump to previous topic in this section
+ $prevLink = $prevListItem.find('a:eq(0)');
+ }
+ } else {
+ // jump to this section's index page (if it exists)
+ $prevLink = $selListItem.parents('li').find('a');
+ }
+
+ if ($prevLink.length) {
+ var prevHref = $prevLink.attr('href');
+ if (prevHref == SITE_ROOT + 'index.html') {
+ // Don't show Previous when it leads to the homepage
+ $('.prev-page-link').hide();
+ } else {
+ $('.prev-page-link').attr('href', prevHref).show();
+ }
+ } else {
+ $('.prev-page-link').hide();
+ }
+
+ // set up next links
+ var $nextLink = [];
+ if ($selListItem.hasClass('nav-section')) {
+ // we're on an index page, jump to the first topic
+ $nextLink = $selListItem.find('ul').find('a:eq(0)')
+ } else {
+ // jump to the next topic in this section (if it exists)
+ $nextLink = $selListItem.next('li').find('a:eq(0)');
+ if (!$nextLink.length) {
+ // no more topics in this section, jump to the first topic in the next section
+ $nextLink = $selListItem.parents('li').next('li.nav-section').find('a:eq(0)');
+ }
+ }
+ if ($nextLink.length) {
+ $('.next-page-link').attr('href', $nextLink.attr('href')).show();
+ } else {
+ $('.next-page-link').hide();
+ }
+ }
+
+ // Set up expand/collapse behavior
+ $('.nav-y li').has('ul').click(function() {
+ if ($(this).hasClass('expanded')) {
+ return;
+ }
+
+ // hide other
+ var $old = $('.nav-y li.expanded');
+ if ($old.length) {
+ var $oldUl = $old.children('ul');
+ $oldUl.css('height', $oldUl.height() + 'px');
+ window.setTimeout(function() {
+ $oldUl
+ .addClass('animate-height')
+ .css('height', '');
+ }, 0);
+ $old.removeClass('expanded');
+ }
+
+ // show me
+ $(this).addClass('expanded');
+ var $ul = $(this).children('ul');
+ var expandedHeight = $ul.height();
+ $ul
+ .removeClass('animate-height')
+ .css('height', 0);
+ window.setTimeout(function() {
+ $ul
+ .addClass('animate-height')
+ .css('height', expandedHeight + 'px');
+ }, 0);
+ });
+
+ // Stop expand/collapse behavior when clicking on nav section links (since we're navigating away
+ // from the page)
+ $('.nav-y li').has('ul').find('a:eq(0)').click(function(evt) {
+ window.location.href = $(this).attr('href');
+ return false;
+ });
+
+ // Set up play-on-hover <video> tags.
+ $('video.play-on-hover').bind('click', function(){
+ $(this).get(0).load(); // in case the video isn't seekable
+ $(this).get(0).play();
+ });
+
+ // Set up tooltips
+ var TOOLTIP_MARGIN = 10;
+ $('acronym').each(function() {
+ var $target = $(this);
+ var $tooltip = $('<div>')
+ .addClass('tooltip-box')
+ .text($target.attr('title'))
+ .hide()
+ .appendTo('body');
+ $target.removeAttr('title');
+
+ $target.hover(function() {
+ // in
+ var targetRect = $target.offset();
+ targetRect.width = $target.width();
+ targetRect.height = $target.height();
+
+ $tooltip.css({
+ left: targetRect.left,
+ top: targetRect.top + targetRect.height + TOOLTIP_MARGIN
+ });
+ $tooltip.addClass('below');
+ $tooltip.show();
+ }, function() {
+ // out
+ $tooltip.hide();
+ });
+ });
+
+ // Set up <h2> deeplinks
+ $('h2').click(function() {
+ var id = $(this).attr('id');
+ if (id) {
+ document.location.hash = id;
+ }
+ });
+
+ // Set up fixed navbar
+ var navBarIsFixed = false;
+ $(window).scroll(function() {
+ var scrollTop = $(window).scrollTop();
+ var navBarShouldBeFixed = (scrollTop > (100 - 40));
+ if (navBarIsFixed != navBarShouldBeFixed) {
+ if (navBarShouldBeFixed) {
+ $('#nav')
+ .addClass('fixed')
+ .prependTo('#page-container');
+ } else {
+ $('#nav')
+ .removeClass('fixed')
+ .prependTo('#nav-container');
+ }
+ navBarIsFixed = navBarShouldBeFixed;
+ }
+ });
+}); \ No newline at end of file
diff --git a/tools/droiddoc/templates-ds/assets/images/android-developers-logo.png b/tools/droiddoc/templates-ds/assets/images/android-developers-logo.png
new file mode 100644
index 0000000..30a8f62
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/android-developers-logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/android_wrench.png b/tools/droiddoc/templates-ds/assets/images/android_wrench.png
new file mode 100644
index 0000000..6390a2d
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/android_wrench.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow-left-develop.png b/tools/droiddoc/templates-ds/assets/images/arrow-left-develop.png
new file mode 100644
index 0000000..5fdfaa3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow-left-develop.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow-left.png b/tools/droiddoc/templates-ds/assets/images/arrow-left.png
new file mode 100644
index 0000000..43afec8
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow-left.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow-right-develop.png b/tools/droiddoc/templates-ds/assets/images/arrow-right-develop.png
new file mode 100644
index 0000000..c86f1f3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow-right-develop.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow-right.png b/tools/droiddoc/templates-ds/assets/images/arrow-right.png
new file mode 100644
index 0000000..6f7d6db
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow-right.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow_bluelink_down.png b/tools/droiddoc/templates-ds/assets/images/arrow_bluelink_down.png
new file mode 100755
index 0000000..58c248a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow_bluelink_down.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow_bluelink_up.png b/tools/droiddoc/templates-ds/assets/images/arrow_bluelink_up.png
new file mode 100755
index 0000000..7d0f38e
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow_bluelink_up.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow_left_off.jpg b/tools/droiddoc/templates-ds/assets/images/arrow_left_off.jpg
new file mode 100755
index 0000000..fd32a64
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow_left_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow_left_on.jpg b/tools/droiddoc/templates-ds/assets/images/arrow_left_on.jpg
new file mode 100755
index 0000000..143184b
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow_left_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow_right_off.jpg b/tools/droiddoc/templates-ds/assets/images/arrow_right_off.jpg
new file mode 100755
index 0000000..17d2efe
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow_right_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrow_right_on.jpg b/tools/droiddoc/templates-ds/assets/images/arrow_right_on.jpg
new file mode 100755
index 0000000..baa2af1
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrow_right_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/arrows-up-down.png b/tools/droiddoc/templates-ds/assets/images/arrows-up-down.png
new file mode 100644
index 0000000..a2a91ed
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/arrows-up-down.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/bg_community_leftDiv.jpg b/tools/droiddoc/templates-ds/assets/images/bg_community_leftDiv.jpg
new file mode 100755
index 0000000..a6d6f0e
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/bg_community_leftDiv.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/bg_fade.jpg b/tools/droiddoc/templates-ds/assets/images/bg_fade.jpg
new file mode 100755
index 0000000..c6c70b6
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/bg_fade.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/bg_gradient.jpg b/tools/droiddoc/templates-ds/assets/images/bg_gradient.jpg
new file mode 100644
index 0000000..884f8f5
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/bg_gradient.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/bg_images_sprite.png b/tools/droiddoc/templates-ds/assets/images/bg_images_sprite.png
new file mode 100755
index 0000000..84437e7
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/bg_images_sprite.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/bg_logo.png b/tools/droiddoc/templates-ds/assets/images/bg_logo.png
new file mode 100755
index 0000000..7cf0cb9
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/bg_logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/blog-default.png b/tools/droiddoc/templates-ds/assets/images/blog-default.png
new file mode 100644
index 0000000..f8ab6c3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/blog-default.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/body-gradient-tab.png b/tools/droiddoc/templates-ds/assets/images/body-gradient-tab.png
new file mode 100644
index 0000000..5223ac3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/body-gradient-tab.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/body-gradient.png b/tools/droiddoc/templates-ds/assets/images/body-gradient.png
new file mode 100755
index 0000000..9d59855
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/body-gradient.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/close.png b/tools/droiddoc/templates-ds/assets/images/close.png
new file mode 100644
index 0000000..6ae3391
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/close.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/dac_logo.png b/tools/droiddoc/templates-ds/assets/images/dac_logo.png
new file mode 100644
index 0000000..0f11044
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/dac_logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/developers-logo.png b/tools/droiddoc/templates-ds/assets/images/developers-logo.png
new file mode 100755
index 0000000..08122ee
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/developers-logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/fullscreen.png b/tools/droiddoc/templates-ds/assets/images/fullscreen.png
new file mode 100644
index 0000000..01f971c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/fullscreen.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/grad-rule-qv.png b/tools/droiddoc/templates-ds/assets/images/grad-rule-qv.png
new file mode 100644
index 0000000..bae2d18
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/grad-rule-qv.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/Android_Dev_Lab_l.png b/tools/droiddoc/templates-ds/assets/images/home/Android_Dev_Lab_l.png
new file mode 100644
index 0000000..3c04f24
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/Android_Dev_Lab_l.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/GDC2011.png b/tools/droiddoc/templates-ds/assets/images/home/GDC2011.png
new file mode 100644
index 0000000..82ce918
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/GDC2011.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/GTV_icon_large.png b/tools/droiddoc/templates-ds/assets/images/home/GTV_icon_large.png
new file mode 100644
index 0000000..72d54ad
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/GTV_icon_large.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/GTV_icon_small.png b/tools/droiddoc/templates-ds/assets/images/home/GTV_icon_small.png
new file mode 100644
index 0000000..3da1699
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/GTV_icon_small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/IO-logo-2011.png b/tools/droiddoc/templates-ds/assets/images/home/IO-logo-2011.png
new file mode 100644
index 0000000..4a28447
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/IO-logo-2011.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/IO-logo.png b/tools/droiddoc/templates-ds/assets/images/home/IO-logo.png
new file mode 100644
index 0000000..65334c8
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/IO-logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/adc2_l.png b/tools/droiddoc/templates-ds/assets/images/home/adc2_l.png
new file mode 100644
index 0000000..0b101a4
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/adc2_l.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/adc2_s.png b/tools/droiddoc/templates-ds/assets/images/home/adc2_s.png
new file mode 100644
index 0000000..0d36bdb
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/adc2_s.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/android_adc.png b/tools/droiddoc/templates-ds/assets/images/home/android_adc.png
new file mode 100644
index 0000000..9fe7f8f
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/android_adc.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/bg_home_announcement.png b/tools/droiddoc/templates-ds/assets/images/home/bg_home_announcement.png
new file mode 100755
index 0000000..91485ff
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/bg_home_announcement.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/bg_home_bottom.jpg b/tools/droiddoc/templates-ds/assets/images/home/bg_home_bottom.jpg
new file mode 100755
index 0000000..dacd401
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/bg_home_bottom.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel.png b/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel.png
new file mode 100755
index 0000000..5ce5e30
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel_board.png b/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel_board.png
new file mode 100755
index 0000000..c577e02
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel_board.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel_wheel.png b/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel_wheel.png
new file mode 100755
index 0000000..aa224ad
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/bg_home_carousel_wheel.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/carousel_buttons_sprite.png b/tools/droiddoc/templates-ds/assets/images/home/carousel_buttons_sprite.png
new file mode 100755
index 0000000..e98c942
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/carousel_buttons_sprite.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/devphone-large.png b/tools/droiddoc/templates-ds/assets/images/home/devphone-large.png
new file mode 100644
index 0000000..0db0f6c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/devphone-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/devphone-small.png b/tools/droiddoc/templates-ds/assets/images/home/devphone-small.png
new file mode 100644
index 0000000..e10bfa9
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/devphone-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/donut-android.png b/tools/droiddoc/templates-ds/assets/images/home/donut-android.png
new file mode 100755
index 0000000..6aba06b
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/donut-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/eclair-android.png b/tools/droiddoc/templates-ds/assets/images/home/eclair-android.png
new file mode 100644
index 0000000..d476ce9
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/eclair-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/froyo-android.png b/tools/droiddoc/templates-ds/assets/images/home/froyo-android.png
new file mode 100644
index 0000000..c63f7f0
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/froyo-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/gdc-logo.png b/tools/droiddoc/templates-ds/assets/images/home/gdc-logo.png
new file mode 100644
index 0000000..5fb53fb
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/gdc-logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/gingerdroid.png b/tools/droiddoc/templates-ds/assets/images/home/gingerdroid.png
new file mode 100644
index 0000000..8399d84
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/gingerdroid.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/google-plus-small.png b/tools/droiddoc/templates-ds/assets/images/home/google-plus-small.png
new file mode 100644
index 0000000..5bb7d7a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/google-plus-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/google-plus.png b/tools/droiddoc/templates-ds/assets/images/home/google-plus.png
new file mode 100644
index 0000000..90871e1
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/google-plus.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/honeycomb-android.png b/tools/droiddoc/templates-ds/assets/images/home/honeycomb-android.png
new file mode 100644
index 0000000..6cc5031
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/honeycomb-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/icon-about.png b/tools/droiddoc/templates-ds/assets/images/home/icon-about.png
new file mode 100644
index 0000000..8339762
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/icon-about.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/icon-design.png b/tools/droiddoc/templates-ds/assets/images/home/icon-design.png
new file mode 100644
index 0000000..0d31cdf
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/icon-design.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/icon-develop.png b/tools/droiddoc/templates-ds/assets/images/home/icon-develop.png
new file mode 100644
index 0000000..e02b20f
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/icon-develop.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/icon-distribute.png b/tools/droiddoc/templates-ds/assets/images/home/icon-distribute.png
new file mode 100644
index 0000000..4824072
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/icon-distribute.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/ics-android.png b/tools/droiddoc/templates-ds/assets/images/home/ics-android.png
new file mode 100644
index 0000000..be62ca8
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/ics-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/io-large.png b/tools/droiddoc/templates-ds/assets/images/home/io-large.png
new file mode 100755
index 0000000..986053c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/io-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/io-small.png b/tools/droiddoc/templates-ds/assets/images/home/io-small.png
new file mode 100755
index 0000000..3a22549
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/io-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/maps-large.png b/tools/droiddoc/templates-ds/assets/images/home/maps-large.png
new file mode 100644
index 0000000..b26f65a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/maps-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/maps-small.png b/tools/droiddoc/templates-ds/assets/images/home/maps-small.png
new file mode 100644
index 0000000..cc5f1fa
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/maps-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/market-large.png b/tools/droiddoc/templates-ds/assets/images/home/market-large.png
new file mode 100644
index 0000000..069fee7
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/market-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/market-small.png b/tools/droiddoc/templates-ds/assets/images/home/market-small.png
new file mode 100644
index 0000000..fa1201c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/market-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/sdk-large.png b/tools/droiddoc/templates-ds/assets/images/home/sdk-large.png
new file mode 100644
index 0000000..315a1bf
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/sdk-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/home/sdk-small.png b/tools/droiddoc/templates-ds/assets/images/home/sdk-small.png
new file mode 100644
index 0000000..0f1670d
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/home/sdk-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/hr_gray_main.jpg b/tools/droiddoc/templates-ds/assets/images/hr_gray_main.jpg
new file mode 100755
index 0000000..f7a0a2f
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/hr_gray_main.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/hr_gray_side.jpg b/tools/droiddoc/templates-ds/assets/images/hr_gray_side.jpg
new file mode 100755
index 0000000..6667476
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/hr_gray_side.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_contribute.jpg b/tools/droiddoc/templates-ds/assets/images/icon_contribute.jpg
new file mode 100755
index 0000000..1aa12b6
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_contribute.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_design.png b/tools/droiddoc/templates-ds/assets/images/icon_design.png
new file mode 100644
index 0000000..c12907c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_design.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_download.jpg b/tools/droiddoc/templates-ds/assets/images/icon_download.jpg
new file mode 100755
index 0000000..f8c1165
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_download.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_download2.jpg b/tools/droiddoc/templates-ds/assets/images/icon_download2.jpg
new file mode 100755
index 0000000..c0af7a2
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_download2.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_guidelines_logo.png b/tools/droiddoc/templates-ds/assets/images/icon_guidelines_logo.png
new file mode 100644
index 0000000..9362c8f
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_guidelines_logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_market.jpg b/tools/droiddoc/templates-ds/assets/images/icon_market.jpg
new file mode 100644
index 0000000..0fbb197
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_market.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_more.png b/tools/droiddoc/templates-ds/assets/images/icon_more.png
new file mode 100644
index 0000000..6cd03a3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_more.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_play.png b/tools/droiddoc/templates-ds/assets/images/icon_play.png
new file mode 100644
index 0000000..8bfdc7b
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_play.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_robot.jpg b/tools/droiddoc/templates-ds/assets/images/icon_robot.jpg
new file mode 100755
index 0000000..ca0fd39
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_robot.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_search.png b/tools/droiddoc/templates-ds/assets/images/icon_search.png
new file mode 100644
index 0000000..ee90a12
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_search.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/icon_world.jpg b/tools/droiddoc/templates-ds/assets/images/icon_world.jpg
new file mode 100755
index 0000000..65b8fa6
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/icon_world.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/left_off.jpg b/tools/droiddoc/templates-ds/assets/images/left_off.jpg
new file mode 100755
index 0000000..fd32a64
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/left_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/left_on.jpg b/tools/droiddoc/templates-ds/assets/images/left_on.jpg
new file mode 100755
index 0000000..143184b
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/left_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/locale.png b/tools/droiddoc/templates-ds/assets/images/locale.png
new file mode 100644
index 0000000..de3aae7
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/locale.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/logo_breadcrumbz.jpg b/tools/droiddoc/templates-ds/assets/images/logo_breadcrumbz.jpg
new file mode 100755
index 0000000..e743f86
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/logo_breadcrumbz.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/more_bottom.png b/tools/droiddoc/templates-ds/assets/images/more_bottom.png
new file mode 100644
index 0000000..632546a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/more_bottom.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/more_check.png b/tools/droiddoc/templates-ds/assets/images/more_check.png
new file mode 100644
index 0000000..f2fcbfc
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/more_check.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/more_mid.png b/tools/droiddoc/templates-ds/assets/images/more_mid.png
new file mode 100644
index 0000000..99bc999
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/more_mid.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/more_top.png b/tools/droiddoc/templates-ds/assets/images/more_top.png
new file mode 100644
index 0000000..8ead1d3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/more_top.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/open_source.png b/tools/droiddoc/templates-ds/assets/images/open_source.png
new file mode 100755
index 0000000..12bb1fb
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/open_source.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/preliminary.png b/tools/droiddoc/templates-ds/assets/images/preliminary.png
new file mode 100644
index 0000000..fe0da3d
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/preliminary.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/quicknav_arrow.png b/tools/droiddoc/templates-ds/assets/images/quicknav_arrow.png
new file mode 100644
index 0000000..697ac82
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/quicknav_arrow.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/quicknav_btn_bg.png b/tools/droiddoc/templates-ds/assets/images/quicknav_btn_bg.png
new file mode 100644
index 0000000..b80c9a8
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/quicknav_btn_bg.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resizable-e.gif b/tools/droiddoc/templates-ds/assets/images/resizable-e.gif
new file mode 100755
index 0000000..f748097
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resizable-e.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resizable-e2.gif b/tools/droiddoc/templates-ds/assets/images/resizable-e2.gif
new file mode 100755
index 0000000..e45d0c5
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resizable-e2.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resizable-eg.gif b/tools/droiddoc/templates-ds/assets/images/resizable-eg.gif
new file mode 100755
index 0000000..6196616
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resizable-eg.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resizable-s.gif b/tools/droiddoc/templates-ds/assets/images/resizable-s.gif
new file mode 100755
index 0000000..7f6a4eb
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resizable-s.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resizable-s2.gif b/tools/droiddoc/templates-ds/assets/images/resizable-s2.gif
new file mode 100755
index 0000000..99e869c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resizable-s2.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resizable-s2.png b/tools/droiddoc/templates-ds/assets/images/resizable-s2.png
new file mode 100644
index 0000000..f3a6d2d
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resizable-s2.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resizable-sg.gif b/tools/droiddoc/templates-ds/assets/images/resizable-sg.gif
new file mode 100755
index 0000000..b4bea10
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resizable-sg.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resource-article.png b/tools/droiddoc/templates-ds/assets/images/resource-article.png
new file mode 100644
index 0000000..416493f
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resource-article.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resource-big-article.png b/tools/droiddoc/templates-ds/assets/images/resource-big-article.png
new file mode 100644
index 0000000..7273275
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resource-big-article.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resource-big-sample.png b/tools/droiddoc/templates-ds/assets/images/resource-big-sample.png
new file mode 100644
index 0000000..59b6b68
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resource-big-sample.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resource-big-tutorial.png b/tools/droiddoc/templates-ds/assets/images/resource-big-tutorial.png
new file mode 100644
index 0000000..c32e89a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resource-big-tutorial.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resource-big-video.png b/tools/droiddoc/templates-ds/assets/images/resource-big-video.png
new file mode 100644
index 0000000..59d46a0
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resource-big-video.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resource-sample.png b/tools/droiddoc/templates-ds/assets/images/resource-sample.png
new file mode 100644
index 0000000..f7a411c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resource-sample.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resource-tutorial.png b/tools/droiddoc/templates-ds/assets/images/resource-tutorial.png
new file mode 100644
index 0000000..10a14fe
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resource-tutorial.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/resource-video.png b/tools/droiddoc/templates-ds/assets/images/resource-video.png
new file mode 100644
index 0000000..8fd5cae
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/resource-video.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/right_off.jpg b/tools/droiddoc/templates-ds/assets/images/right_off.jpg
new file mode 100755
index 0000000..17d2efe
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/right_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/right_on.jpg b/tools/droiddoc/templates-ds/assets/images/right_on.jpg
new file mode 100755
index 0000000..baa2af1
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/right_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/sidenav-rule.png b/tools/droiddoc/templates-ds/assets/images/sidenav-rule.png
new file mode 100644
index 0000000..eab9920
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/sidenav-rule.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/slide_1.jpg b/tools/droiddoc/templates-ds/assets/images/slide_1.jpg
new file mode 100755
index 0000000..6d75be1
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/slide_1.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/slide_2.jpg b/tools/droiddoc/templates-ds/assets/images/slide_2.jpg
new file mode 100755
index 0000000..aa994c2
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/slide_2.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/slide_3.jpg b/tools/droiddoc/templates-ds/assets/images/slide_3.jpg
new file mode 100755
index 0000000..b04deb3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/slide_3.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/slide_large_1.jpg b/tools/droiddoc/templates-ds/assets/images/slide_large_1.jpg
new file mode 100755
index 0000000..a992e92
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/slide_large_1.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/slide_large_2.jpg b/tools/droiddoc/templates-ds/assets/images/slide_large_2.jpg
new file mode 100755
index 0000000..9af63f4
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/slide_large_2.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/slide_large_3.jpg b/tools/droiddoc/templates-ds/assets/images/slide_large_3.jpg
new file mode 100755
index 0000000..fcf236c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/slide_large_3.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/slide_off.jpg b/tools/droiddoc/templates-ds/assets/images/slide_off.jpg
new file mode 100755
index 0000000..5971227
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/slide_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/slide_on.jpg b/tools/droiddoc/templates-ds/assets/images/slide_on.jpg
new file mode 100755
index 0000000..7ca3577
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/slide_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/spacer.gif b/tools/droiddoc/templates-ds/assets/images/spacer.gif
new file mode 100755
index 0000000..f96b355
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/spacer.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/callout.png b/tools/droiddoc/templates-ds/assets/images/styles/callout.png
new file mode 100644
index 0000000..5d49f34
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/callout.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_land_span13.png b/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_land_span13.png
new file mode 100644
index 0000000..bab6aca
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_land_span13.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_land_span8.png b/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_land_span8.png
new file mode 100644
index 0000000..cb180bf
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_land_span8.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_port_span5.png b/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_port_span5.png
new file mode 100644
index 0000000..bdccc2f
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_port_span5.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_port_span9.png b/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_port_span9.png
new file mode 100644
index 0000000..5e0135b
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/device_galaxynexus_blank_port_span9.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/disclosure_down.png b/tools/droiddoc/templates-ds/assets/images/styles/disclosure_down.png
new file mode 100644
index 0000000..6a0a8ee
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/disclosure_down.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/disclosure_left.png b/tools/droiddoc/templates-ds/assets/images/styles/disclosure_left.png
new file mode 100644
index 0000000..e887b2a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/disclosure_left.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/disclosure_right.png b/tools/droiddoc/templates-ds/assets/images/styles/disclosure_right.png
new file mode 100644
index 0000000..ced7fa4
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/disclosure_right.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/disclosure_up.png b/tools/droiddoc/templates-ds/assets/images/styles/disclosure_up.png
new file mode 100644
index 0000000..ddd4ec9
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/disclosure_up.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/gototop.png b/tools/droiddoc/templates-ds/assets/images/styles/gototop.png
new file mode 100644
index 0000000..5f09a29
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/gototop.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/ico_action.png b/tools/droiddoc/templates-ds/assets/images/styles/ico_action.png
new file mode 100644
index 0000000..30e4cc7
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/ico_action.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/ico_good.png b/tools/droiddoc/templates-ds/assets/images/styles/ico_good.png
new file mode 100644
index 0000000..afebe1c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/ico_good.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/ico_movie_inline.png b/tools/droiddoc/templates-ds/assets/images/styles/ico_movie_inline.png
new file mode 100644
index 0000000..7cfb5c5
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/ico_movie_inline.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/ico_phone_tablet.png b/tools/droiddoc/templates-ds/assets/images/styles/ico_phone_tablet.png
new file mode 100644
index 0000000..003b876
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/ico_phone_tablet.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/ico_use.png b/tools/droiddoc/templates-ds/assets/images/styles/ico_use.png
new file mode 100644
index 0000000..9d868b3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/ico_use.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/ico_web.png b/tools/droiddoc/templates-ds/assets/images/styles/ico_web.png
new file mode 100644
index 0000000..0848e3c
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/ico_web.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/ico_wrong.png b/tools/droiddoc/templates-ds/assets/images/styles/ico_wrong.png
new file mode 100644
index 0000000..b7d04ce
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/ico_wrong.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/styles/open_new_page.png b/tools/droiddoc/templates-ds/assets/images/styles/open_new_page.png
new file mode 100644
index 0000000..6197e3a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/styles/open_new_page.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/triangle-closed-small.png b/tools/droiddoc/templates-ds/assets/images/triangle-closed-small.png
new file mode 100644
index 0000000..002364a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/triangle-closed-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/triangle-closed.png b/tools/droiddoc/templates-ds/assets/images/triangle-closed.png
new file mode 100644
index 0000000..40a68d9
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/triangle-closed.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/triangle-opened-small.png b/tools/droiddoc/templates-ds/assets/images/triangle-opened-small.png
new file mode 100644
index 0000000..e1eb784
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/triangle-opened-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/triangle-opened.png b/tools/droiddoc/templates-ds/assets/images/triangle-opened.png
new file mode 100644
index 0000000..789f5fa
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/triangle-opened.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/uiguidelines1.png b/tools/droiddoc/templates-ds/assets/images/uiguidelines1.png
new file mode 100644
index 0000000..5ce1611
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/uiguidelines1.png
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/images/video-droid.png b/tools/droiddoc/templates-ds/assets/images/video-droid.png
new file mode 100644
index 0000000..25163b6
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/images/video-droid.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/assets/jdiff_logo.gif b/tools/droiddoc/templates-ds/assets/jdiff_logo.gif
index 6970087..6970087 100644
--- a/tools/droiddoc/templates-sdk/assets/jdiff_logo.gif
+++ b/tools/droiddoc/templates-ds/assets/jdiff_logo.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/assets/js/docs.js b/tools/droiddoc/templates-ds/assets/js/docs.js
new file mode 100644
index 0000000..557a242
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/js/docs.js
@@ -0,0 +1,2433 @@
+var classesNav;
+var devdocNav;
+var sidenav;
+var cookie_namespace = 'android_developer';
+var NAV_PREF_TREE = "tree";
+var NAV_PREF_PANELS = "panels";
+var nav_pref;
+var isMobile = false; // true if mobile, so we can adjust some layout
+
+var basePath = getBaseUri(location.pathname);
+var SITE_ROOT = toRoot + basePath.substring(1,basePath.indexOf("/",1));
+
+
+/****** ON LOAD SET UP STUFF *********/
+
+var navBarIsFixed = false;
+$(document).ready(function() {
+ if (devsite) {
+ // move the lang selector into the overflow menu
+ $("#moremenu .mid div.header:last").after($("#language").detach());
+ }
+
+ // init the fullscreen toggle click event
+ $('#nav-swap .fullscreen').click(function(){
+ if ($(this).hasClass('disabled')) {
+ toggleFullscreen(true);
+ } else {
+ toggleFullscreen(false);
+ }
+ });
+
+ // initialize the divs with custom scrollbars
+ $('.scroll-pane').jScrollPane( {verticalGutter:0} );
+
+ // add HRs below all H2s (except for a few other h2 variants)
+ $('h2').not('#qv h2').not('#tb h2').not('.sidebox h2').not('#devdoc-nav h2').not('h2.norule').css({marginBottom:0}).after('<hr/>');
+
+ // set search's onkeyup handler here so we can show suggestions
+ // even while search results are visible
+ $("#search_autocomplete").keyup(function() {return search_changed(event, false, toRoot)});
+
+ // set up the search close button
+ $('.search .close').click(function() {
+ $searchInput = $('#search_autocomplete');
+ $searchInput.attr('value', '');
+ $(this).addClass("hide");
+ $("#search-container").removeClass('active');
+ $("#search_autocomplete").blur();
+ search_focus_changed($searchInput.get(), false); // see search_autocomplete.js
+ hideResults(); // see search_autocomplete.js
+ });
+ $('.search').click(function() {
+ if (!$('#search_autocomplete').is(":focused")) {
+ $('#search_autocomplete').focus();
+ }
+ });
+
+ // Set up quicknav
+ var quicknav_open = false;
+ $("#btn-quicknav").click(function() {
+ if (quicknav_open) {
+ $(this).removeClass('active');
+ quicknav_open = false;
+ collapse();
+ } else {
+ $(this).addClass('active');
+ quicknav_open = true;
+ expand();
+ }
+ })
+
+ var expand = function() {
+ $('#header-wrap').addClass('quicknav');
+ $('#quicknav').stop().show().animate({opacity:'1'});
+ }
+
+ var collapse = function() {
+ $('#quicknav').stop().animate({opacity:'0'}, 100, function() {
+ $(this).hide();
+ $('#header-wrap').removeClass('quicknav');
+ });
+ }
+
+
+ //Set up search
+ $("#search_autocomplete").focus(function() {
+ $("#search-container").addClass('active');
+ })
+ $("#search-container").mouseover(function() {
+ $("#search-container").addClass('active');
+ $("#search_autocomplete").focus();
+ })
+ $("#search-container").mouseout(function() {
+ if ($("#search_autocomplete").is(":focus")) return;
+ if ($("#search_autocomplete").val() == '') {
+ setTimeout(function(){
+ $("#search-container").removeClass('active');
+ $("#search_autocomplete").blur();
+ },250);
+ }
+ })
+ $("#search_autocomplete").blur(function() {
+ if ($("#search_autocomplete").val() == '') {
+ $("#search-container").removeClass('active');
+ }
+ })
+
+
+ // prep nav expandos
+ var pagePath = document.location.pathname;
+ // account for intl docs by removing the intl/*/ path
+ if (pagePath.indexOf("/intl/") == 0) {
+ pagePath = pagePath.substr(pagePath.indexOf("/",6)); // start after intl/ to get last /
+ }
+
+ if (pagePath.indexOf(SITE_ROOT) == 0) {
+ if (pagePath == '' || pagePath.charAt(pagePath.length - 1) == '/') {
+ pagePath += 'index.html';
+ }
+ }
+
+ if (SITE_ROOT.match(/\.\.\//) || SITE_ROOT == '') {
+ // If running locally, SITE_ROOT will be a relative path, so account for that by
+ // finding the relative URL to this page. This will allow us to find links on the page
+ // leading back to this page.
+ var pathParts = pagePath.split('/');
+ var relativePagePathParts = [];
+ var upDirs = (SITE_ROOT.match(/(\.\.\/)+/) || [''])[0].length / 3;
+ for (var i = 0; i < upDirs; i++) {
+ relativePagePathParts.push('..');
+ }
+ for (var i = 0; i < upDirs; i++) {
+ relativePagePathParts.push(pathParts[pathParts.length - (upDirs - i) - 1]);
+ }
+ relativePagePathParts.push(pathParts[pathParts.length - 1]);
+ pagePath = relativePagePathParts.join('/');
+ } else {
+ // Otherwise the page path is already an absolute URL
+ }
+
+ // select current page in sidenav and set up prev/next links if they exist
+ var $selNavLink = $('#nav').find('a[href="' + pagePath + '"]');
+ var $selListItem;
+ if ($selNavLink.length) {
+ $selListItem = $selNavLink.closest('li');
+
+ $selListItem.addClass('selected');
+
+ // Traverse up the tree and expand all parent nav-sections
+ $selNavLink.parents('li.nav-section').each(function() {
+ $(this).addClass('expanded');
+ $(this).children('ul').show();
+ });
+
+
+ // set up prev links
+ var $prevLink = [];
+ var $prevListItem = $selListItem.prev('li');
+
+ var crossBoundaries = ($("body.design").length > 0) || ($("body.guide").length > 0) ? true :
+false; // navigate across topic boundaries only in design docs
+ if ($prevListItem.length) {
+ if ($prevListItem.hasClass('nav-section')) {
+ // jump to last topic of previous section
+ $prevLink = $prevListItem.find('a:last');
+ } else if (!$selListItem.hasClass('nav-section')) {
+ // jump to previous topic in this section
+ $prevLink = $prevListItem.find('a:eq(0)');
+ }
+ } else {
+ // jump to this section's index page (if it exists)
+ var $parentListItem = $selListItem.parents('li');
+ $prevLink = $selListItem.parents('li').find('a');
+
+ // except if cross boundaries aren't allowed, and we're at the top of a section already
+ // (and there's another parent)
+ if (!crossBoundaries && $parentListItem.hasClass('nav-section')
+ && $selListItem.hasClass('nav-section')) {
+ $prevLink = [];
+ }
+ }
+
+ // set up next links
+ var $nextLink = [];
+ var startClass = false;
+ var training = $(".next-class-link").length; // decides whether to provide "next class" link
+ var isCrossingBoundary = false;
+
+ if ($selListItem.hasClass('nav-section')) {
+ // we're on an index page, jump to the first topic
+ $nextLink = $selListItem.find('ul:eq(0)').find('a:eq(0)');
+
+ // if there aren't any children, go to the next section (required for About pages)
+ if($nextLink.length == 0) {
+ $nextLink = $selListItem.next('li').find('a');
+ } else if ($('.topic-start-link').length) {
+ // as long as there's a child link and there is a "topic start link" (we're on a landing)
+ // then set the landing page "start link" text to be the first doc title
+ $('.topic-start-link').text($nextLink.text().toUpperCase());
+ }
+
+ // If the selected page has a description, then it's a class or article homepage
+ if ($selListItem.find('a[description]').length) {
+ // this means we're on a class landing page
+ startClass = true;
+ }
+ } else {
+ // jump to the next topic in this section (if it exists)
+ $nextLink = $selListItem.next('li').find('a:eq(0)');
+ if (!$nextLink.length) {
+ isCrossingBoundary = true;
+ // no more topics in this section, jump to the first topic in the next section
+ $nextLink = $selListItem.parents('li:eq(0)').next('li.nav-section').find('a:eq(0)');
+ if (!$nextLink.length) { // Go up another layer to look for next page (lesson > class > course)
+ $nextLink = $selListItem.parents('li:eq(1)').next('li.nav-section').find('a:eq(0)');
+ }
+ }
+ }
+
+ if (startClass) {
+ $('.start-class-link').attr('href', $nextLink.attr('href')).removeClass("hide");
+
+ // if there's no training bar (below the start button),
+ // then we need to add a bottom border to button
+ if (!$("#tb").length) {
+ $('.start-class-link').css({'border-bottom':'1px solid #DADADA'});
+ }
+ } else if (isCrossingBoundary && !$('body.design').length) { // Design always crosses boundaries
+ $('.content-footer.next-class').show();
+ $('.next-page-link').attr('href','')
+ .removeClass("hide").addClass("disabled")
+ .click(function() { return false; });
+
+ $('.next-class-link').attr('href',$nextLink.attr('href'))
+ .removeClass("hide").append($nextLink.html());
+ $('.next-class-link').find('.new').empty();
+ } else {
+ $('.next-page-link').attr('href', $nextLink.attr('href')).removeClass("hide");
+ }
+
+ if (!startClass && $prevLink.length) {
+ var prevHref = $prevLink.attr('href');
+ if (prevHref == SITE_ROOT + 'index.html') {
+ // Don't show Previous when it leads to the homepage
+ } else {
+ $('.prev-page-link').attr('href', $prevLink.attr('href')).removeClass("hide");
+ }
+ }
+
+ // If this is a training 'article', there should be no prev/next nav
+ // ... if the grandparent is the "nav" ... and it has no child list items...
+ if (training && $selListItem.parents('ul').eq(1).is('[id="nav"]') &&
+ !$selListItem.find('li').length) {
+ $('.next-page-link,.prev-page-link').attr('href','').addClass("disabled")
+ .click(function() { return false; });
+ }
+
+ }
+
+
+
+ // Set up the course landing pages for Training with class names and descriptions
+ if ($('body.trainingcourse').length) {
+ var $classLinks = $selListItem.find('ul li a').not('#nav .nav-section .nav-section ul a');
+ var $classDescriptions = $classLinks.attr('description');
+
+ var $olClasses = $('<ol class="class-list"></ol>');
+ var $liClass;
+ var $imgIcon;
+ var $h2Title;
+ var $pSummary;
+ var $olLessons;
+ var $liLesson;
+ $classLinks.each(function(index) {
+ $liClass = $('<li></li>');
+ $h2Title = $('<a class="title" href="'+$(this).attr('href')+'"><h2>' + $(this).html()+'</h2><span></span></a>');
+ $pSummary = $('<p class="description">' + $(this).attr('description') + '</p>');
+
+ $olLessons = $('<ol class="lesson-list"></ol>');
+
+ $lessons = $(this).closest('li').find('ul li a');
+
+ if ($lessons.length) {
+ $imgIcon = $('<img src="'+toRoot+'assets/images/resource-tutorial.png" alt=""/>');
+ $lessons.each(function(index) {
+ $olLessons.append('<li><a href="'+$(this).attr('href')+'">' + $(this).html()+'</a></li>');
+ });
+ } else {
+ $imgIcon = $('<img src="'+toRoot+'assets/images/resource-article.png" alt=""/>');
+ $pSummary.addClass('article');
+ }
+
+ $liClass.append($h2Title).append($imgIcon).append($pSummary).append($olLessons);
+ $olClasses.append($liClass);
+ });
+ $('.jd-descr').append($olClasses);
+ }
+
+
+
+
+ // Set up expand/collapse behavior
+ $('#nav li.nav-section .nav-section-header').click(function() {
+ var section = $(this).closest('li.nav-section');
+ if (section.hasClass('expanded')) {
+ /* hide me */
+ // if (section.hasClass('selected') || section.find('li').hasClass('selected')) {
+ // /* but not if myself or my descendents are selected */
+ // return;
+ // }
+ section.children('ul').slideUp(250, function() {
+ section.closest('li').removeClass('expanded');
+ resizeNav();
+ });
+ } else {
+ /* show me */
+ // first hide all other siblings
+ var $others = $('li.nav-section.expanded', $(this).closest('ul'));
+ $others.removeClass('expanded').children('ul').slideUp(250);
+
+ // now expand me
+ section.closest('li').addClass('expanded');
+ section.children('ul').slideDown(250, function() {
+ resizeNav();
+ });
+ }
+ });
+
+ $(".scroll-pane").scroll(function(event) {
+ event.preventDefault();
+ return false;
+ });
+
+ /* Resize nav height when window height changes */
+ $(window).resize(function() {
+ if ($('#side-nav').length == 0) return;
+ var stylesheet = $('link[rel="stylesheet"][class="fullscreen"]');
+ setNavBarLeftPos(); // do this even if sidenav isn't fixed because it could become fixed
+ // make sidenav behave when resizing the window and side-scolling is a concern
+ if (navBarIsFixed) {
+ if ((stylesheet.attr("disabled") == "disabled") || stylesheet.length == 0) {
+ updateSideNavPosition();
+ } else {
+ updateSidenavFullscreenWidth();
+ }
+ }
+ resizeNav();
+ });
+
+
+ // Set up fixed navbar
+ var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll
+ $(window).scroll(function(event) {
+ if ($('#side-nav').length == 0) return;
+ if (event.target.nodeName == "DIV") {
+ // Dump scroll event if the target is a DIV, because that means the event is coming
+ // from a scrollable div and so there's no need to make adjustments to our layout
+ return;
+ }
+ var scrollTop = $(window).scrollTop();
+ var headerHeight = $('#header').outerHeight();
+ var subheaderHeight = $('#nav-x').outerHeight();
+ var searchResultHeight = $('#searchResults').is(":visible") ?
+ $('#searchResults').outerHeight() : 0;
+ var totalHeaderHeight = headerHeight + subheaderHeight + searchResultHeight;
+ // we set the navbar fixed when the scroll position is beyond the height of the site header...
+ var navBarShouldBeFixed = scrollTop > totalHeaderHeight;
+ // ... except if the document content is shorter than the sidenav height.
+ // (this is necessary to avoid crazy behavior on OSX Lion due to overscroll bouncing)
+ if ($("#doc-col").height() < $("#side-nav").height()) {
+ navBarShouldBeFixed = false;
+ }
+
+ var scrollLeft = $(window).scrollLeft();
+ // When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match
+ if (navBarIsFixed && (scrollLeft != prevScrollLeft)) {
+ updateSideNavPosition();
+ prevScrollLeft = scrollLeft;
+ }
+
+ // Don't continue if the header is sufficently far away
+ // (to avoid intensive resizing that slows scrolling)
+ if (navBarIsFixed && navBarShouldBeFixed) {
+ return;
+ }
+
+ if (navBarIsFixed != navBarShouldBeFixed) {
+ if (navBarShouldBeFixed) {
+ // make it fixed
+ var width = $('#devdoc-nav').width();
+ $('#devdoc-nav')
+ .addClass('fixed')
+ .css({'width':width+'px'})
+ .prependTo('#body-content');
+ // add neato "back to top" button
+ $('#devdoc-nav a.totop').css({'display':'block','width':$("#nav").innerWidth()+'px'});
+
+ // update the sidenaav position for side scrolling
+ updateSideNavPosition();
+ } else {
+ // make it static again
+ $('#devdoc-nav')
+ .removeClass('fixed')
+ .css({'width':'auto','margin':''})
+ .prependTo('#side-nav');
+ $('#devdoc-nav a.totop').hide();
+ }
+ navBarIsFixed = navBarShouldBeFixed;
+ }
+
+ resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance
+ });
+
+
+ var navBarLeftPos;
+ if ($('#devdoc-nav').length) {
+ setNavBarLeftPos();
+ }
+
+
+ // Stop expand/collapse behavior when clicking on nav section links (since we're navigating away
+ // from the page)
+ $('.nav-section-header').find('a:eq(0)').click(function(evt) {
+ window.location.href = $(this).attr('href');
+ return false;
+ });
+
+ // Set up play-on-hover <video> tags.
+ $('video.play-on-hover').bind('click', function(){
+ $(this).get(0).load(); // in case the video isn't seekable
+ $(this).get(0).play();
+ });
+
+ // Set up tooltips
+ var TOOLTIP_MARGIN = 10;
+ $('acronym,.tooltip-link').each(function() {
+ var $target = $(this);
+ var $tooltip = $('<div>')
+ .addClass('tooltip-box')
+ .append($target.attr('title'))
+ .hide()
+ .appendTo('body');
+ $target.removeAttr('title');
+
+ $target.hover(function() {
+ // in
+ var targetRect = $target.offset();
+ targetRect.width = $target.width();
+ targetRect.height = $target.height();
+
+ $tooltip.css({
+ left: targetRect.left,
+ top: targetRect.top + targetRect.height + TOOLTIP_MARGIN
+ });
+ $tooltip.addClass('below');
+ $tooltip.show();
+ }, function() {
+ // out
+ $tooltip.hide();
+ });
+ });
+
+ // Set up <h2> deeplinks
+ $('h2').click(function() {
+ var id = $(this).attr('id');
+ if (id) {
+ document.location.hash = id;
+ }
+ });
+
+ //Loads the +1 button
+ var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
+ po.src = 'https://apis.google.com/js/plusone.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
+
+
+ // Revise the sidenav widths to make room for the scrollbar
+ // which avoids the visible width from changing each time the bar appears
+ var $sidenav = $("#side-nav");
+ var sidenav_width = parseInt($sidenav.innerWidth());
+
+ $("#devdoc-nav #nav").css("width", sidenav_width - 4 + "px"); // 4px is scrollbar width
+
+
+ $(".scroll-pane").removeAttr("tabindex"); // get rid of tabindex added by jscroller
+
+ if ($(".scroll-pane").length > 1) {
+ // Check if there's a user preference for the panel heights
+ var cookieHeight = readCookie("reference_height");
+ if (cookieHeight) {
+ restoreHeight(cookieHeight);
+ }
+ }
+
+ resizeNav();
+
+ /* init the language selector based on user cookie for lang */
+ loadLangPref();
+ changeNavLang(getLangPref());
+
+ /* setup event handlers to ensure the overflow menu is visible while picking lang */
+ $("#language select")
+ .mousedown(function() {
+ $("div.morehover").addClass("hover"); })
+ .blur(function() {
+ $("div.morehover").removeClass("hover"); });
+
+ /* some global variable setup */
+ resizePackagesNav = $("#resize-packages-nav");
+ classesNav = $("#classes-nav");
+ devdocNav = $("#devdoc-nav");
+
+ var cookiePath = "";
+ if (location.href.indexOf("/reference/") != -1) {
+ cookiePath = "reference_";
+ } else if (location.href.indexOf("/guide/") != -1) {
+ cookiePath = "guide_";
+ } else if (location.href.indexOf("/tools/") != -1) {
+ cookiePath = "tools_";
+ } else if (location.href.indexOf("/training/") != -1) {
+ cookiePath = "training_";
+ } else if (location.href.indexOf("/design/") != -1) {
+ cookiePath = "design_";
+ } else if (location.href.indexOf("/distribute/") != -1) {
+ cookiePath = "distribute_";
+ }
+
+});
+
+
+
+function toggleFullscreen(enable) {
+ var delay = 20;
+ var enabled = true;
+ var stylesheet = $('link[rel="stylesheet"][class="fullscreen"]');
+ if (enable) {
+ // Currently NOT USING fullscreen; enable fullscreen
+ stylesheet.removeAttr('disabled');
+ $('#nav-swap .fullscreen').removeClass('disabled');
+ $('#devdoc-nav').css({left:''});
+ setTimeout(updateSidenavFullscreenWidth,delay); // need to wait a moment for css to switch
+ enabled = true;
+ } else {
+ // Currently USING fullscreen; disable fullscreen
+ stylesheet.attr('disabled', 'disabled');
+ $('#nav-swap .fullscreen').addClass('disabled');
+ setTimeout(updateSidenavFixedWidth,delay); // need to wait a moment for css to switch
+ enabled = false;
+ }
+ writeCookie("fullscreen", enabled, null, null);
+ setNavBarLeftPos();
+ resizeNav(delay);
+ updateSideNavPosition();
+ setTimeout(initSidenavHeightResize,delay);
+}
+
+
+function setNavBarLeftPos() {
+ navBarLeftPos = $('#body-content').offset().left;
+}
+
+
+function updateSideNavPosition() {
+ var newLeft = $(window).scrollLeft() - navBarLeftPos;
+ $('#devdoc-nav').css({left: -newLeft});
+ $('#devdoc-nav .totop').css({left: -(newLeft - parseInt($('#side-nav').css('margin-left')))});
+}
+
+
+
+
+
+
+
+
+// TODO: use $(document).ready instead
+function addLoadEvent(newfun) {
+ var current = window.onload;
+ if (typeof window.onload != 'function') {
+ window.onload = newfun;
+ } else {
+ window.onload = function() {
+ current();
+ newfun();
+ }
+ }
+}
+
+var agent = navigator['userAgent'].toLowerCase();
+// If a mobile phone, set flag and do mobile setup
+if ((agent.indexOf("mobile") != -1) || // android, iphone, ipod
+ (agent.indexOf("blackberry") != -1) ||
+ (agent.indexOf("webos") != -1) ||
+ (agent.indexOf("mini") != -1)) { // opera mini browsers
+ isMobile = true;
+}
+
+
+/* loads the lists.js file to the page.
+Loading this in the head was slowing page load time */
+addLoadEvent( function() {
+ var lists = document.createElement("script");
+ lists.setAttribute("type","text/javascript");
+ lists.setAttribute("src", toRoot+"reference/lists.js");
+ document.getElementsByTagName("head")[0].appendChild(lists);
+} );
+
+
+addLoadEvent( function() {
+ $("pre:not(.no-pretty-print)").addClass("prettyprint");
+ prettyPrint();
+} );
+
+
+
+
+/* ######### RESIZE THE SIDENAV HEIGHT ########## */
+
+function resizeNav(delay) {
+ var $nav = $("#devdoc-nav");
+ var $window = $(window);
+ var navHeight;
+
+ // Get the height of entire window and the total header height.
+ // Then figure out based on scroll position whether the header is visible
+ var windowHeight = $window.height();
+ var scrollTop = $window.scrollTop();
+ var headerHeight = $('#header').outerHeight();
+ var subheaderHeight = $('#nav-x').outerHeight();
+ var headerVisible = (scrollTop < (headerHeight + subheaderHeight));
+
+ // get the height of space between nav and top of window.
+ // Could be either margin or top position, depending on whether the nav is fixed.
+ var topMargin = (parseInt($nav.css('margin-top')) || parseInt($nav.css('top'))) + 1;
+ // add 1 for the #side-nav bottom margin
+
+ // Depending on whether the header is visible, set the side nav's height.
+ if (headerVisible) {
+ // The sidenav height grows as the header goes off screen
+ navHeight = windowHeight - (headerHeight + subheaderHeight - scrollTop) - topMargin;
+ } else {
+ // Once header is off screen, the nav height is almost full window height
+ navHeight = windowHeight - topMargin;
+ }
+
+
+
+ $scrollPanes = $(".scroll-pane");
+ if ($scrollPanes.length > 1) {
+ // subtract the height of the api level widget and nav swapper from the available nav height
+ navHeight -= ($('#api-nav-header').outerHeight(true) + $('#nav-swap').outerHeight(true));
+
+ $("#swapper").css({height:navHeight + "px"});
+ if ($("#nav-tree").is(":visible")) {
+ $("#nav-tree").css({height:navHeight});
+ }
+
+ var classesHeight = navHeight - parseInt($("#resize-packages-nav").css("height")) - 10 + "px";
+ //subtract 10px to account for drag bar
+
+ // if the window becomes small enough to make the class panel height 0,
+ // then the package panel should begin to shrink
+ if (parseInt(classesHeight) <= 0) {
+ $("#resize-packages-nav").css({height:navHeight - 10}); //subtract 10px for drag bar
+ $("#packages-nav").css({height:navHeight - 10});
+ }
+
+ $("#classes-nav").css({'height':classesHeight, 'margin-top':'10px'});
+ $("#classes-nav .jspContainer").css({height:classesHeight});
+
+
+ } else {
+ $nav.height(navHeight);
+ }
+
+ if (delay) {
+ updateFromResize = true;
+ delayedReInitScrollbars(delay);
+ } else {
+ reInitScrollbars();
+ }
+
+}
+
+var updateScrollbars = false;
+var updateFromResize = false;
+
+/* Re-initialize the scrollbars to account for changed nav size.
+ * This method postpones the actual update by a 1/4 second in order to optimize the
+ * scroll performance while the header is still visible, because re-initializing the
+ * scroll panes is an intensive process.
+ */
+function delayedReInitScrollbars(delay) {
+ // If we're scheduled for an update, but have received another resize request
+ // before the scheduled resize has occured, just ignore the new request
+ // (and wait for the scheduled one).
+ if (updateScrollbars && updateFromResize) {
+ updateFromResize = false;
+ return;
+ }
+
+ // We're scheduled for an update and the update request came from this method's setTimeout
+ if (updateScrollbars && !updateFromResize) {
+ reInitScrollbars();
+ updateScrollbars = false;
+ } else {
+ updateScrollbars = true;
+ updateFromResize = false;
+ setTimeout('delayedReInitScrollbars()',delay);
+ }
+}
+
+/* Re-initialize the scrollbars to account for changed nav size. */
+function reInitScrollbars() {
+ var pane = $(".scroll-pane").each(function(){
+ var api = $(this).data('jsp');
+ if (!api) { setTimeout(reInitScrollbars,300); return;}
+ api.reinitialise( {verticalGutter:0} );
+ });
+ $(".scroll-pane").removeAttr("tabindex"); // get rid of tabindex added by jscroller
+}
+
+
+/* Resize the height of the nav panels in the reference,
+ * and save the new size to a cookie */
+function saveNavPanels() {
+ var basePath = getBaseUri(location.pathname);
+ var section = basePath.substring(1,basePath.indexOf("/",1));
+ writeCookie("height", resizePackagesNav.css("height"), section, null);
+}
+
+
+
+function restoreHeight(packageHeight) {
+ $("#resize-packages-nav").height(packageHeight);
+ $("#packages-nav").height(packageHeight);
+ // var classesHeight = navHeight - packageHeight;
+ // $("#classes-nav").css({height:classesHeight});
+ // $("#classes-nav .jspContainer").css({height:classesHeight});
+}
+
+
+
+/* ######### END RESIZE THE SIDENAV HEIGHT ########## */
+
+
+
+
+
+/** Scroll the jScrollPane to make the currently selected item visible
+ This is called when the page finished loading. */
+function scrollIntoView(nav) {
+ var $nav = $("#"+nav);
+ var element = $nav.jScrollPane({/* ...settings... */});
+ var api = element.data('jsp');
+
+ if ($nav.is(':visible')) {
+ var $selected = $(".selected", $nav);
+ if ($selected.length == 0) return;
+
+ var selectedOffset = $selected.position().top;
+ if (selectedOffset + 90 > $nav.height()) { // add 90 so that we scroll up even
+ // if the current item is close to the bottom
+ api.scrollTo(0, selectedOffset - ($nav.height() / 4), false); // scroll the item into view
+ // to be 1/4 of the way from the top
+ }
+ }
+}
+
+
+
+
+
+
+/* Show popup dialogs */
+function showDialog(id) {
+ $dialog = $("#"+id);
+ $dialog.prepend('<div class="box-border"><div class="top"> <div class="left"></div> <div class="right"></div></div><div class="bottom"> <div class="left"></div> <div class="right"></div> </div> </div>');
+ $dialog.wrapInner('<div/>');
+ $dialog.removeClass("hide");
+}
+
+
+
+
+
+/* ######### COOKIES! ########## */
+
+function readCookie(cookie) {
+ var myCookie = cookie_namespace+"_"+cookie+"=";
+ if (document.cookie) {
+ var index = document.cookie.indexOf(myCookie);
+ if (index != -1) {
+ var valStart = index + myCookie.length;
+ var valEnd = document.cookie.indexOf(";", valStart);
+ if (valEnd == -1) {
+ valEnd = document.cookie.length;
+ }
+ var val = document.cookie.substring(valStart, valEnd);
+ return val;
+ }
+ }
+ return 0;
+}
+
+function writeCookie(cookie, val, section, expiration) {
+ if (val==undefined) return;
+ section = section == null ? "_" : "_"+section+"_";
+ if (expiration == null) {
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+ expiration = date.toGMTString();
+ }
+ var cookieValue = cookie_namespace + section + cookie + "=" + val
+ + "; expires=" + expiration+"; path=/";
+ document.cookie = cookieValue;
+}
+
+/* ######### END COOKIES! ########## */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+
+REMEMBER THE PREVIOUS PAGE FOR EACH TAB
+
+function loadLast(cookiePath) {
+ var location = window.location.href;
+ if (location.indexOf("/"+cookiePath+"/") != -1) {
+ return true;
+ }
+ var lastPage = readCookie(cookiePath + "_lastpage");
+ if (lastPage) {
+ window.location = lastPage;
+ return false;
+ }
+ return true;
+}
+
+
+
+$(window).unload(function(){
+ var path = getBaseUri(location.pathname);
+ if (path.indexOf("/reference/") != -1) {
+ writeCookie("lastpage", path, "reference", null);
+ } else if (path.indexOf("/guide/") != -1) {
+ writeCookie("lastpage", path, "guide", null);
+ } else if ((path.indexOf("/resources/") != -1) || (path.indexOf("/training/") != -1)) {
+ writeCookie("lastpage", path, "resources", null);
+ }
+});
+
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function toggle(obj, slide) {
+ var ul = $("ul:first", obj);
+ var li = ul.parent();
+ if (li.hasClass("closed")) {
+ if (slide) {
+ ul.slideDown("fast");
+ } else {
+ ul.show();
+ }
+ li.removeClass("closed");
+ li.addClass("open");
+ $(".toggle-img", li).attr("title", "hide pages");
+ } else {
+ ul.slideUp("fast");
+ li.removeClass("open");
+ li.addClass("closed");
+ $(".toggle-img", li).attr("title", "show pages");
+ }
+}
+
+
+
+
+
+function buildToggleLists() {
+ $(".toggle-list").each(
+ function(i) {
+ $("div:first", this).append("<a class='toggle-img' href='#' title='show pages' onClick='toggle(this.parentNode.parentNode, true); return false;'></a>");
+ $(this).addClass("closed");
+ });
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* REFERENCE NAV SWAP */
+
+
+function getNavPref() {
+ var v = readCookie('reference_nav');
+ if (v != NAV_PREF_TREE) {
+ v = NAV_PREF_PANELS;
+ }
+ return v;
+}
+
+function chooseDefaultNav() {
+ nav_pref = getNavPref();
+ if (nav_pref == NAV_PREF_TREE) {
+ $("#nav-panels").toggle();
+ $("#panel-link").toggle();
+ $("#nav-tree").toggle();
+ $("#tree-link").toggle();
+ }
+}
+
+function swapNav() {
+ if (nav_pref == NAV_PREF_TREE) {
+ nav_pref = NAV_PREF_PANELS;
+ } else {
+ nav_pref = NAV_PREF_TREE;
+ init_default_navtree(toRoot);
+ }
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
+ writeCookie("nav", nav_pref, "reference", date.toGMTString());
+
+ $("#nav-panels").toggle();
+ $("#panel-link").toggle();
+ $("#nav-tree").toggle();
+ $("#tree-link").toggle();
+
+ resizeNav();
+
+ // Gross nasty hack to make tree view show up upon first swap by setting height manually
+ $("#nav-tree .jspContainer:visible")
+ .css({'height':$("#nav-tree .jspContainer .jspPane").height() +'px'});
+ // Another nasty hack to make the scrollbar appear now that we have height
+ resizeNav();
+
+ if ($("#nav-tree").is(':visible')) {
+ scrollIntoView("nav-tree");
+ } else {
+ scrollIntoView("packages-nav");
+ scrollIntoView("classes-nav");
+ }
+}
+
+
+
+/* ############################################ */
+/* ########## LOCALIZATION ############ */
+/* ############################################ */
+
+function getBaseUri(uri) {
+ var intlUrl = (uri.substring(0,6) == "/intl/");
+ if (intlUrl) {
+ base = uri.substring(uri.indexOf('intl/')+5,uri.length);
+ base = base.substring(base.indexOf('/')+1, base.length);
+ //alert("intl, returning base url: /" + base);
+ return ("/" + base);
+ } else {
+ //alert("not intl, returning uri as found.");
+ return uri;
+ }
+}
+
+function requestAppendHL(uri) {
+//append "?hl=<lang> to an outgoing request (such as to blog)
+ var lang = getLangPref();
+ if (lang) {
+ var q = 'hl=' + lang;
+ uri += '?' + q;
+ window.location = uri;
+ return false;
+ } else {
+ return true;
+ }
+}
+
+
+function changeNavLang(lang) {
+ var $links = $("#devdoc-nav,#header,#nav-x,.training-nav-top,.content-footer").find("a["+lang+"-lang]");
+ $links.each(function(i){ // for each link with a translation
+ var $link = $(this);
+ if (lang != "en") { // No need to worry about English, because a language change invokes new request
+ // put the desired language from the attribute as the text
+ $link.text($link.attr(lang+"-lang"))
+ }
+ });
+}
+
+function changeLangPref(lang, submit) {
+ var date = new Date();
+ expires = date.toGMTString(date.setTime(date.getTime()+(10*365*24*60*60*1000)));
+ // keep this for 50 years
+ //alert("expires: " + expires)
+ writeCookie("pref_lang", lang, null, expires);
+
+ // ####### TODO: Remove this condition once we're stable on devsite #######
+ // This condition is only needed if we still need to support legacy GAE server
+ if (devsite) {
+ // Switch language when on Devsite server
+ if (submit) {
+ $("#setlang").submit();
+ }
+ } else {
+ // Switch language when on legacy GAE server
+ changeDocLang(lang);
+ if (submit) {
+ window.location = getBaseUri(location.pathname);
+ }
+ }
+}
+
+function loadLangPref() {
+ var lang = readCookie("pref_lang");
+ if (lang != 0) {
+ $("#language").find("option[value='"+lang+"']").attr("selected",true);
+ }
+}
+
+function getLangPref() {
+ var lang = $("#language").find(":selected").attr("value");
+ if (!lang) {
+ lang = readCookie("pref_lang");
+ }
+ return (lang != 0) ? lang : 'en';
+}
+
+/* ########## END LOCALIZATION ############ */
+
+
+
+
+
+
+/* Used to hide and reveal supplemental content, such as long code samples.
+ See the companion CSS in android-developer-docs.css */
+function toggleContent(obj) {
+ var div = $(obj.parentNode.parentNode);
+ var toggleMe = $(".toggle-content-toggleme",div);
+ if (div.hasClass("closed")) { // if it's closed, open it
+ toggleMe.slideDown();
+ $(".toggle-content-text", obj).toggle();
+ div.removeClass("closed").addClass("open");
+ $(".toggle-content-img", div).attr("title", "hide").attr("src", toRoot
+ + "assets/images/triangle-opened.png");
+ } else { // if it's open, close it
+ toggleMe.slideUp('fast', function() { // Wait until the animation is done before closing arrow
+ $(".toggle-content-text", obj).toggle();
+ div.removeClass("open").addClass("closed");
+ $(".toggle-content-img", div).attr("title", "show").attr("src", toRoot
+ + "assets/images/triangle-closed.png");
+ });
+ }
+ return false;
+}
+
+
+/* New version of expandable content */
+function toggleExpandable(link,id) {
+ if($(id).is(':visible')) {
+ $(id).slideUp();
+ $(link).removeClass('expanded');
+ } else {
+ $(id).slideDown();
+ $(link).addClass('expanded');
+ }
+}
+
+function hideExpandable(ids) {
+ $(ids).slideUp();
+ $(ids).prev('h4').find('a.expandable').removeClass('expanded');
+}
+
+
+
+
+
+/*
+ * Slideshow 1.0
+ * Used on /index.html and /develop/index.html for carousel
+ *
+ * Sample usage:
+ * HTML -
+ * <div class="slideshow-container">
+ * <a href="" class="slideshow-prev">Prev</a>
+ * <a href="" class="slideshow-next">Next</a>
+ * <ul>
+ * <li class="item"><img src="images/marquee1.jpg"></li>
+ * <li class="item"><img src="images/marquee2.jpg"></li>
+ * <li class="item"><img src="images/marquee3.jpg"></li>
+ * <li class="item"><img src="images/marquee4.jpg"></li>
+ * </ul>
+ * </div>
+ *
+ * <script type="text/javascript">
+ * $('.slideshow-container').dacSlideshow({
+ * auto: true,
+ * btnPrev: '.slideshow-prev',
+ * btnNext: '.slideshow-next'
+ * });
+ * </script>
+ *
+ * Options:
+ * btnPrev: optional identifier for previous button
+ * btnNext: optional identifier for next button
+ * btnPause: optional identifier for pause button
+ * auto: whether or not to auto-proceed
+ * speed: animation speed
+ * autoTime: time between auto-rotation
+ * easing: easing function for transition
+ * start: item to select by default
+ * scroll: direction to scroll in
+ * pagination: whether or not to include dotted pagination
+ *
+ */
+
+ (function($) {
+ $.fn.dacSlideshow = function(o) {
+
+ //Options - see above
+ o = $.extend({
+ btnPrev: null,
+ btnNext: null,
+ btnPause: null,
+ auto: true,
+ speed: 500,
+ autoTime: 12000,
+ easing: null,
+ start: 0,
+ scroll: 1,
+ pagination: true
+
+ }, o || {});
+
+ //Set up a carousel for each
+ return this.each(function() {
+
+ var running = false;
+ var animCss = o.vertical ? "top" : "left";
+ var sizeCss = o.vertical ? "height" : "width";
+ var div = $(this);
+ var ul = $("ul", div);
+ var tLi = $("li", ul);
+ var tl = tLi.size();
+ var timer = null;
+
+ var li = $("li", ul);
+ var itemLength = li.size();
+ var curr = o.start;
+
+ li.css({float: o.vertical ? "none" : "left"});
+ ul.css({margin: "0", padding: "0", position: "relative", "list-style-type": "none", "z-index": "1"});
+ div.css({position: "relative", "z-index": "2", left: "0px"});
+
+ var liSize = o.vertical ? height(li) : width(li);
+ var ulSize = liSize * itemLength;
+ var divSize = liSize;
+
+ li.css({width: li.width(), height: li.height()});
+ ul.css(sizeCss, ulSize+"px").css(animCss, -(curr*liSize));
+
+ div.css(sizeCss, divSize+"px");
+
+ //Pagination
+ if (o.pagination) {
+ var pagination = $("<div class='pagination'></div>");
+ var pag_ul = $("<ul></ul>");
+ if (tl > 1) {
+ for (var i=0;i<tl;i++) {
+ var li = $("<li>"+i+"</li>");
+ pag_ul.append(li);
+ if (i==o.start) li.addClass('active');
+ li.click(function() {
+ go(parseInt($(this).text()));
+ })
+ }
+ pagination.append(pag_ul);
+ div.append(pagination);
+ }
+ }
+
+ //Previous button
+ if(o.btnPrev)
+ $(o.btnPrev).click(function(e) {
+ e.preventDefault();
+ return go(curr-o.scroll);
+ });
+
+ //Next button
+ if(o.btnNext)
+ $(o.btnNext).click(function(e) {
+ e.preventDefault();
+ return go(curr+o.scroll);
+ });
+
+ //Pause button
+ if(o.btnPause)
+ $(o.btnPause).click(function(e) {
+ e.preventDefault();
+ if ($(this).hasClass('paused')) {
+ startRotateTimer();
+ } else {
+ pauseRotateTimer();
+ }
+ });
+
+ //Auto rotation
+ if(o.auto) startRotateTimer();
+
+ function startRotateTimer() {
+ clearInterval(timer);
+ timer = setInterval(function() {
+ if (curr == tl-1) {
+ go(0);
+ } else {
+ go(curr+o.scroll);
+ }
+ }, o.autoTime);
+ $(o.btnPause).removeClass('paused');
+ }
+
+ function pauseRotateTimer() {
+ clearInterval(timer);
+ $(o.btnPause).addClass('paused');
+ }
+
+ //Go to an item
+ function go(to) {
+ if(!running) {
+
+ if(to<0) {
+ to = itemLength-1;
+ } else if (to>itemLength-1) {
+ to = 0;
+ }
+ curr = to;
+
+ running = true;
+
+ ul.animate(
+ animCss == "left" ? { left: -(curr*liSize) } : { top: -(curr*liSize) } , o.speed, o.easing,
+ function() {
+ running = false;
+ }
+ );
+
+ $(o.btnPrev + "," + o.btnNext).removeClass("disabled");
+ $( (curr-o.scroll<0 && o.btnPrev)
+ ||
+ (curr+o.scroll > itemLength && o.btnNext)
+ ||
+ []
+ ).addClass("disabled");
+
+
+ var nav_items = $('li', pagination);
+ nav_items.removeClass('active');
+ nav_items.eq(to).addClass('active');
+
+
+ }
+ if(o.auto) startRotateTimer();
+ return false;
+ };
+ });
+ };
+
+ function css(el, prop) {
+ return parseInt($.css(el[0], prop)) || 0;
+ };
+ function width(el) {
+ return el[0].offsetWidth + css(el, 'marginLeft') + css(el, 'marginRight');
+ };
+ function height(el) {
+ return el[0].offsetHeight + css(el, 'marginTop') + css(el, 'marginBottom');
+ };
+
+ })(jQuery);
+
+
+/*
+ * dacSlideshow 1.0
+ * Used on develop/index.html for side-sliding tabs
+ *
+ * Sample usage:
+ * HTML -
+ * <div class="slideshow-container">
+ * <a href="" class="slideshow-prev">Prev</a>
+ * <a href="" class="slideshow-next">Next</a>
+ * <ul>
+ * <li class="item"><img src="images/marquee1.jpg"></li>
+ * <li class="item"><img src="images/marquee2.jpg"></li>
+ * <li class="item"><img src="images/marquee3.jpg"></li>
+ * <li class="item"><img src="images/marquee4.jpg"></li>
+ * </ul>
+ * </div>
+ *
+ * <script type="text/javascript">
+ * $('.slideshow-container').dacSlideshow({
+ * auto: true,
+ * btnPrev: '.slideshow-prev',
+ * btnNext: '.slideshow-next'
+ * });
+ * </script>
+ *
+ * Options:
+ * btnPrev: optional identifier for previous button
+ * btnNext: optional identifier for next button
+ * auto: whether or not to auto-proceed
+ * speed: animation speed
+ * autoTime: time between auto-rotation
+ * easing: easing function for transition
+ * start: item to select by default
+ * scroll: direction to scroll in
+ * pagination: whether or not to include dotted pagination
+ *
+ */
+ (function($) {
+ $.fn.dacTabbedList = function(o) {
+
+ //Options - see above
+ o = $.extend({
+ speed : 250,
+ easing: null,
+ nav_id: null,
+ frame_id: null
+ }, o || {});
+
+ //Set up a carousel for each
+ return this.each(function() {
+
+ var curr = 0;
+ var running = false;
+ var animCss = "margin-left";
+ var sizeCss = "width";
+ var div = $(this);
+
+ var nav = $(o.nav_id, div);
+ var nav_li = $("li", nav);
+ var nav_size = nav_li.size();
+ var frame = div.find(o.frame_id);
+ var content_width = $(frame).find('ul').width();
+ //Buttons
+ $(nav_li).click(function(e) {
+ go($(nav_li).index($(this)));
+ })
+
+ //Go to an item
+ function go(to) {
+ if(!running) {
+ curr = to;
+ running = true;
+
+ frame.animate({ 'margin-left' : -(curr*content_width) }, o.speed, o.easing,
+ function() {
+ running = false;
+ }
+ );
+
+
+ nav_li.removeClass('active');
+ nav_li.eq(to).addClass('active');
+
+
+ }
+ return false;
+ };
+ });
+ };
+
+ function css(el, prop) {
+ return parseInt($.css(el[0], prop)) || 0;
+ };
+ function width(el) {
+ return el[0].offsetWidth + css(el, 'marginLeft') + css(el, 'marginRight');
+ };
+ function height(el) {
+ return el[0].offsetHeight + css(el, 'marginTop') + css(el, 'marginBottom');
+ };
+
+ })(jQuery);
+
+
+
+
+
+/* ######################################################## */
+/* ################ SEARCH SUGGESTIONS ################## */
+/* ######################################################## */
+
+
+var gSelectedIndex = -1;
+var gSelectedID = -1;
+var gMatches = new Array();
+var gLastText = "";
+var ROW_COUNT = 20;
+var gInitialized = false;
+
+function set_item_selected($li, selected)
+{
+ if (selected) {
+ $li.attr('class','jd-autocomplete jd-selected');
+ } else {
+ $li.attr('class','jd-autocomplete');
+ }
+}
+
+function set_item_values(toroot, $li, match)
+{
+ var $link = $('a',$li);
+ $link.html(match.__hilabel || match.label);
+ $link.attr('href',toroot + match.link);
+}
+
+function sync_selection_table(toroot)
+{
+ var $list = $("#search_filtered");
+ var $li; //list item jquery object
+ var i; //list item iterator
+ gSelectedID = -1;
+
+ //initialize the table; draw it for the first time (but not visible).
+ if (!gInitialized) {
+ for (i=0; i<ROW_COUNT; i++) {
+ var $li = $("<li class='jd-autocomplete'></li>");
+ $list.append($li);
+
+ $li.mousedown(function() {
+ window.location = this.firstChild.getAttribute("href");
+ });
+ $li.mouseover(function() {
+ $('#search_filtered li').removeClass('jd-selected');
+ $(this).addClass('jd-selected');
+ gSelectedIndex = $('#search_filtered li').index(this);
+ });
+ $li.append('<a></a>');
+ }
+ gInitialized = true;
+ }
+
+ //if we have results, make the table visible and initialize result info
+ if (gMatches.length > 0) {
+ $('#search_filtered_div').removeClass('no-display');
+ var N = gMatches.length < ROW_COUNT ? gMatches.length : ROW_COUNT;
+ for (i=0; i<N; i++) {
+ $li = $('#search_filtered li:nth-child('+(i+1)+')');
+ $li.attr('class','show-item');
+ set_item_values(toroot, $li, gMatches[i]);
+ set_item_selected($li, i == gSelectedIndex);
+ if (i == gSelectedIndex) {
+ gSelectedID = gMatches[i].id;
+ }
+ }
+ //start hiding rows that are no longer matches
+ for (; i<ROW_COUNT; i++) {
+ $li = $('#search_filtered li:nth-child('+(i+1)+')');
+ $li.attr('class','no-display');
+ }
+ //if there are more results we're not showing, so say so.
+/* if (gMatches.length > ROW_COUNT) {
+ li = list.rows[ROW_COUNT];
+ li.className = "show-item";
+ c1 = li.cells[0];
+ c1.innerHTML = "plus " + (gMatches.length-ROW_COUNT) + " more";
+ } else {
+ list.rows[ROW_COUNT].className = "hide-item";
+ }*/
+ //if we have no results, hide the table
+ } else {
+ $('#search_filtered_div').addClass('no-display');
+ }
+}
+
+function search_changed(e, kd, toroot)
+{
+ var search = document.getElementById("search_autocomplete");
+ var text = search.value.replace(/(^ +)|( +$)/g, '');
+
+ // show/hide the close button
+ if (text != '') {
+ $(".search .close").removeClass("hide");
+ } else {
+ $(".search .close").addClass("hide");
+ }
+
+ // 13 = enter
+ if (e.keyCode == 13) {
+ $('#search_filtered_div').addClass('no-display');
+ if (!$('#search_filtered_div').hasClass('no-display') || (gSelectedIndex < 0)) {
+ if ($("#searchResults").is(":hidden")) {
+ // if results aren't showing, return true to allow search to execute
+ return true;
+ } else {
+ // otherwise, results are already showing, so allow ajax to auto refresh the results
+ // and ignore this Enter press to avoid the reload.
+ return false;
+ }
+ } else if (kd && gSelectedIndex >= 0) {
+ window.location = toroot + gMatches[gSelectedIndex].link;
+ return false;
+ }
+ }
+ // 38 -- arrow up
+ else if (kd && (e.keyCode == 38)) {
+ if (gSelectedIndex >= 0) {
+ $('#search_filtered li').removeClass('jd-selected');
+ gSelectedIndex--;
+ $('#search_filtered li:nth-child('+(gSelectedIndex+1)+')').addClass('jd-selected');
+ }
+ return false;
+ }
+ // 40 -- arrow down
+ else if (kd && (e.keyCode == 40)) {
+ if (gSelectedIndex < gMatches.length-1
+ && gSelectedIndex < ROW_COUNT-1) {
+ $('#search_filtered li').removeClass('jd-selected');
+ gSelectedIndex++;
+ $('#search_filtered li:nth-child('+(gSelectedIndex+1)+')').addClass('jd-selected');
+ }
+ return false;
+ }
+ else if (!kd && (e.keyCode != 40) && (e.keyCode != 38)) {
+ gMatches = new Array();
+ matchedCount = 0;
+ gSelectedIndex = -1;
+ for (var i=0; i<DATA.length; i++) {
+ var s = DATA[i];
+ if (text.length != 0 &&
+ s.label.toLowerCase().indexOf(text.toLowerCase()) != -1) {
+ gMatches[matchedCount] = s;
+ matchedCount++;
+ }
+ }
+ rank_autocomplete_results(text);
+ for (var i=0; i<gMatches.length; i++) {
+ var s = gMatches[i];
+ if (gSelectedID == s.id) {
+ gSelectedIndex = i;
+ }
+ }
+ highlight_autocomplete_result_labels(text);
+ sync_selection_table(toroot);
+ return true; // allow the event to bubble up to the search api
+ }
+}
+
+function rank_autocomplete_results(query) {
+ query = query || '';
+ if (!gMatches || !gMatches.length)
+ return;
+
+ // helper function that gets the last occurence index of the given regex
+ // in the given string, or -1 if not found
+ var _lastSearch = function(s, re) {
+ if (s == '')
+ return -1;
+ var l = -1;
+ var tmp;
+ while ((tmp = s.search(re)) >= 0) {
+ if (l < 0) l = 0;
+ l += tmp;
+ s = s.substr(tmp + 1);
+ }
+ return l;
+ };
+
+ // helper function that counts the occurrences of a given character in
+ // a given string
+ var _countChar = function(s, c) {
+ var n = 0;
+ for (var i=0; i<s.length; i++)
+ if (s.charAt(i) == c) ++n;
+ return n;
+ };
+
+ var queryLower = query.toLowerCase();
+ var queryAlnum = (queryLower.match(/\w+/) || [''])[0];
+ var partPrefixAlnumRE = new RegExp('\\b' + queryAlnum);
+ var partExactAlnumRE = new RegExp('\\b' + queryAlnum + '\\b');
+
+ var _resultScoreFn = function(result) {
+ // scores are calculated based on exact and prefix matches,
+ // and then number of path separators (dots) from the last
+ // match (i.e. favoring classes and deep package names)
+ var score = 1.0;
+ var labelLower = result.label.toLowerCase();
+ var t;
+ t = _lastSearch(labelLower, partExactAlnumRE);
+ if (t >= 0) {
+ // exact part match
+ var partsAfter = _countChar(labelLower.substr(t + 1), '.');
+ score *= 200 / (partsAfter + 1);
+ } else {
+ t = _lastSearch(labelLower, partPrefixAlnumRE);
+ if (t >= 0) {
+ // part prefix match
+ var partsAfter = _countChar(labelLower.substr(t + 1), '.');
+ score *= 20 / (partsAfter + 1);
+ }
+ }
+
+ return score;
+ };
+
+ for (var i=0; i<gMatches.length; i++) {
+ gMatches[i].__resultScore = _resultScoreFn(gMatches[i]);
+ }
+
+ gMatches.sort(function(a,b){
+ var n = b.__resultScore - a.__resultScore;
+ if (n == 0) // lexicographical sort if scores are the same
+ n = (a.label < b.label) ? -1 : 1;
+ return n;
+ });
+}
+
+function highlight_autocomplete_result_labels(query) {
+ query = query || '';
+ if (!gMatches || !gMatches.length)
+ return;
+
+ var queryLower = query.toLowerCase();
+ var queryAlnumDot = (queryLower.match(/[\w\.]+/) || [''])[0];
+ var queryRE = new RegExp(
+ '(' + queryAlnumDot.replace(/\./g, '\\.') + ')', 'ig');
+ for (var i=0; i<gMatches.length; i++) {
+ gMatches[i].__hilabel = gMatches[i].label.replace(
+ queryRE, '<b>$1</b>');
+ }
+}
+
+function search_focus_changed(obj, focused)
+{
+ if (!focused) {
+ if(obj.value == ""){
+ $(".search .close").addClass("hide");
+ }
+ document.getElementById("search_filtered_div").className = "no-display";
+ }
+}
+
+function submit_search() {
+ var query = document.getElementById('search_autocomplete').value;
+ location.hash = 'q=' + query;
+ loadSearchResults();
+ $("#searchResults").slideDown('slow');
+ return false;
+}
+
+
+function hideResults() {
+ $("#searchResults").slideUp();
+ $(".search .close").addClass("hide");
+ location.hash = '';
+
+ $("#search_autocomplete").val("").blur();
+
+ // reset the ajax search callback to nothing, so results don't appear unless ENTER
+ searchControl.setSearchStartingCallback(this, function(control, searcher, query) {});
+ return false;
+}
+
+
+
+/* ########################################################## */
+/* ################ CUSTOM SEARCH ENGINE ################## */
+/* ########################################################## */
+
+google.load('search', '1');
+var searchControl;
+
+function loadSearchResults() {
+ document.getElementById("search_autocomplete").style.color = "#000";
+
+ // create search control
+ searchControl = new google.search.SearchControl();
+
+ // use our existing search form and use tabs when multiple searchers are used
+ drawOptions = new google.search.DrawOptions();
+ drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);
+ drawOptions.setInput(document.getElementById("search_autocomplete"));
+
+ // configure search result options
+ searchOptions = new google.search.SearcherOptions();
+ searchOptions.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
+
+ // configure each of the searchers, for each tab
+ devSiteSearcher = new google.search.WebSearch();
+ devSiteSearcher.setUserDefinedLabel("All");
+ devSiteSearcher.setSiteRestriction("001482626316274216503:zu90b7s047u");
+
+ designSearcher = new google.search.WebSearch();
+ designSearcher.setUserDefinedLabel("Design");
+ designSearcher.setSiteRestriction("http://developer.android.com/design/");
+
+ trainingSearcher = new google.search.WebSearch();
+ trainingSearcher.setUserDefinedLabel("Training");
+ trainingSearcher.setSiteRestriction("http://developer.android.com/training/");
+
+ guidesSearcher = new google.search.WebSearch();
+ guidesSearcher.setUserDefinedLabel("Guides");
+ guidesSearcher.setSiteRestriction("http://developer.android.com/guide/");
+
+ referenceSearcher = new google.search.WebSearch();
+ referenceSearcher.setUserDefinedLabel("Reference");
+ referenceSearcher.setSiteRestriction("http://developer.android.com/reference/");
+
+ googleSearcher = new google.search.WebSearch();
+ googleSearcher.setUserDefinedLabel("Google Services");
+ googleSearcher.setSiteRestriction("http://developer.android.com/google/");
+
+ blogSearcher = new google.search.WebSearch();
+ blogSearcher.setUserDefinedLabel("Blog");
+ blogSearcher.setSiteRestriction("http://android-developers.blogspot.com");
+
+ // add each searcher to the search control
+ searchControl.addSearcher(devSiteSearcher, searchOptions);
+ searchControl.addSearcher(designSearcher, searchOptions);
+ searchControl.addSearcher(trainingSearcher, searchOptions);
+ searchControl.addSearcher(guidesSearcher, searchOptions);
+ searchControl.addSearcher(referenceSearcher, searchOptions);
+ searchControl.addSearcher(googleSearcher, searchOptions);
+ searchControl.addSearcher(blogSearcher, searchOptions);
+
+ // configure result options
+ searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
+ searchControl.setLinkTarget(google.search.Search.LINK_TARGET_SELF);
+ searchControl.setTimeoutInterval(google.search.SearchControl.TIMEOUT_SHORT);
+ searchControl.setNoResultsString(google.search.SearchControl.NO_RESULTS_DEFAULT_STRING);
+
+ // upon ajax search, refresh the url and search title
+ searchControl.setSearchStartingCallback(this, function(control, searcher, query) {
+ updateResultTitle(query);
+ var query = document.getElementById('search_autocomplete').value;
+ location.hash = 'q=' + query;
+ });
+
+ // draw the search results box
+ searchControl.draw(document.getElementById("leftSearchControl"), drawOptions);
+
+ // get query and execute the search
+ searchControl.execute(decodeURI(getQuery(location.hash)));
+
+ document.getElementById("search_autocomplete").focus();
+ addTabListeners();
+}
+// End of loadSearchResults
+
+
+google.setOnLoadCallback(function(){
+ if (location.hash.indexOf("q=") == -1) {
+ // if there's no query in the url, don't search and make sure results are hidden
+ $('#searchResults').hide();
+ return;
+ } else {
+ // first time loading search results for this page
+ $('#searchResults').slideDown('slow');
+ $(".search .close").removeClass("hide");
+ loadSearchResults();
+ }
+}, true);
+
+// when an event on the browser history occurs (back, forward, load) requery hash and do search
+$(window).hashchange( function(){
+ // Exit if the hash isn't a search query or there's an error in the query
+ if ((location.hash.indexOf("q=") == -1) || (query == "undefined")) {
+ // If the results pane is open, close it.
+ if (!$("#searchResults").is(":hidden")) {
+ hideResults();
+ }
+ return;
+ }
+
+ // Otherwise, we have a search to do
+ var query = decodeURI(getQuery(location.hash));
+ searchControl.execute(query);
+ $('#searchResults').slideDown('slow');
+ $("#search_autocomplete").focus();
+ $(".search .close").removeClass("hide");
+
+ updateResultTitle(query);
+});
+
+function updateResultTitle(query) {
+ $("#searchTitle").html("Results for <em>" + escapeHTML(query) + "</em>");
+}
+
+// forcefully regain key-up event control (previously jacked by search api)
+$("#search_autocomplete").keyup(function(event) {
+ return search_changed(event, false, toRoot);
+});
+
+// add event listeners to each tab so we can track the browser history
+function addTabListeners() {
+ var tabHeaders = $(".gsc-tabHeader");
+ for (var i = 0; i < tabHeaders.length; i++) {
+ $(tabHeaders[i]).attr("id",i).click(function() {
+ /*
+ // make a copy of the page numbers for the search left pane
+ setTimeout(function() {
+ // remove any residual page numbers
+ $('#searchResults .gsc-tabsArea .gsc-cursor-box.gs-bidi-start-align').remove();
+ // move the page numbers to the left position; make a clone,
+ // because the element is drawn to the DOM only once
+ // and because we're going to remove it (previous line),
+ // we need it to be available to move again as the user navigates
+ $('#searchResults .gsc-webResult .gsc-cursor-box.gs-bidi-start-align:visible')
+ .clone().appendTo('#searchResults .gsc-tabsArea');
+ }, 200);
+ */
+ });
+ }
+ setTimeout(function(){$(tabHeaders[0]).click()},200);
+}
+
+
+function getQuery(hash) {
+ var queryParts = hash.split('=');
+ return queryParts[1];
+}
+
+/* returns the given string with all HTML brackets converted to entities
+ TODO: move this to the site's JS library */
+function escapeHTML(string) {
+ return string.replace(/</g,"&lt;")
+ .replace(/>/g,"&gt;");
+}
+
+
+
+
+
+
+
+/* ######################################################## */
+/* ################# JAVADOC REFERENCE ################### */
+/* ######################################################## */
+
+/* Initialize some droiddoc stuff, but only if we're in the reference */
+if (location.pathname.indexOf("/reference")) {
+ if(!location.pathname.indexOf("/reference-gms/packages.html")
+ && !location.pathname.indexOf("/reference-gcm/packages.html")
+ && !location.pathname.indexOf("/reference/com/google") == 0) {
+ $(document).ready(function() {
+ // init available apis based on user pref
+ changeApiLevel();
+ initSidenavHeightResize()
+ });
+ }
+}
+
+var API_LEVEL_COOKIE = "api_level";
+var minLevel = 1;
+var maxLevel = 1;
+
+/******* SIDENAV DIMENSIONS ************/
+
+ function initSidenavHeightResize() {
+ // Change the drag bar size to nicely fit the scrollbar positions
+ var $dragBar = $(".ui-resizable-s");
+ $dragBar.css({'width': $dragBar.parent().width() - 5 + "px"});
+
+ $( "#resize-packages-nav" ).resizable({
+ containment: "#nav-panels",
+ handles: "s",
+ alsoResize: "#packages-nav",
+ resize: function(event, ui) { resizeNav(); }, /* resize the nav while dragging */
+ stop: function(event, ui) { saveNavPanels(); } /* once stopped, save the sizes to cookie */
+ });
+
+ }
+
+function updateSidenavFixedWidth() {
+ if (!navBarIsFixed) return;
+ $('#devdoc-nav').css({
+ 'width' : $('#side-nav').css('width'),
+ 'margin' : $('#side-nav').css('margin')
+ });
+ $('#devdoc-nav a.totop').css({'display':'block','width':$("#nav").innerWidth()+'px'});
+
+ initSidenavHeightResize();
+}
+
+function updateSidenavFullscreenWidth() {
+ if (!navBarIsFixed) return;
+ $('#devdoc-nav').css({
+ 'width' : $('#side-nav').css('width'),
+ 'margin' : $('#side-nav').css('margin')
+ });
+ $('#devdoc-nav .totop').css({'left': 'inherit'});
+
+ initSidenavHeightResize();
+}
+
+function buildApiLevelSelector() {
+ maxLevel = SINCE_DATA.length;
+ var userApiLevel = parseInt(readCookie(API_LEVEL_COOKIE));
+ userApiLevel = userApiLevel == 0 ? maxLevel : userApiLevel; // If there's no cookie (zero), use the max by default
+
+ minLevel = parseInt($("#doc-api-level").attr("class"));
+ // Handle provisional api levels; the provisional level will always be the highest possible level
+ // Provisional api levels will also have a length; other stuff that's just missing a level won't,
+ // so leave those kinds of entities at the default level of 1 (for example, the R.styleable class)
+ if (isNaN(minLevel) && minLevel.length) {
+ minLevel = maxLevel;
+ }
+ var select = $("#apiLevelSelector").html("").change(changeApiLevel);
+ for (var i = maxLevel-1; i >= 0; i--) {
+ var option = $("<option />").attr("value",""+SINCE_DATA[i]).append(""+SINCE_DATA[i]);
+ // if (SINCE_DATA[i] < minLevel) option.addClass("absent"); // always false for strings (codenames)
+ select.append(option);
+ }
+
+ // get the DOM element and use setAttribute cuz IE6 fails when using jquery .attr('selected',true)
+ var selectedLevelItem = $("#apiLevelSelector option[value='"+userApiLevel+"']").get(0);
+ selectedLevelItem.setAttribute('selected',true);
+}
+
+function changeApiLevel() {
+ maxLevel = SINCE_DATA.length;
+ var selectedLevel = maxLevel;
+
+ selectedLevel = parseInt($("#apiLevelSelector option:selected").val());
+ toggleVisisbleApis(selectedLevel, "body");
+
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
+ var expiration = date.toGMTString();
+ writeCookie(API_LEVEL_COOKIE, selectedLevel, null, expiration);
+
+ if (selectedLevel < minLevel) {
+ var thing = ($("#jd-header").html().indexOf("package") != -1) ? "package" : "class";
+ $("#naMessage").show().html("<div><p><strong>This " + thing
+ + " requires API level " + minLevel + " or higher.</strong></p>"
+ + "<p>This document is hidden because your selected API level for the documentation is "
+ + selectedLevel + ". You can change the documentation API level with the selector "
+ + "above the left navigation.</p>"
+ + "<p>For more information about specifying the API level your app requires, "
+ + "read <a href='" + toRoot + "training/basics/supporting-devices/platforms.html'"
+ + ">Supporting Different Platform Versions</a>.</p>"
+ + "<input type='button' value='OK, make this page visible' "
+ + "title='Change the API level to " + minLevel + "' "
+ + "onclick='$(\"#apiLevelSelector\").val(\"" + minLevel + "\");changeApiLevel();' />"
+ + "</div>");
+ } else {
+ $("#naMessage").hide();
+ }
+}
+
+function toggleVisisbleApis(selectedLevel, context) {
+ var apis = $(".api",context);
+ apis.each(function(i) {
+ var obj = $(this);
+ var className = obj.attr("class");
+ var apiLevelIndex = className.lastIndexOf("-")+1;
+ var apiLevelEndIndex = className.indexOf(" ", apiLevelIndex);
+ apiLevelEndIndex = apiLevelEndIndex != -1 ? apiLevelEndIndex : className.length;
+ var apiLevel = className.substring(apiLevelIndex, apiLevelEndIndex);
+ if (apiLevel.length == 0) { // for odd cases when the since data is actually missing, just bail
+ return;
+ }
+ apiLevel = parseInt(apiLevel);
+
+ // Handle provisional api levels; if this item's level is the provisional one, set it to the max
+ var selectedLevelNum = parseInt(selectedLevel)
+ var apiLevelNum = parseInt(apiLevel);
+ if (isNaN(apiLevelNum)) {
+ apiLevelNum = maxLevel;
+ }
+
+ // Grey things out that aren't available and give a tooltip title
+ if (apiLevelNum > selectedLevelNum) {
+ obj.addClass("absent").attr("title","Requires API Level \""
+ + apiLevel + "\" or higher");
+ }
+ else obj.removeClass("absent").removeAttr("title");
+ });
+}
+
+
+
+
+/* ################# SIDENAV TREE VIEW ################### */
+
+function new_node(me, mom, text, link, children_data, api_level)
+{
+ var node = new Object();
+ node.children = Array();
+ node.children_data = children_data;
+ node.depth = mom.depth + 1;
+
+ node.li = document.createElement("li");
+ mom.get_children_ul().appendChild(node.li);
+
+ node.label_div = document.createElement("div");
+ node.label_div.className = "label";
+ if (api_level != null) {
+ $(node.label_div).addClass("api");
+ $(node.label_div).addClass("api-level-"+api_level);
+ }
+ node.li.appendChild(node.label_div);
+
+ if (children_data != null) {
+ node.expand_toggle = document.createElement("a");
+ node.expand_toggle.href = "javascript:void(0)";
+ node.expand_toggle.onclick = function() {
+ if (node.expanded) {
+ $(node.get_children_ul()).slideUp("fast");
+ node.plus_img.src = me.toroot + "assets/images/triangle-closed-small.png";
+ node.expanded = false;
+ } else {
+ expand_node(me, node);
+ }
+ };
+ node.label_div.appendChild(node.expand_toggle);
+
+ node.plus_img = document.createElement("img");
+ node.plus_img.src = me.toroot + "assets/images/triangle-closed-small.png";
+ node.plus_img.className = "plus";
+ node.plus_img.width = "8";
+ node.plus_img.border = "0";
+ node.expand_toggle.appendChild(node.plus_img);
+
+ node.expanded = false;
+ }
+
+ var a = document.createElement("a");
+ node.label_div.appendChild(a);
+ node.label = document.createTextNode(text);
+ a.appendChild(node.label);
+ if (link) {
+ a.href = me.toroot + link;
+ } else {
+ if (children_data != null) {
+ a.className = "nolink";
+ a.href = "javascript:void(0)";
+ a.onclick = node.expand_toggle.onclick;
+ // This next line shouldn't be necessary. I'll buy a beer for the first
+ // person who figures out how to remove this line and have the link
+ // toggle shut on the first try. --joeo@android.com
+ node.expanded = false;
+ }
+ }
+
+
+ node.children_ul = null;
+ node.get_children_ul = function() {
+ if (!node.children_ul) {
+ node.children_ul = document.createElement("ul");
+ node.children_ul.className = "children_ul";
+ node.children_ul.style.display = "none";
+ node.li.appendChild(node.children_ul);
+ }
+ return node.children_ul;
+ };
+
+ return node;
+}
+
+
+
+
+function expand_node(me, node)
+{
+ if (node.children_data && !node.expanded) {
+ if (node.children_visited) {
+ $(node.get_children_ul()).slideDown("fast");
+ } else {
+ get_node(me, node);
+ if ($(node.label_div).hasClass("absent")) {
+ $(node.get_children_ul()).addClass("absent");
+ }
+ $(node.get_children_ul()).slideDown("fast");
+ }
+ node.plus_img.src = me.toroot + "assets/images/triangle-opened-small.png";
+ node.expanded = true;
+
+ // perform api level toggling because new nodes are new to the DOM
+ var selectedLevel = $("#apiLevelSelector option:selected").val();
+ toggleVisisbleApis(selectedLevel, "#side-nav");
+ }
+}
+
+function get_node(me, mom)
+{
+ mom.children_visited = true;
+ for (var i in mom.children_data) {
+ var node_data = mom.children_data[i];
+ mom.children[i] = new_node(me, mom, node_data[0], node_data[1],
+ node_data[2], node_data[3]);
+ }
+}
+
+function this_page_relative(toroot)
+{
+ var full = document.location.pathname;
+ var file = "";
+ if (toroot.substr(0, 1) == "/") {
+ if (full.substr(0, toroot.length) == toroot) {
+ return full.substr(toroot.length);
+ } else {
+ // the file isn't under toroot. Fail.
+ return null;
+ }
+ } else {
+ if (toroot != "./") {
+ toroot = "./" + toroot;
+ }
+ do {
+ if (toroot.substr(toroot.length-3, 3) == "../" || toroot == "./") {
+ var pos = full.lastIndexOf("/");
+ file = full.substr(pos) + file;
+ full = full.substr(0, pos);
+ toroot = toroot.substr(0, toroot.length-3);
+ }
+ } while (toroot != "" && toroot != "/");
+ return file.substr(1);
+ }
+}
+
+function find_page(url, data)
+{
+ var nodes = data;
+ var result = null;
+ for (var i in nodes) {
+ var d = nodes[i];
+ if (d[1] == url) {
+ return new Array(i);
+ }
+ else if (d[2] != null) {
+ result = find_page(url, d[2]);
+ if (result != null) {
+ return (new Array(i).concat(result));
+ }
+ }
+ }
+ return null;
+}
+
+function init_default_navtree(toroot) {
+ init_navtree("tree-list", toroot, NAVTREE_DATA);
+
+ // perform api level toggling because because the whole tree is new to the DOM
+ var selectedLevel = $("#apiLevelSelector option:selected").val();
+ toggleVisisbleApis(selectedLevel, "#side-nav");
+}
+
+function init_navtree(navtree_id, toroot, root_nodes)
+{
+ var me = new Object();
+ me.toroot = toroot;
+ me.node = new Object();
+
+ me.node.li = document.getElementById(navtree_id);
+ me.node.children_data = root_nodes;
+ me.node.children = new Array();
+ me.node.children_ul = document.createElement("ul");
+ me.node.get_children_ul = function() { return me.node.children_ul; };
+ //me.node.children_ul.className = "children_ul";
+ me.node.li.appendChild(me.node.children_ul);
+ me.node.depth = 0;
+
+ get_node(me, me.node);
+
+ me.this_page = this_page_relative(toroot);
+ me.breadcrumbs = find_page(me.this_page, root_nodes);
+ if (me.breadcrumbs != null && me.breadcrumbs.length != 0) {
+ var mom = me.node;
+ for (var i in me.breadcrumbs) {
+ var j = me.breadcrumbs[i];
+ mom = mom.children[j];
+ expand_node(me, mom);
+ }
+ mom.label_div.className = mom.label_div.className + " selected";
+ addLoadEvent(function() {
+ scrollIntoView("nav-tree");
+ });
+ }
+}
+
+/* TODO: eliminate redundancy with non-google functions */
+function init_google_navtree(navtree_id, toroot, root_nodes)
+{
+ var me = new Object();
+ me.toroot = toroot;
+ me.node = new Object();
+
+ me.node.li = document.getElementById(navtree_id);
+ me.node.children_data = root_nodes;
+ me.node.children = new Array();
+ me.node.children_ul = document.createElement("ul");
+ me.node.get_children_ul = function() { return me.node.children_ul; };
+ //me.node.children_ul.className = "children_ul";
+ me.node.li.appendChild(me.node.children_ul);
+ me.node.depth = 0;
+
+ get_google_node(me, me.node);
+
+}
+
+function new_google_node(me, mom, text, link, children_data, api_level)
+{
+ var node = new Object();
+ var child;
+ node.children = Array();
+ node.children_data = children_data;
+ node.depth = mom.depth + 1;
+ node.get_children_ul = function() {
+ if (!node.children_ul) {
+ node.children_ul = document.createElement("ul");
+ node.children_ul.className = "tree-list-children";
+ node.li.appendChild(node.children_ul);
+ }
+ return node.children_ul;
+ };
+ node.li = document.createElement("li");
+
+ mom.get_children_ul().appendChild(node.li);
+
+
+ if(link) {
+ child = document.createElement("a");
+
+ }
+ else {
+ child = document.createElement("span");
+ child.className = "tree-list-subtitle";
+
+ }
+ if (children_data != null) {
+ node.li.className="nav-section";
+ node.label_div = document.createElement("div");
+ node.label_div.className = "nav-section-header-ref";
+ node.li.appendChild(node.label_div);
+ get_google_node(me, node);
+ node.label_div.appendChild(child);
+ }
+ else {
+ node.li.appendChild(child);
+ }
+ if(link) {
+ child.href = me.toroot + link;
+ }
+ node.label = document.createTextNode(text);
+ child.appendChild(node.label);
+
+ node.children_ul = null;
+
+ return node;
+}
+
+function get_google_node(me, mom)
+{
+ mom.children_visited = true;
+ var linkText;
+ for (var i in mom.children_data) {
+ var node_data = mom.children_data[i];
+ linkText = node_data[0];
+
+ if(linkText.match("^"+"com.google.android")=="com.google.android"){
+ linkText = linkText.substr(19, linkText.length);
+ }
+ mom.children[i] = new_google_node(me, mom, linkText, node_data[1],
+ node_data[2], node_data[3]);
+ }
+}
+function showGoogleRefTree() {
+ init_default_google_navtree(toRoot);
+ init_default_gcm_navtree(toRoot);
+ resizeNav();
+}
+
+function init_default_google_navtree(toroot) {
+ init_google_navtree("gms-tree-list", toroot, GMS_NAVTREE_DATA);
+}
+
+function init_default_gcm_navtree(toroot) {
+ init_google_navtree("gcm-tree-list", toroot, GCM_NAVTREE_DATA);
+}
+
+/* TOGGLE INHERITED MEMBERS */
+
+/* Toggle an inherited class (arrow toggle)
+ * @param linkObj The link that was clicked.
+ * @param expand 'true' to ensure it's expanded. 'false' to ensure it's closed.
+ * 'null' to simply toggle.
+ */
+function toggleInherited(linkObj, expand) {
+ var base = linkObj.getAttribute("id");
+ var list = document.getElementById(base + "-list");
+ var summary = document.getElementById(base + "-summary");
+ var trigger = document.getElementById(base + "-trigger");
+ var a = $(linkObj);
+ if ( (expand == null && a.hasClass("closed")) || expand ) {
+ list.style.display = "none";
+ summary.style.display = "block";
+ trigger.src = toRoot + "assets/images/triangle-opened.png";
+ a.removeClass("closed");
+ a.addClass("opened");
+ } else if ( (expand == null && a.hasClass("opened")) || (expand == false) ) {
+ list.style.display = "block";
+ summary.style.display = "none";
+ trigger.src = toRoot + "assets/images/triangle-closed.png";
+ a.removeClass("opened");
+ a.addClass("closed");
+ }
+ return false;
+}
+
+/* Toggle all inherited classes in a single table (e.g. all inherited methods)
+ * @param linkObj The link that was clicked.
+ * @param expand 'true' to ensure it's expanded. 'false' to ensure it's closed.
+ * 'null' to simply toggle.
+ */
+function toggleAllInherited(linkObj, expand) {
+ var a = $(linkObj);
+ var table = $(a.parent().parent().parent()); // ugly way to get table/tbody
+ var expandos = $(".jd-expando-trigger", table);
+ if ( (expand == null && a.text() == "[Expand]") || expand ) {
+ expandos.each(function(i) {
+ toggleInherited(this, true);
+ });
+ a.text("[Collapse]");
+ } else if ( (expand == null && a.text() == "[Collapse]") || (expand == false) ) {
+ expandos.each(function(i) {
+ toggleInherited(this, false);
+ });
+ a.text("[Expand]");
+ }
+ return false;
+}
+
+/* Toggle all inherited members in the class (link in the class title)
+ */
+function toggleAllClassInherited() {
+ var a = $("#toggleAllClassInherited"); // get toggle link from class title
+ var toggles = $(".toggle-all", $("#body-content"));
+ if (a.text() == "[Expand All]") {
+ toggles.each(function(i) {
+ toggleAllInherited(this, true);
+ });
+ a.text("[Collapse All]");
+ } else {
+ toggles.each(function(i) {
+ toggleAllInherited(this, false);
+ });
+ a.text("[Expand All]");
+ }
+ return false;
+}
+
+/* Expand all inherited members in the class. Used when initiating page search */
+function ensureAllInheritedExpanded() {
+ var toggles = $(".toggle-all", $("#body-content"));
+ toggles.each(function(i) {
+ toggleAllInherited(this, true);
+ });
+ $("#toggleAllClassInherited").text("[Collapse All]");
+}
+
+
+/* HANDLE KEY EVENTS
+ * - Listen for Ctrl+F (Cmd on Mac) and expand all inherited members (to aid page search)
+ */
+var agent = navigator['userAgent'].toLowerCase();
+var mac = agent.indexOf("macintosh") != -1;
+
+$(document).keydown( function(e) {
+var control = mac ? e.metaKey && !e.ctrlKey : e.ctrlKey; // get ctrl key
+ if (control && e.which == 70) { // 70 is "F"
+ ensureAllInheritedExpanded();
+ }
+});
diff --git a/tools/droiddoc/templates-sdk/assets/js/global-libraries-combined.js b/tools/droiddoc/templates-ds/assets/js/global-libraries-combined.js
index 37bd1c2..37bd1c2 100644
--- a/tools/droiddoc/templates-sdk/assets/js/global-libraries-combined.js
+++ b/tools/droiddoc/templates-ds/assets/js/global-libraries-combined.js
diff --git a/tools/droiddoc/templates-sdk/assets/js/grid/960.gridder.css b/tools/droiddoc/templates-ds/assets/js/grid/960.gridder.css
index b1a986f..b1a986f 100755
--- a/tools/droiddoc/templates-sdk/assets/js/grid/960.gridder.css
+++ b/tools/droiddoc/templates-ds/assets/js/grid/960.gridder.css
diff --git a/tools/droiddoc/templates-sdk/assets/js/grid/960.gridder.js b/tools/droiddoc/templates-ds/assets/js/grid/960.gridder.js
index 67b1322..67b1322 100755
--- a/tools/droiddoc/templates-sdk/assets/js/grid/960.gridder.js
+++ b/tools/droiddoc/templates-ds/assets/js/grid/960.gridder.js
diff --git a/tools/droiddoc/templates-ds/assets/js/prettify.js b/tools/droiddoc/templates-ds/assets/js/prettify.js
new file mode 100644
index 0000000..eef5ad7
--- /dev/null
+++ b/tools/droiddoc/templates-ds/assets/js/prettify.js
@@ -0,0 +1,28 @@
+var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
+(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
+[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
+f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
+(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
+{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
+t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
+"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
+l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
+q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
+q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
+"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
+a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
+for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
+m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
+a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
+j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
+"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
+H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
+J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
+I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
+["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
+/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
+["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
+hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
+!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
+250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
+PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
diff --git a/tools/droiddoc/templates-sdk/assets/scroller/jquery.jscrollpane.min.js b/tools/droiddoc/templates-ds/assets/scroller/jquery.jscrollpane.min.js
index ad145f8..ad145f8 100644
--- a/tools/droiddoc/templates-sdk/assets/scroller/jquery.jscrollpane.min.js
+++ b/tools/droiddoc/templates-ds/assets/scroller/jquery.jscrollpane.min.js
diff --git a/tools/droiddoc/templates-sdk/assets/scroller/jquery.mousewheel.min.js b/tools/droiddoc/templates-ds/assets/scroller/jquery.mousewheel.min.js
index 3390202..3390202 100644
--- a/tools/droiddoc/templates-sdk/assets/scroller/jquery.mousewheel.min.js
+++ b/tools/droiddoc/templates-ds/assets/scroller/jquery.mousewheel.min.js
diff --git a/tools/droiddoc/templates-sdk/assets/triangle-none.gif b/tools/droiddoc/templates-ds/assets/triangle-none.gif
index 0c7b469..0c7b469 100644
--- a/tools/droiddoc/templates-sdk/assets/triangle-none.gif
+++ b/tools/droiddoc/templates-ds/assets/triangle-none.gif
Binary files differ
diff --git a/tools/droiddoc/templates-ds/class.cs b/tools/droiddoc/templates-ds/class.cs
new file mode 100644
index 0000000..23e57ab
--- /dev/null
+++ b/tools/droiddoc/templates-ds/class.cs
@@ -0,0 +1,654 @@
+<?cs include:"doctype.cs" ?>
+<?cs include:"macros.cs" ?>
+<html devsite>
+<?cs include:"head_tag.cs" ?>
+<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
+ <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ elif:design ?>design<?cs
+ elif:distribute ?>distribute<?cs
+ /if ?>" itemscope itemtype="http://schema.org/Article">
+ <div id="doc-api-level" class="<?cs var:class.since ?>" style="display:none"></div>
+ <a name="top"></a>
+<?cs include:"header.cs" ?>
+
+<div class="col-12" id="doc-col">
+
+<div id="api-info-block">
+
+<?cs # are there inherited members ?>
+<?cs each:cl=class.inherited ?>
+ <?cs if:subcount(cl.methods) ?>
+ <?cs set:inhmethods = #1 ?>
+ <?cs /if ?>
+ <?cs if:subcount(cl.constants) ?>
+ <?cs set:inhconstants = #1 ?>
+ <?cs /if ?>
+ <?cs if:subcount(cl.fields) ?>
+ <?cs set:inhfields = #1 ?>
+ <?cs /if ?>
+ <?cs if:subcount(cl.attrs) ?>
+ <?cs set:inhattrs = #1 ?>
+ <?cs /if ?>
+<?cs /each ?>
+
+<div class="sum-details-links">
+<?cs if:inhattrs || inhconstants || inhfields || inhmethods || (!class.subclasses.hidden &&
+ (subcount(class.subclasses.direct) || subcount(class.subclasses.indirect))) ?>
+Summary:
+<?cs if:subcount(class.inners) ?>
+ <a href="#nestedclasses">Nested Classes</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:subcount(class.attrs) ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#lattrs">XML Attrs</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:inhattrs ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#inhattrs">Inherited XML Attrs</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:subcount(class.enumConstants) ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#enumconstants">Enums</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:subcount(class.constants) ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#constants">Constants</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:inhconstants ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#inhconstants">Inherited Constants</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:subcount(class.fields) ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#lfields">Fields</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:inhfields ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#inhfields">Inherited Fields</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:subcount(class.ctors.public) ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#pubctors">Ctors</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:subcount(class.ctors.protected) ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#proctors">Protected Ctors</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:subcount(class.methods.public) ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#pubmethods">Methods</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:subcount(class.methods.protected) ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#promethods">Protected Methods</a>
+ <?cs set:linkcount = #1 ?>
+<?cs /if ?>
+<?cs if:inhmethods ?>
+ <?cs if:linkcount ?>&#124; <?cs /if ?><a href="#inhmethods">Inherited Methods</a>
+<?cs /if ?>
+&#124; <a href="#" onclick="return toggleAllClassInherited()" id="toggleAllClassInherited">[Expand All]</a>
+<?cs /if ?>
+</div><!-- end sum-details-links -->
+<div class="api-level">
+ <?cs call:since_tags(class) ?><?cs
+ if:class.deprecatedsince
+ ?><br>Deprecated since <a href="<?cs var:toroot ?>guide/topics/manifest/uses-sdk-element.html#ApiLevels"
+ >API level <?cs var:class.deprecatedsince ?></a><?cs
+ /if ?>
+ <?cs call:federated_refs(class) ?>
+</div>
+</div><!-- end api-info-block -->
+
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ======== START OF CLASS DATA ======== -->
+
+<div id="jd-header">
+ <?cs var:class.scope ?>
+ <?cs var:class.static ?>
+ <?cs var:class.final ?>
+ <?cs var:class.abstract ?>
+ <?cs var:class.kind ?>
+<h1 itemprop="name"><?cs var:class.name ?></h1>
+
+<?cs set:colspan = subcount(class.inheritance) ?>
+<?cs each:supr = class.inheritance ?>
+ <?cs if:colspan == 2 ?>
+ extends <?cs call:type_link(supr.short_class) ?><br/>
+ <?cs /if ?>
+ <?cs if:last(supr) && subcount(supr.interfaces) ?>
+ implements
+ <?cs each:t=supr.interfaces ?>
+ <?cs call:type_link(t) ?>
+ <?cs /each ?>
+ <?cs /if ?>
+ <?cs set:colspan = colspan-1 ?>
+<?cs /each ?>
+
+</div><!-- end header -->
+
+<div id="naMessage"></div>
+
+<div id="jd-content" class="api apilevel-<?cs var:class.since ?>">
+<table class="jd-inheritance-table">
+<?cs set:colspan = subcount(class.inheritance) ?>
+<?cs each:supr = class.inheritance ?>
+ <tr>
+ <?cs loop:i = 1, (subcount(class.inheritance)-colspan), 1 ?>
+ <td class="jd-inheritance-space">&nbsp;<?cs if:(subcount(class.inheritance)-colspan) == i ?>&nbsp;&nbsp;&#x21b3;<?cs /if ?></td>
+ <?cs /loop ?>
+ <td colspan="<?cs var:colspan ?>" class="jd-inheritance-class-cell"><?cs
+ if:colspan == 1
+ ?><?cs call:class_name(class.qualifiedType) ?><?cs
+ else
+ ?><?cs call:type_link(supr.class) ?><?cs
+ /if ?></td>
+ </tr>
+ <?cs set:colspan = colspan-1 ?>
+<?cs /each ?>
+</table>
+
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+
+<?cs if:subcount(class.subclasses.direct) && !class.subclasses.hidden ?>
+<table class="jd-sumtable jd-sumtable-subclasses"><tr><td colspan="12" style="border:none;margin:0;padding:0;">
+<?cs call:expando_trigger("subclasses-direct", "closed") ?>Known Direct Subclasses
+<?cs call:expandable_class_list("subclasses-direct", class.subclasses.direct, "list") ?>
+</td></tr></table>
+<?cs /if ?>
+
+<?cs if:subcount(class.subclasses.indirect) && !class.subclasses.hidden ?>
+<table class="jd-sumtable jd-sumtable-subclasses"><tr><td colspan="12" style="border:none;margin:0;padding:0;">
+<?cs call:expando_trigger("subclasses-indirect", "closed") ?>Known Indirect Subclasses
+<?cs call:expandable_class_list("subclasses-indirect", class.subclasses.indirect, "list") ?>
+</td></tr></table>
+<?cs /if ?>
+
+<div class="jd-descr">
+<?cs call:deprecated_warning(class) ?>
+<?cs if:subcount(class.descr) ?>
+<h2>Class Overview</h2>
+<p itemprop="articleBody"><?cs call:tag_list(class.descr) ?></p>
+<?cs /if ?>
+
+<?cs call:see_also_tags(class.seeAlso) ?>
+
+</div><!-- jd-descr -->
+
+
+<?cs # summary macros ?>
+
+<?cs def:write_method_summary(methods, included) ?>
+<?cs set:count = #1 ?>
+<?cs each:method = methods ?>
+ <?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:method.since ?>" >
+ <td class="jd-typecol"><nobr>
+ <?cs var:method.abstract ?>
+ <?cs var:method.synchronized ?>
+ <?cs var:method.final ?>
+ <?cs var:method.static ?>
+ <?cs call:type_link(method.generic) ?>
+ <?cs call:type_link(method.returnType) ?></nobr>
+ </td>
+ <td class="jd-linkcol" width="100%"><nobr>
+ <span class="sympad"><?cs call:cond_link(method.name, toroot, method.href, included) ?></span>(<?cs call:parameter_list(method.params) ?>)</nobr>
+ <?cs if:subcount(method.shortDescr) || subcount(method.deprecated) ?>
+ <div class="jd-descrdiv"><?cs call:short_descr(method) ?></div>
+ <?cs /if ?>
+ </td></tr>
+<?cs set:count = count + #1 ?>
+<?cs /each ?>
+<?cs /def ?>
+
+<?cs def:write_field_summary(fields, included) ?>
+<?cs set:count = #1 ?>
+ <?cs each:field=fields ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
+ <td class="jd-typecol"><nobr>
+ <?cs var:field.scope ?>
+ <?cs var:field.static ?>
+ <?cs var:field.final ?>
+ <?cs call:type_link(field.type) ?></nobr></td>
+ <td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, included) ?></td>
+ <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?></td>
+ </tr>
+ <?cs set:count = count + #1 ?>
+ <?cs /each ?>
+<?cs /def ?>
+
+<?cs def:write_constant_summary(fields, included) ?>
+<?cs set:count = #1 ?>
+ <?cs each:field=fields ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
+ <td class="jd-typecol"><?cs call:type_link(field.type) ?></td>
+ <td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, included) ?></td>
+ <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?></td>
+ </tr>
+ <?cs set:count = count + #1 ?>
+ <?cs /each ?>
+<?cs /def ?>
+
+<?cs def:write_attr_summary(attrs, included) ?>
+<?cs set:count = #1 ?>
+ <tr>
+ <td><nobr><em>Attribute Name</em></nobr></td>
+ <td><nobr><em>Related Method</em></nobr></td>
+ <td><nobr><em>Description</em></nobr></td>
+ </tr>
+ <?cs each:attr=attrs ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:attr.since ?>" >
+ <td class="jd-linkcol"><?cs if:included ?><a href="<?cs var:toroot ?><?cs var:attr.href ?>"><?cs /if ?><?cs var:attr.name ?><?cs if:included ?></a><?cs /if ?></td>
+ <td class="jd-linkcol"><?cs each:m=attr.methods ?>
+ <?cs call:cond_link(m.name, toroot, m.href, included) ?>
+ <?cs /each ?>
+ </td>
+ <td class="jd-descrcol" width="100%"><?cs call:short_descr(attr) ?>&nbsp;</td>
+ </tr>
+ <?cs set:count = count + #1 ?>
+ <?cs /each ?>
+<?cs /def ?>
+
+<?cs def:write_inners_summary(classes) ?>
+<?cs set:count = #1 ?>
+ <?cs each:cl=class.inners ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.since ?>" >
+ <td class="jd-typecol"><nobr>
+ <?cs var:cl.scope ?>
+ <?cs var:cl.static ?>
+ <?cs var:cl.final ?>
+ <?cs var:cl.abstract ?>
+ <?cs var:cl.kind ?></nobr></td>
+ <td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
+ <td class="jd-descrcol" width="100%"><?cs call:short_descr(cl) ?>&nbsp;</td>
+ </tr>
+ <?cs set:count = count + #1 ?>
+ <?cs /each ?>
+<?cs /def ?>
+
+<?cs # end macros ?>
+
+<div class="jd-descr">
+<?cs # make sure there's a summary view to display ?>
+<?cs if:subcount(class.inners)
+ || subcount(class.attrs)
+ || inhattrs
+ || subcount(class.enumConstants)
+ || subcount(class.constants)
+ || inhconstants
+ || subcount(class.fields)
+ || inhfields
+ || subcount(class.ctors.public)
+ || subcount(class.ctors.protected)
+ || subcount(class.methods.public)
+ || subcount(class.methods.protected)
+ || inhmethods ?>
+<h2>Summary</h2>
+
+<?cs if:subcount(class.inners) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<table id="nestedclasses" class="jd-sumtable"><tr><th colspan="12">Nested Classes</th></tr>
+<?cs call:write_inners_summary(class.inners) ?>
+<?cs /if ?>
+
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<?cs if:subcount(class.attrs) ?>
+<!-- =========== FIELD SUMMARY =========== -->
+<table id="lattrs" class="jd-sumtable"><tr><th colspan="12">XML Attributes</th></tr>
+<?cs call:write_attr_summary(class.attrs, 1) ?>
+<?cs /if ?>
+
+<?cs # if there are inherited attrs, write the table ?>
+<?cs if:inhattrs ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- =========== FIELD SUMMARY =========== -->
+<table id="inhattrs" class="jd-sumtable"><tr><th>
+ <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
+ <div style="clear:left;">Inherited XML Attributes</div></th></tr>
+<?cs each:cl=class.inherited ?>
+<?cs if:subcount(cl.attrs) ?>
+<tr class="api apilevel-<?cs var:cl.since ?>" >
+<td colspan="12">
+<?cs call:expando_trigger("inherited-attrs-"+cl.qualified, "closed") ?>From <?cs var:cl.kind ?>
+<?cs call:cond_link(cl.qualified, toroot, cl.link, cl.included) ?>
+<div id="inherited-attrs-<?cs var:cl.qualified ?>">
+ <div id="inherited-attrs-<?cs var:cl.qualified ?>-list"
+ class="jd-inheritedlinks">
+ </div>
+ <div id="inherited-attrs-<?cs var:cl.qualified ?>-summary" style="display: none;">
+ <table class="jd-sumtable-expando">
+ <?cs call:write_attr_summary(cl.attrs, cl.included) ?></table>
+ </div>
+</div>
+</td></tr>
+<?cs /if ?>
+<?cs /each ?>
+</table>
+<?cs /if ?>
+
+<?cs if:subcount(class.enumConstants) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<table id="enumconstants" class="jd-sumtable"><tr><th colspan="12">Enum Values</th></tr>
+<?cs set:count = #1 ?>
+ <?cs each:field=class.enumConstants ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
+ <td class="jd-descrcol"><?cs call:type_link(field.type) ?>&nbsp;</td>
+ <td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, cl.included) ?>&nbsp;</td>
+ <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?>&nbsp;</td>
+ </tr>
+ <?cs set:count = count + #1 ?>
+ <?cs /each ?>
+<?cs /if ?>
+
+<?cs if:subcount(class.constants) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<table id="constants" class="jd-sumtable"><tr><th colspan="12">Constants</th></tr>
+<?cs call:write_constant_summary(class.constants, 1) ?>
+</table>
+<?cs /if ?>
+
+<?cs # if there are inherited constants, write the table ?>
+<?cs if:inhconstants ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- =========== ENUM CONSTANT SUMMARY =========== -->
+<table id="inhconstants" class="jd-sumtable"><tr><th>
+ <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
+ <div style="clear:left;">Inherited Constants</div></th></tr>
+<?cs each:cl=class.inherited ?>
+<?cs if:subcount(cl.constants) ?>
+<tr class="api apilevel-<?cs var:cl.since ?>" >
+<td colspan="12">
+<?cs call:expando_trigger("inherited-constants-"+cl.qualified, "closed") ?>From <?cs var:cl.kind ?>
+<?cs call:cond_link(cl.qualified, toroot, cl.link, cl.included) ?>
+<div id="inherited-constants-<?cs var:cl.qualified ?>">
+ <div id="inherited-constants-<?cs var:cl.qualified ?>-list"
+ class="jd-inheritedlinks">
+ </div>
+ <div id="inherited-constants-<?cs var:cl.qualified ?>-summary" style="display: none;">
+ <table class="jd-sumtable-expando">
+ <?cs call:write_constant_summary(cl.constants, cl.included) ?></table>
+ </div>
+</div>
+</td></tr>
+<?cs /if ?>
+<?cs /each ?>
+</table>
+<?cs /if ?>
+
+<?cs if:subcount(class.fields) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- =========== FIELD SUMMARY =========== -->
+<table id="lfields" class="jd-sumtable"><tr><th colspan="12">Fields</th></tr>
+<?cs call:write_field_summary(class.fields, 1) ?>
+</table>
+<?cs /if ?>
+
+<?cs # if there are inherited fields, write the table ?>
+<?cs if:inhfields ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- =========== FIELD SUMMARY =========== -->
+<table id="inhfields" class="jd-sumtable"><tr><th>
+ <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
+ <div style="clear:left;">Inherited Fields</div></th></tr>
+<?cs each:cl=class.inherited ?>
+<?cs if:subcount(cl.fields) ?>
+<tr class="api apilevel-<?cs var:cl.since ?>" >
+<td colspan="12">
+<?cs call:expando_trigger("inherited-fields-"+cl.qualified, "closed") ?>From <?cs var:cl.kind ?>
+<?cs call:cond_link(cl.qualified, toroot, cl.link, cl.included) ?>
+<div id="inherited-fields-<?cs var:cl.qualified ?>">
+ <div id="inherited-fields-<?cs var:cl.qualified ?>-list"
+ class="jd-inheritedlinks">
+ </div>
+ <div id="inherited-fields-<?cs var:cl.qualified ?>-summary" style="display: none;">
+ <table class="jd-sumtable-expando">
+ <?cs call:write_field_summary(cl.fields, cl.included) ?></table>
+ </div>
+</div>
+</td></tr>
+<?cs /if ?>
+<?cs /each ?>
+</table>
+<?cs /if ?>
+
+<?cs if:subcount(class.ctors.public) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<table id="pubctors" class="jd-sumtable"><tr><th colspan="12">Public Constructors</th></tr>
+<?cs call:write_method_summary(class.ctors.public, 1) ?>
+</table>
+<?cs /if ?>
+
+<?cs if:subcount(class.ctors.protected) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<table id="proctors" class="jd-sumtable"><tr><th colspan="12">Protected Constructors</th></tr>
+<?cs call:write_method_summary(class.ctors.protected, 1) ?>
+</table>
+<?cs /if ?>
+
+<?cs if:subcount(class.methods.public) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========== METHOD SUMMARY =========== -->
+<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr>
+<?cs call:write_method_summary(class.methods.public, 1) ?>
+</table>
+<?cs /if ?>
+
+<?cs if:subcount(class.methods.protected) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========== METHOD SUMMARY =========== -->
+<table id="promethods" class="jd-sumtable"><tr><th colspan="12">Protected Methods</th></tr>
+<?cs call:write_method_summary(class.methods.protected, 1) ?>
+</table>
+<?cs /if ?>
+
+<?cs # if there are inherited methods, write the table ?>
+<?cs if:inhmethods ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========== METHOD SUMMARY =========== -->
+<table id="inhmethods" class="jd-sumtable"><tr><th>
+ <a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
+ <div style="clear:left;">Inherited Methods</div></th></tr>
+<?cs each:cl=class.inherited ?>
+<?cs if:subcount(cl.methods) ?>
+<tr class="api apilevel-<?cs var:cl.since ?>" >
+<td colspan="12"><?cs call:expando_trigger("inherited-methods-"+cl.qualified, "closed") ?>
+From <?cs var:cl.kind ?>
+<?cs if:cl.included ?>
+ <a href="<?cs var:toroot ?><?cs var:cl.link ?>"><?cs var:cl.qualified ?></a>
+<?cs elif:cl.federated ?>
+ <a href="<?cs var:cl.link ?>"><?cs var:cl.qualified ?></a>
+<?cs else ?>
+ <?cs var:cl.qualified ?>
+<?cs /if ?>
+<div id="inherited-methods-<?cs var:cl.qualified ?>">
+ <div id="inherited-methods-<?cs var:cl.qualified ?>-list"
+ class="jd-inheritedlinks">
+ </div>
+ <div id="inherited-methods-<?cs var:cl.qualified ?>-summary" style="display: none;">
+ <table class="jd-sumtable-expando">
+ <?cs call:write_method_summary(cl.methods, cl.included) ?></table>
+ </div>
+</div>
+</td></tr>
+<?cs /if ?>
+<?cs /each ?>
+</table>
+<?cs /if ?>
+<?cs /if ?>
+</div><!-- jd-descr (summary) -->
+
+<!-- Details -->
+
+<?cs def:write_field_details(fields) ?>
+<?cs each:field=fields ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
+<A NAME="<?cs var:field.anchor ?>"></A>
+<?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
+<div class="jd-details api apilevel-<?cs var:field.since ?>">
+ <h4 class="jd-details-title">
+ <span class="normal">
+ <?cs var:field.scope ?>
+ <?cs var:field.static ?>
+ <?cs var:field.final ?>
+ <?cs call:type_link(field.type) ?>
+ </span>
+ <?cs var:field.name ?>
+ </h4>
+ <div class="api-level">
+ <?cs call:since_tags(field) ?>
+ <?cs call:federated_refs(field) ?>
+ </div>
+ <div class="jd-details-descr">
+ <?cs call:description(field) ?>
+ <?cs if:subcount(field.constantValue) ?>
+ <div class="jd-tagdata">
+ <span class="jd-tagtitle">Constant Value: </span>
+ <span>
+ <?cs if:field.constantValue.isString ?>
+ <?cs var:field.constantValue.str ?>
+ <?cs else ?>
+ <?cs var:field.constantValue.dec ?>
+ (<?cs var:field.constantValue.hex ?>)
+ <?cs /if ?>
+ </span>
+ </div>
+ <?cs /if ?>
+ </div>
+</div>
+<?cs /each ?>
+<?cs /def ?>
+
+<?cs def:write_method_details(methods) ?>
+<?cs each:method=methods ?>
+<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
+<A NAME="<?cs var:method.anchor ?>"></A>
+<?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
+<div class="jd-details api apilevel-<?cs var:method.since ?>">
+ <h4 class="jd-details-title">
+ <span class="normal">
+ <?cs var:method.scope ?>
+ <?cs var:method.static ?>
+ <?cs var:method.final ?>
+ <?cs var:method.abstract ?>
+ <?cs var:method.synchronized ?>
+ <?cs call:type_link(method.returnType) ?>
+ </span>
+ <span class="sympad"><?cs var:method.name ?></span>
+ <span class="normal">(<?cs call:parameter_list(method.params) ?>)</span>
+ </h4>
+ <div class="api-level">
+ <div><?cs call:since_tags(method) ?></div>
+ <?cs call:federated_refs(method) ?>
+ </div>
+ <div class="jd-details-descr">
+ <?cs call:description(method) ?>
+ </div>
+</div>
+<?cs /each ?>
+<?cs /def ?>
+
+<?cs def:write_attr_details(attrs) ?>
+<?cs each:attr=attrs ?>
+<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
+<A NAME="<?cs var:attr.anchor ?>"></A>
+<div class="jd-details">
+ <h4 class="jd-details-title"><?cs var:attr.name ?>
+ </h4>
+ <div class="jd-details-descr">
+ <?cs call:description(attr) ?>
+
+ <div class="jd-tagdata">
+ <h5 class="jd-tagtitle">Related Methods</h5>
+ <ul class="nolist">
+ <?cs each:m=attr.methods ?>
+ <li><a href="<?cs var:toroot ?><?cs var:m.href ?>"><?cs var:m.name ?></a></li>
+ <?cs /each ?>
+ </ul>
+ </div>
+ </div>
+</div>
+<?cs /each ?>
+<?cs /def ?>
+
+
+<!-- XML Attributes -->
+<?cs if:subcount(class.attrs) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========= FIELD DETAIL ======== -->
+<h2>XML Attributes</h2>
+<?cs call:write_attr_details(class.attrs) ?>
+<?cs /if ?>
+
+<!-- Enum Values -->
+<?cs if:subcount(class.enumConstants) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========= ENUM CONSTANTS DETAIL ======== -->
+<h2>Enum Values</h2>
+<?cs call:write_field_details(class.enumConstants) ?>
+<?cs /if ?>
+
+<!-- Constants -->
+<?cs if:subcount(class.constants) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========= ENUM CONSTANTS DETAIL ======== -->
+<h2>Constants</h2>
+<?cs call:write_field_details(class.constants) ?>
+<?cs /if ?>
+
+<!-- Fields -->
+<?cs if:subcount(class.fields) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========= FIELD DETAIL ======== -->
+<h2>Fields</h2>
+<?cs call:write_field_details(class.fields) ?>
+<?cs /if ?>
+
+<!-- Public ctors -->
+<?cs if:subcount(class.ctors.public) ?>
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<h2>Public Constructors</h2>
+<?cs call:write_method_details(class.ctors.public) ?>
+<?cs /if ?>
+
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<!-- Protected ctors -->
+<?cs if:subcount(class.ctors.protected) ?>
+<h2>Protected Constructors</h2>
+<?cs call:write_method_details(class.ctors.protected) ?>
+<?cs /if ?>
+
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========= METHOD DETAIL ======== -->
+<!-- Public methdos -->
+<?cs if:subcount(class.methods.public) ?>
+<h2>Public Methods</h2>
+<?cs call:write_method_details(class.methods.public) ?>
+<?cs /if ?>
+
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<!-- ========= METHOD DETAIL ======== -->
+<?cs if:subcount(class.methods.protected) ?>
+<h2>Protected Methods</h2>
+<?cs call:write_method_details(class.methods.protected) ?>
+<?cs /if ?>
+
+<?cs # the next two lines must be exactly like this to be parsed by eclipse ?>
+<!-- ========= END OF CLASS DATA ========= -->
+<A NAME="navbar_top"></A>
+
+<?cs include:"footer.cs" ?>
+</div> <!-- jd-content -->
+
+</div><!-- end doc-content -->
+
+<?cs include:"trailer.cs" ?>
+
+</body>
+</html>
diff --git a/tools/droiddoc/templates-ds/classes.cs b/tools/droiddoc/templates-ds/classes.cs
new file mode 100644
index 0000000..9d87751
--- /dev/null
+++ b/tools/droiddoc/templates-ds/classes.cs
@@ -0,0 +1,47 @@
+<?cs include:"doctype.cs" ?>
+<?cs include:"macros.cs" ?>
+<html devsite>
+<?cs include:"head_tag.cs" ?>
+<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
+ <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ elif:design ?>design<?cs
+ elif:distribute ?>distribute<?cs
+ /if ?>" itemscope itemtype="http://schema.org/Article">
+ <a name="top"></a>
+<?cs include:"header.cs" ?>
+
+<div class="col-12" id="doc-col">
+
+<div id="jd-header">
+<h1><?cs var:page.title ?></h1>
+</div>
+
+<div id="jd-content">
+<p>These are the Android API classes. See all <a href="packages.html">API packages</a>.</p>
+<div class="jd-letterlist"><?cs each:letter=docs.classes ?>
+ <a href="#letter_<?cs name:letter ?>"><?cs name:letter ?></a>&nbsp;&nbsp;<?cs /each?>
+</div>
+
+<?cs each:letter=docs.classes ?>
+<?cs set:count = #1 ?>
+<h2 id="letter_<?cs name:letter ?>"><?cs name:letter ?></h2>
+<table class="jd-sumtable">
+ <?cs set:cur_row = #0 ?>
+ <?cs each:cl = letter ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.since ?>" >
+ <td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
+ <td class="jd-descrcol" width="100%"><?cs call:short_descr(cl) ?>&nbsp;</td>
+ </tr>
+ <?cs set:count = count + #1 ?>
+ <?cs /each ?>
+</table>
+<?cs /each ?>
+
+<?cs include:"footer.cs" ?>
+</div><!-- end jd-content -->
+</div><!-- end doc-content -->
+
+<?cs include:"trailer.cs" ?>
+
+</body>
+</html> \ No newline at end of file
diff --git a/tools/droiddoc/templates-ds/components/masthead.cs b/tools/droiddoc/templates-ds/components/masthead.cs
new file mode 100644
index 0000000..1bfaa56
--- /dev/null
+++ b/tools/droiddoc/templates-ds/components/masthead.cs
@@ -0,0 +1,231 @@
+<?cs def:custom_masthead() ?>
+ <!-- Header -->
+ <div id="header">
+ <div class="wrap" id="header-wrap">
+ <div class="col-3 logo">
+ <a href="<?cs var:toroot ?>index.html">
+ <img src="<?cs var:toroot ?>assets/images/dac_logo.png" width="123" height="25" alt="Android Developers" />
+ </a>
+ <div class="btn-quicknav" id="btn-quicknav">
+ <a href="#" class="arrow-inactive">Quicknav</a>
+ <a href="#" class="arrow-active">Quicknav</a>
+ </div>
+ </div>
+ <ul class="nav-x col-9">
+ <li class="design">
+ <a href="<?cs var:toroot ?>design/index.html" <?cs
+ if:design ?>class="selected"<?cs /if ?>
+ zh-TW-lang="設計"
+ zh-CN-lang="设计"
+ ru-lang="Проектирование"
+ ko-lang="디자인"
+ ja-lang="設計"
+ es-lang="Diseñar"
+ >Design</a></li>
+ <li class="develop"><a href="<?cs var:toroot ?>develop/index.html" <?cs
+ if:training || guide || reference || tools || develop || google ?>class="selected"<?cs /if ?>
+ zh-TW-lang="開發"
+ zh-CN-lang="开发"
+ ru-lang="Разработка"
+ ko-lang="개발"
+ ja-lang="開発"
+ es-lang="Desarrollar"
+ >Develop</a></li>
+ <li class="distribute last"><a href="<?cs var:toroot ?>distribute/index.html" <?cs
+ if:distribute ?>class="selected"<?cs /if ?>
+ zh-TW-lang="發佈"
+ zh-CN-lang="分发"
+ ru-lang="Распространение"
+ ko-lang="배포"
+ ja-lang="配布"
+ es-lang="Distribuir"
+ >Distribute</a></li>
+ </ul>
+
+ <!-- New Search -->
+ <div class="menu-container">
+ <div class="moremenu">
+ <div id="more-btn"></div>
+ </div>
+ <div class="morehover" id="moremenu">
+ <div class="top"></div>
+ <div class="mid">
+ <div class="header">Links</div>
+ <ul>
+ <li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li>
+ <li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
+ <li><a href="<?cs var:toroot ?>about/index.html">About Android</a></li>
+ </ul>
+ <div class="header">Android Sites</div>
+ <ul>
+ <li><a href="http://www.android.com">Android.com</a></li>
+ <li class="active"><a>Android Developers</a></li>
+ <li><a href="http://source.android.com">Android Open Source Project</a></li>
+ </ul>
+ <div class="header">Language</div>
+ <!-- <div class="header">Support</div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>support.html">Developer Support</a></li>
+ </ul> -->
+ <br class="clearfix" />
+ </div>
+ <div class="bottom"></div>
+ </div>
+ <div class="search" id="search-container">
+ <div class="search-inner">
+ <div id="search-btn"></div>
+ <div class="left"></div>
+ <form onsubmit="return submit_search()">
+ <input id="search_autocomplete" type="text" value="" autocomplete="off" name="q"
+onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)"
+onkeydown="return search_changed(event, true, '<?cs var:toroot ?>')"
+onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
+ </form>
+ <div class="right"></div>
+ <a class="close hide">close</a>
+ <div class="left"></div>
+ <div class="right"></div>
+ </div>
+ </div>
+ <div id="search_filtered_wrapper">
+ <div id="search_filtered_div" class="no-display">
+ <ul id="search_filtered">
+ </ul>
+ </div>
+ </div>
+
+ </div>
+ <!-- /New Search>
+
+
+ <!-- Expanded quicknav -->
+ <div id="quicknav" class="col-9">
+ <ul>
+ <li class="design">
+ <ul>
+ <li><a href="<?cs var:toroot ?>design/index.html">Get Started</a></li>
+ <li><a href="<?cs var:toroot ?>design/style/index.html">Style</a></li>
+ <li><a href="<?cs var:toroot ?>design/patterns/index.html">Patterns</a></li>
+ <li><a href="<?cs var:toroot ?>design/building-blocks/index.html">Building Blocks</a></li>
+ <li><a href="<?cs var:toroot ?>design/downloads/index.html">Downloads</a></li>
+ <li><a href="<?cs var:toroot ?>design/videos/index.html">Videos</a></li>
+ </ul>
+ </li>
+ <li class="develop">
+ <ul>
+ <li><a href="<?cs var:toroot ?>training/index.html"
+ zh-TW-lang="訓練課程"
+ zh-CN-lang="培训"
+ ru-lang="Курсы"
+ ko-lang="교육"
+ ja-lang="トレーニング"
+ es-lang="Capacitación"
+ >Training</a></li>
+ <li><a href="<?cs var:toroot ?>guide/components/index.html"
+ zh-TW-lang="API 指南"
+ zh-CN-lang="API 指南"
+ ru-lang="Руководства по API"
+ ko-lang="API 가이드"
+ ja-lang="API ガイド"
+ es-lang="Guías de la API"
+ >API Guides</a></li>
+ <li><a href="<?cs var:toroot ?>reference/packages.html"
+ zh-TW-lang="參考資源"
+ zh-CN-lang="参考"
+ ru-lang="Справочник"
+ ko-lang="참조문서"
+ ja-lang="リファレンス"
+ es-lang="Referencia"
+ >Reference</a></li>
+ <li><a href="<?cs var:toroot ?>tools/index.html"
+ zh-TW-lang="相關工具"
+ zh-CN-lang="工具"
+ ru-lang="Инструменты"
+ ko-lang="도구"
+ ja-lang="ツール"
+ es-lang="Herramientas"
+ >Tools</a>
+ <ul><li><a href="<?cs var:toroot ?>sdk/index.html">Get the SDK</a></li></ul>
+ </li>
+ <li><a href="<?cs var:toroot ?>google/index.html">Google Services</a>
+ </li>
+ </ul>
+ </li>
+ <li class="distribute last">
+ <ul>
+ <li><a href="<?cs var:toroot ?>distribute/index.html">Google Play</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/publish/index.html">Publishing</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/index.html">Promoting</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/index.html">App Quality</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/index.html">Spotlight</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/open.html">Open Distribution</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ <!-- /Expanded quicknav -->
+ </div>
+ </div>
+ <!-- /Header -->
+
+
+ <div id="searchResults" class="wrap" style="display:none;">
+ <h2 id="searchTitle">Results</h2>
+ <div id="leftSearchControl" class="search-control">Loading...</div>
+ </div>
+
+
+
+<?cs if:training || guide || reference || tools || develop || google ?>
+ <!-- Secondary x-nav -->
+ <div id="nav-x">
+ <div class="wrap">
+ <ul class="nav-x col-9 develop" style="width:100%">
+ <li><a href="<?cs var:toroot ?>training/index.html" <?cs
+ if:training ?>class="selected"<?cs /if ?>
+ zh-TW-lang="訓練課程"
+ zh-CN-lang="培训"
+ ru-lang="Курсы"
+ ko-lang="교육"
+ ja-lang="トレーニング"
+ es-lang="Capacitación"
+ >Training</a></li>
+ <li><a href="<?cs var:toroot ?>guide/components/index.html" <?cs
+ if:guide ?>class="selected"<?cs /if ?>
+ zh-TW-lang="API 指南"
+ zh-CN-lang="API 指南"
+ ru-lang="Руководства по API"
+ ko-lang="API 가이드"
+ ja-lang="API ガイド"
+ es-lang="Guías de la API"
+ >API Guides</a></li>
+ <li><a href="<?cs var:toroot ?>reference/packages.html" <?cs
+ if:reference && !(reference.gcm || reference.gms) ?>class="selected"<?cs /if ?>
+ zh-TW-lang="參考資源"
+ zh-CN-lang="参考"
+ ru-lang="Справочник"
+ ko-lang="참조문서"
+ ja-lang="リファレンス"
+ es-lang="Referencia"
+ >Reference</a></li>
+ <li><a href="<?cs var:toroot ?>tools/index.html" <?cs
+ if:tools ?>class="selected"<?cs /if ?>
+ zh-TW-lang="相關工具"
+ zh-CN-lang="工具"
+ ru-lang="Инструменты"
+ ko-lang="도구"
+ ja-lang="ツール"
+ es-lang="Herramientas"
+ >Tools</a></li>
+ <li><a href="<?cs var:toroot ?>google/index.html" <?cs
+ if:google || reference.gcm || reference.gms?>class="selected"<?cs /if ?>
+ >Google Services</a>
+ </li>
+ </ul>
+ </div>
+
+ </div>
+ <!-- /Sendondary x-nav -->
+<?cs /if ?>
+ <?cs
+/def ?>
diff --git a/tools/droiddoc/templates-ds/customizations.cs b/tools/droiddoc/templates-ds/customizations.cs
new file mode 100644
index 0000000..75559e6
--- /dev/null
+++ b/tools/droiddoc/templates-ds/customizations.cs
@@ -0,0 +1,370 @@
+<?cs
+def:fullpage() ?>
+ <div id="body-content">
+<?cs /def ?>
+<?cs
+def:sdk_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/sdk/sdk_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+<?cs /def ?>
+<?cs
+def:resources_tab_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <a
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/resources/resources_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+<?cs
+def:tools_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+<?cs
+ include:"../../../../frameworks/base/docs/html/tools/tools_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+<?cs
+def:training_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/training/training_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+<?cs
+def:guide_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/guide/guide_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+<?cs
+def:design_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/design/design_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+<?cs
+def:distribute_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/distribute/distribute_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+
+<?cs
+def:google_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/google/google_toc.cs" ?>
+
+
+ </div>
+ <script type="text/javascript">
+ showGoogleRefTree();
+
+ </script>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+
+<?cs
+def:about_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/about/about_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+<?cs
+def:dist_more_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/distribute/more/more_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+:
+
+<?cs /def ?>
+<?cs # The default side navigation for the reference docs ?><?cs
+def:default_left_nav() ?>
+<?cs if:reference.gcm || reference.gms ?>
+ <?cs call:google_nav() ?>
+<?cs else ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav">
+
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+ <div id="api-nav-header">
+ <div id="api-level-toggle">
+ <label for="apiLevelCheckbox" class="disabled">API level: </label>
+ <div class="select-wrapper">
+ <select id="apiLevelSelector">
+ <!-- option elements added by buildApiLevelSelector() -->
+ </select>
+ </div>
+ </div><!-- end toggle -->
+ <div id="api-nav-title">Android APIs</div>
+ </div><!-- end nav header -->
+ <script>
+ var SINCE_DATA = [ <?cs
+ each:since = since ?>'<?cs
+ var:since.name ?>'<?cs
+ if:!last(since) ?>, <?cs /if ?><?cs
+ /each
+ ?> ];
+ buildApiLevelSelector();
+ </script>
+
+ <div id="swapper">
+ <div id="nav-panels">
+ <div id="resize-packages-nav">
+ <div id="packages-nav" class="scroll-pane">
+
+ <ul>
+ <?cs call:package_link_list(docs.packages) ?>
+ </ul><br/>
+
+ </div> <!-- end packages-nav -->
+ </div> <!-- end resize-packages -->
+ <div id="classes-nav" class="scroll-pane">
+
+
+<?cs
+ if:subcount(class.package) ?>
+ <ul>
+ <?cs call:list("Interfaces", class.package.interfaces) ?>
+ <?cs call:list("Classes", class.package.classes) ?>
+ <?cs call:list("Enums", class.package.enums) ?>
+ <?cs call:list("Exceptions", class.package.exceptions) ?>
+ <?cs call:list("Errors", class.package.errors) ?>
+ </ul><?cs
+ elif:subcount(package) ?>
+ <ul>
+ <?cs call:class_link_list("Interfaces", package.interfaces) ?>
+ <?cs call:class_link_list("Classes", package.classes) ?>
+ <?cs call:class_link_list("Enums", package.enums) ?>
+ <?cs call:class_link_list("Exceptions", package.exceptions) ?>
+ <?cs call:class_link_list("Errors", package.errors) ?>
+ </ul><?cs
+ else ?>
+ <p style="padding:10px">Select a package to view its members</p><?cs
+ /if ?><br/>
+
+
+ </div><!-- end classes -->
+ </div><!-- end nav-panels -->
+ <div id="nav-tree" style="display:none" class="scroll-pane">
+ <div id="tree-list"></div>
+ </div><!-- end nav-tree -->
+ </div><!-- end swapper -->
+ <div id="nav-swap">
+ <a class="fullscreen">fullscreen</a>
+ <a href='#' onclick='swapNav();return false;'><span id='tree-link'>Use Tree Navigation</span><span id='panel-link' style='display:none'>Use Panel Navigation</span></a>
+ </div>
+ </div> <!-- end devdoc-nav -->
+ </div> <!-- end side-nav -->
+ <script type="text/javascript">
+ // init fullscreen based on user pref
+ var fullscreen = readCookie("fullscreen");
+ if (fullscreen != 0) {
+ if (fullscreen == "false") {
+ toggleFullscreen(false);
+ } else {
+ toggleFullscreen(true);
+ }
+ }
+ // init nav version for mobile
+ if (isMobile) {
+ swapNav(); // tree view should be used on mobile
+ $('#nav-swap').hide();
+ } else {
+ chooseDefaultNav();
+ if ($("#nav-tree").is(':visible')) {
+ init_default_navtree("<?cs var:toroot ?>");
+ }
+ }
+ // scroll the selected page into view
+ $(document).ready(function() {
+ scrollIntoView("packages-nav");
+ scrollIntoView("classes-nav");
+ });
+ </script>
+<?cs /if ?>
+ <?cs
+/def ?>
+
+<?cs
+def:custom_left_nav() ?><?cs
+ if:fullpage ?><?cs
+ call:fullpage() ?><?cs
+ elif:guide ?><?cs
+ call:guide_nav() ?><?cs
+ elif:design ?><?cs
+ call:design_nav() ?><?cs
+ elif:training ?><?cs
+ call:training_nav() ?><?cs
+ elif:tools ?><?cs
+ call:tools_nav() ?><?cs
+ elif:google ?><?cs
+ call:google_nav() ?><?cs
+ elif:more ?><?cs
+ call:dist_more_nav() ?><?cs
+ elif:distribute ?><?cs
+ call:distribute_nav() ?><?cs
+ elif:about ?><?cs
+ call:about_nav() ?><?cs
+ else ?><?cs
+ call:default_left_nav() ?> <?cs
+ /if ?><?cs
+/def ?>
+
+<?cs # appears at the bottom of every page ?><?cs
+def:custom_cc_copyright() ?>
+ Except as noted, this content is
+ licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
+ Creative Commons Attribution 2.5</a>. For details and
+ restrictions, see the <a href="<?cs var:toroot ?>license.html">Content
+ License</a>.<?cs
+/def ?>
+
+<?cs
+def:custom_copyright() ?>
+ Except as noted, this content is licensed under <a
+ href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.
+ For details and restrictions, see the <a href="<?cs var:toroot ?>license.html">
+ Content License</a>.<?cs
+/def ?>
+
+<?cs
+def:custom_footerlinks() ?>
+ <p>
+ <a href="<?cs var:toroot ?>about/index.html">About Android</a>&nbsp;&nbsp;|&nbsp;
+ <a href="<?cs var:toroot ?>legal.html">Legal</a>&nbsp;&nbsp;|&nbsp;
+ <a href="<?cs var:toroot ?>support.html">Support</a>
+ </p><?cs
+/def ?>
+
+<?cs # appears on the right side of the blue bar at the bottom off every page ?><?cs
+def:custom_buildinfo() ?><?cs
+ if:!google ?>
+ Android <?cs var:sdk.version ?>&nbsp;r<?cs var:sdk.rel.id ?> &mdash; <?cs
+ /if ?>
+<script src="<?cs var:toroot ?>timestamp.js" type="text/javascript"></script>
+<script>document.write(BUILD_TIMESTAMP)</script>
+<?cs /def ?>
+
diff --git a/tools/droiddoc/templates-ds/data.hdf b/tools/droiddoc/templates-ds/data.hdf
new file mode 100644
index 0000000..9411b78
--- /dev/null
+++ b/tools/droiddoc/templates-ds/data.hdf
@@ -0,0 +1,4 @@
+template {
+ which = normal
+}
+
diff --git a/tools/droiddoc/templates-ds/designpage.cs b/tools/droiddoc/templates-ds/designpage.cs
new file mode 100644
index 0000000..c714a74
--- /dev/null
+++ b/tools/droiddoc/templates-ds/designpage.cs
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<?cs include:"macros.cs" ?>
+<html lang="en">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>
+ Android Design<?cs if:page.title ?> - <?cs var:page.title ?><?cs /if ?>
+ </title>
+ <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
+ <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic">
+ <link rel="stylesheet" href="<?cs var:toroot ?>assets/yui-3.3.0-reset-min.css">
+ <link rel="stylesheet" href="<?cs var:toroot ?>assets/design/default.css">
+ <script src="<?cs var:toroot ?>assets/jquery-1.6.2.min.js"></script>
+ <script>var SITE_ROOT = '<?cs var:toroot ?>design';</script>
+ <script src="<?cs var:toroot ?>assets/design/default.js"></script>
+ </head>
+ <body class="gc-documentation
+ <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ elif:design ?>design<?cs
+ elif:distribute ?>distribute<?cs
+ /if ?>" itemscope itemtype="http://schema.org/Article">
+ <a name="top"></a>
+
+ <div id="page-container">
+
+ <div id="page-header" itemscope itemtype="http://schema.org/WPHeader"><a href="<?cs var:toroot ?>design/index.html">Android Design</a></div>
+
+ <div id="main-row">
+
+ <div id="nav-container" itemscope itemtype="http://schema.org/SiteNavigationElement">
+
+ <?cs call:design_nav() ?>
+
+ </div>
+
+ <div id="content">
+
+<?cs if:header.hide ?>
+<?cs else ?>
+<div class="layout-content-row content-header <?cs if:header.justLinks ?>just-links<?cs /if ?>">
+ <div class="layout-content-col span-9">
+ <?cs if:header.justLinks ?>&nbsp;
+ <?cs elif:header.title ?><h2><?cs var:header.title ?></h2>
+ <?cs else ?><h2><?cs var:page.title ?></h2>
+ <?cs /if ?>
+ </div>
+ <div class="paging-links layout-content-col span-4" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <a href="#" class="prev-page-link">Previous</a>
+ <a href="#" class="next-page-link">Next</a>
+ </div>
+</div>
+<?cs /if ?>
+
+<?cs call:tag_list(root.descr) ?>
+
+<?cs if:footer.hide ?>
+<?cs else ?>
+<div class="layout-content-row content-footer" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="paging-links layout-content-col span-9">&nbsp;</div>
+ <div class="paging-links layout-content-col span-4">
+ <a href="#" class="prev-page-link">Previous</a>
+ <a href="#" class="next-page-link">Next</a>
+ </div>
+</div>
+<?cs /if ?>
+
+ </div>
+
+ </div>
+
+ <div id="page-footer" itemscope itemtype="http://schema.org/WPFooter">
+
+ <p id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/">
+ Creative Commons Attribution 2.5</a>.<br>
+ For details and restrictions, see the
+ <a href="http://developer.android.com/license.html">Content License</a>.
+ </p>
+
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> &ndash;
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> &ndash;
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+
+ </div>
+ </div>
+
+ <script type="text/javascript">
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script type="text/javascript">
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._trackPageview();
+ </script>
+ </body>
+</html>
diff --git a/tools/droiddoc/templates-ds/docpage.cs b/tools/droiddoc/templates-ds/docpage.cs
new file mode 100644
index 0000000..da54613
--- /dev/null
+++ b/tools/droiddoc/templates-ds/docpage.cs
@@ -0,0 +1,174 @@
+<?cs include:"doctype.cs" ?>
+<?cs include:"macros.cs" ?>
+<html devsite>
+<?cs include:"head_tag.cs" ?>
+<body class="gc-documentation <?cs if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?>
+ <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs if:guide ?> guide<?cs /if ?><?cs
+ elif:about ?>about<?cs
+ elif:design ?>design<?cs
+ elif:distribute ?>distribute<?cs
+ /if ?><?cs
+ if:page.trainingcourse ?> trainingcourse<?cs /if ?>" itemscope itemtype="http://schema.org/Article">
+<a name="top"></a>
+<?cs include:"header.cs" ?>
+
+<div <?cs if:fullpage
+?>class="fullpage"<?cs elif:design||tools||about||sdk||distribute
+?>class="col-13" id="doc-col"<?cs else
+?>class="col-12" id="doc-col"<?cs /if ?> >
+
+<?cs if:(design||training||walkthru) && !page.trainingcourse && !page.article ?><?cs # header logic for docs that provide previous/next buttons ?>
+ <?cs if:header.hide ?>
+ <?cs else ?>
+ <div class="layout-content-row content-header <?cs if:header.justLinks ?>just-links<?cs /if ?>">
+ <div class="layout-content-col <?cs if:training ?>span-7<?cs else ?>span-9<?cs /if ?>">
+ <?cs if:header.justLinks ?>&nbsp;
+ <?cs else ?><h1 itemprop="name"><?cs var:page.title ?></h1>
+ <?cs /if ?>
+ </div>
+ <?cs if:training ?>
+ <div class="training-nav-top layout-content-col span-5" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <a href="#" class="prev-page-link hide"
+ zh-TW-lang="上一堂課"
+ zh-CN-lang="上一课"
+ ru-lang="Предыдущий"
+ ko-lang="이전"
+ ja-lang="前へ"
+ es-lang="Anterior"
+ >Previous</a>
+ <a href="#" class="next-page-link hide"
+ zh-TW-lang="下一堂課"
+ zh-CN-lang="下一课"
+ ru-lang="Следующий"
+ ko-lang="다음"
+ ja-lang="次へ"
+ es-lang="Siguiente"
+ >Next</a>
+ <a href="#" class="start-class-link hide"
+ zh-TW-lang="開始上課"
+ zh-CN-lang="开始"
+ ru-lang="Начало работы"
+ ko-lang="시작하기"
+ ja-lang="開始する"
+ es-lang="Empezar"
+ >Get started</a>
+ </div>
+ <?cs elif:!page.trainingcourse ?>
+ <div class="paging-links layout-content-col span-4" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <a href="#" class="prev-page-link hide"
+ zh-TW-lang="上一堂課"
+ zh-CN-lang="上一课"
+ ru-lang="Предыдущий"
+ ko-lang="이전"
+ ja-lang="前へ"
+ es-lang="Anterior"
+ >Previous</a>
+ <a href="#" class="next-page-link hide"
+ zh-TW-lang="下一堂課"
+ zh-CN-lang="下一课"
+ ru-lang="Следующий"
+ ko-lang="다음"
+ ja-lang="次へ"
+ es-lang="Siguiente"
+ >Next</a>
+ </div>
+ <?cs /if ?><?cs # end if training ?>
+ </div>
+ <?cs /if ?>
+<?cs else ?>
+ <?cs if:(!fullpage && !header.hide) ?>
+ <?cs if:page.landing ?><?cs # header logic for docs that are landing pages ?>
+ <div class="landing-banner">
+ <?cs if:page.landing.image ?><?cs # use two-column layout only if there's an image ?>
+ <div class="col-6">
+ <img src="<?cs var:toroot ?><?cs var:page.landing.image ?>" alt="" />
+ </div>
+ <div class="col-6">
+ <?cs /if ?>
+ <h1 itemprop="name" style="margin-bottom:0;"><?cs var:page.title ?></h1>
+ <p itemprop="description"><?cs var:page.landing.intro ?></p>
+
+ <p><a class="next-page-link topic-start-link"></a></p>
+ <?cs if:page.landing.image ?>
+ </div>
+ <?cs /if ?>
+ </div>
+ <?cs else ?>
+ <?cs if:tab1 ?><div id="title-tabs-wrapper"><?cs /if ?>
+ <h1 itemprop="name" <?cs if:tab1 ?>class="with-title-tabs"<?cs /if ?>><?cs var:page.title ?></h1><?cs
+ if:tab1 ?><ul id="title-tabs">
+ <li class="selected"><a href="<?cs var:tab1.link ?>"><?cs var:tab1 ?></a></li>
+ <?cs if:tab2 ?>
+ <li><a href="<?cs var:tab2.link ?>"><?cs var:tab2 ?></a></li><?cs /if ?>
+ <?cs if:tab3 ?>
+ <li><a href="<?cs var:tab3.link ?>"><?cs var:tab3 ?></a></li><?cs /if ?>
+ </ul>
+ <?cs /if ?>
+ <?cs if:tab1 ?></div><!-- end tab-wrapper --><?cs /if ?>
+ <?cs /if ?>
+ <?cs /if ?>
+<?cs /if ?><?cs # end if design ?>
+
+ <?cs # THIS IS THE MAIN DOC CONTENT ?>
+ <div id="jd-content">
+
+
+ <div class="jd-descr" itemprop="articleBody">
+ <?cs call:tag_list(root.descr) ?>
+ </div>
+
+ <div class="content-footer <?cs
+ if:fullpage ?>wrap<?cs
+ else ?>layout-content-row<?cs /if ?>"
+ itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="layout-content-col <?cs
+ if:fullpage ?>col-16<?cs
+ elif:training||guide ?>col-8<?cs
+ else ?>col-9<?cs /if ?>" style="padding-top:4px">
+ <?cs if:!page.noplus ?><?cs if:fullpage ?><style>#___plusone_0 {float:right !important;}</style><?cs /if ?>
+ <div class="g-plusone" data-size="medium"></div>
+ <?cs /if ?>
+ </div>
+ <?cs if:!fullscreen ?>
+ <div class="paging-links layout-content-col col-4">
+ <?cs if:(design||training||guide||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
+ <a href="#" class="prev-page-link hide"
+ zh-TW-lang="上一堂課"
+ zh-CN-lang="上一课"
+ ru-lang="Предыдущий"
+ ko-lang="이전"
+ ja-lang="前へ"
+ es-lang="Anterior"
+ >Previous</a>
+ <a href="#" class="next-page-link hide"
+ zh-TW-lang="下一堂課"
+ zh-CN-lang="下一课"
+ ru-lang="Следующий"
+ ko-lang="다음"
+ ja-lang="次へ"
+ es-lang="Siguiente"
+ >Next</a>
+ <?cs /if ?>
+ </div>
+ <?cs /if ?>
+ </div>
+
+ <?cs # for training classes, provide a different kind of link when the next page is a different class ?>
+ <?cs if:training && !page.article ?>
+ <div class="layout-content-row content-footer next-class" style="display:none" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <a href="#" class="next-class-link hide">Next class: </a>
+ </div>
+ <?cs /if ?>
+
+ </div> <!-- end jd-content -->
+
+<?cs include:"footer.cs" ?>
+</div><!-- end doc-content -->
+
+<?cs include:"trailer.cs" ?>
+
+</body>
+</html>
+
+
+
diff --git a/tools/droiddoc/templates-ds/footer.cs b/tools/droiddoc/templates-ds/footer.cs
new file mode 100644
index 0000000..b609d3b
--- /dev/null
+++ b/tools/droiddoc/templates-ds/footer.cs
@@ -0,0 +1,20 @@
+<div id="footer" class="wrap" <?cs if:fullpage ?>style="width:940px"<?cs /if ?>>
+
+<?cs if:reference ?>
+ <div id="copyright">
+ <?cs call:custom_copyright() ?>
+ </div>
+ <div id="build_info">
+ <?cs call:custom_buildinfo() ?>
+ </div>
+<?cs elif:!hide_license_footer ?>
+ <div id="copyright">
+ <?cs call:custom_cc_copyright() ?>
+ </div>
+<?cs /if ?>
+<?cs if:!no_footer_links ?>
+ <div id="footerlinks">
+ <?cs call:custom_footerlinks() ?>
+ </div>
+<?cs /if ?>
+</div> <!-- end footer --> \ No newline at end of file
diff --git a/tools/droiddoc/templates-ds/gcm_navtree_data.cs b/tools/droiddoc/templates-ds/gcm_navtree_data.cs
new file mode 100644
index 0000000..6f33d88
--- /dev/null
+++ b/tools/droiddoc/templates-ds/gcm_navtree_data.cs
@@ -0,0 +1,3 @@
+var GCM_NAVTREE_DATA =
+<?cs var:reference_tree ?>
+;
diff --git a/tools/droiddoc/templates-ds/gms_navtree_data.cs b/tools/droiddoc/templates-ds/gms_navtree_data.cs
new file mode 100644
index 0000000..66b7d55
--- /dev/null
+++ b/tools/droiddoc/templates-ds/gms_navtree_data.cs
@@ -0,0 +1,3 @@
+var GMS_NAVTREE_DATA =
+<?cs var:reference_tree ?>
+;
diff --git a/tools/droiddoc/templates-ds/head_tag.cs b/tools/droiddoc/templates-ds/head_tag.cs
new file mode 100644
index 0000000..cb22cc3
--- /dev/null
+++ b/tools/droiddoc/templates-ds/head_tag.cs
@@ -0,0 +1,53 @@
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<?cs if:page.metaDescription ?>
+<meta name="Description" content="<?cs var:page.metaDescription ?>">
+<?cs /if ?>
+<link rel="shortcut icon" type="image/x-icon" href="<?cs var:toroot ?>favicon.ico" />
+<title><?cs
+ if:page.title ?><?cs
+ var:page.title ?> | <?cs
+ /if ?>Android Developers</title>
+
+<!-- STYLESHEETS -->
+<link rel="stylesheet"
+href="<?cs if:android.whichdoc != 'online' ?>http:<?cs /if ?>//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+<link href="<?cs var:toroot ?>assets/css/default.css" rel="stylesheet" type="text/css">
+
+<?cs if:reference && !(reference.gms || reference.gcm) ?>
+<!-- FULLSCREEN STYLESHEET -->
+<link href="<?cs var:toroot ?>assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
+type="text/css">
+<?cs /if ?>
+
+<!-- JAVASCRIPT -->
+<script src="<?cs if:android.whichdoc != 'online' ?>http:<?cs /if ?>//www.google.com/jsapi" type="text/javascript"></script>
+<script src="//android-dot-devsite.googleplex.com/_static/js/android_3p-bundle.js" type="text/javascript"></script>
+<script type="text/javascript">
+ var toRoot = "<?cs var:toroot ?>";
+ <?cs if:devsite ?>
+ var devsite = true;
+ <?cs else ?>
+ var devsite = false;
+ <?cs /if ?>
+</script>
+<script src="<?cs var:toroot ?>assets/js/docs.js" type="text/javascript"></script>
+<?cs if:reference.gms || reference.gcm || google?>
+<script src="<?cs var:toroot ?>gms_navtree_data.js" type="text/javascript"></script>
+<script src="<?cs var:toroot ?>gcm_navtree_data.js" type="text/javascript"></script>
+<?cs else ?>
+<script src="<?cs var:toroot ?>navtree_data.js" type="text/javascript"></script>
+<?cs /if ?>
+
+<script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-5831155-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+</script>
+</head> \ No newline at end of file
diff --git a/tools/droiddoc/templates-ds/header.cs b/tools/droiddoc/templates-ds/header.cs
new file mode 100644
index 0000000..e8301be
--- /dev/null
+++ b/tools/droiddoc/templates-ds/header.cs
@@ -0,0 +1,3 @@
+<?cs call:custom_masthead() ?>
+<?cs call:custom_left_nav() ?>
+
diff --git a/tools/droiddoc/templates-ds/header_tabs.cs b/tools/droiddoc/templates-ds/header_tabs.cs
new file mode 100644
index 0000000..38c9da8
--- /dev/null
+++ b/tools/droiddoc/templates-ds/header_tabs.cs
@@ -0,0 +1,2 @@
+
+<!-- CURRENTLY NOT USED... ALL TABS ARE IN masthead.cs -->
diff --git a/tools/droiddoc/templates-ds/navtree_data.cs b/tools/droiddoc/templates-ds/navtree_data.cs
new file mode 100644
index 0000000..73aa199
--- /dev/null
+++ b/tools/droiddoc/templates-ds/navtree_data.cs
@@ -0,0 +1,3 @@
+var NAVTREE_DATA =
+<?cs var:reference_tree ?>
+;
diff --git a/tools/droiddoc/templates-ds/nosidenavpage.cs b/tools/droiddoc/templates-ds/nosidenavpage.cs
new file mode 100644
index 0000000..60e042d
--- /dev/null
+++ b/tools/droiddoc/templates-ds/nosidenavpage.cs
@@ -0,0 +1,27 @@
+<?cs include:"doctype.cs" ?>
+<?cs include:"macros.cs" ?>
+<html devsite>
+<?cs include:"head_tag.cs" ?>
+<body class="gc-documentation
+ <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ elif:design ?>design<?cs
+ elif:distribute ?>distribute<?cs
+ /if ?>" itemscope itemtype="http://schema.org/Article">
+<a name="top"></a>
+<?cs call:custom_masthead() ?>
+
+<div id="body-content">
+<div id="doc-content" style="position:relative;">
+
+<?cs call:tag_list(root.descr) ?>
+
+<?cs include:"footer.cs" ?>
+</div><!-- end doc-content -->
+
+<?cs include:"trailer.cs" ?>
+
+</body>
+</html>
+
+
+
diff --git a/tools/droiddoc/templates-ds/package.cs b/tools/droiddoc/templates-ds/package.cs
new file mode 100644
index 0000000..ea3e4f4
--- /dev/null
+++ b/tools/droiddoc/templates-ds/package.cs
@@ -0,0 +1,61 @@
+<?cs include:"doctype.cs" ?>
+<?cs include:"macros.cs" ?>
+<html devsite>
+<?cs include:"head_tag.cs" ?>
+
+<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
+ <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ elif:design ?>design<?cs
+ elif:distribute ?>distribute<?cs
+ /if ?>">
+ <div id="doc-api-level" class="<?cs var:package.since ?>" style="display:none"></div>
+ <a name="top"></a>
+<?cs include:"header.cs" ?>
+
+<div class="col-12" id="doc-col">
+
+<div id="api-info-block">
+<div class="api-level">
+ <?cs call:since_tags(package) ?>
+ <?cs call:federated_refs(package) ?>
+</div>
+</div>
+
+<div id="jd-header">
+ package
+ <h1><?cs var:package.name ?></h1>
+</div><!-- end header -->
+
+<div id="naMessage"></div>
+
+<div id="jd-content" class="api apilevel-<?cs var:package.since ?>">
+
+<?cs if:subcount(package.descr) ?>
+ <div class="jd-descr">
+ <?cs call:tag_list(package.descr) ?>
+ </div>
+<?cs /if ?>
+
+<?cs def:class_table(label, classes) ?>
+ <?cs if:subcount(classes) ?>
+ <h2><?cs var:label ?></h2>
+ <div class="jd-sumtable">
+ <?cs call:class_link_table(classes) ?>
+ </div>
+ <?cs /if ?>
+<?cs /def ?>
+
+<?cs call:class_table("Interfaces", package.interfaces) ?>
+<?cs call:class_table("Classes", package.classes) ?>
+<?cs call:class_table("Enums", package.enums) ?>
+<?cs call:class_table("Exceptions", package.exceptions) ?>
+<?cs call:class_table("Errors", package.errors) ?>
+
+<?cs include:"footer.cs" ?>
+</div><!-- end jd-content -->
+</div><!-- doc-content -->
+
+<?cs include:"trailer.cs" ?>
+
+</body>
+</html>
diff --git a/tools/droiddoc/templates-ds/packages.cs b/tools/droiddoc/templates-ds/packages.cs
new file mode 100644
index 0000000..552c70f
--- /dev/null
+++ b/tools/droiddoc/templates-ds/packages.cs
@@ -0,0 +1,43 @@
+<?cs include:"doctype.cs" ?>
+<?cs include:"macros.cs" ?>
+<html devsite>
+<?cs include:"head_tag.cs" ?>
+<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
+ <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ elif:design ?>design<?cs
+ elif:distribute ?>distribute<?cs
+ /if ?>">
+ <a name="top"></a>
+<?cs include:"header.cs" ?>
+
+<div class="col-12" id="doc-col">
+
+<div id="jd-header">
+<h1><?cs var:page.title ?></h1>
+</div>
+
+<div id="jd-content">
+
+<div class="jd-descr">
+<p><?cs call:tag_list(root.descr) ?></p>
+</div>
+
+<?cs set:count = #1 ?>
+<table class="jd-sumtable">
+<?cs each:pkg = docs.packages ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:pkg.since ?>" >
+ <td class="jd-linkcol"><?cs call:package_link(pkg) ?></td>
+ <td class="jd-descrcol" width="100%"><?cs call:tag_list(pkg.shortDescr) ?></td>
+ </tr>
+<?cs set:count = count + #1 ?>
+<?cs /each ?>
+</table>
+
+<?cs include:"footer.cs" ?>
+</div><!-- end jd-content -->
+</div> <!-- end doc-content -->
+
+<?cs include:"trailer.cs" ?>
+
+</body>
+</html>
diff --git a/tools/droiddoc/templates-ds/sampleindex.cs b/tools/droiddoc/templates-ds/sampleindex.cs
new file mode 100644
index 0000000..9579dfc
--- /dev/null
+++ b/tools/droiddoc/templates-ds/sampleindex.cs
@@ -0,0 +1,53 @@
+<?cs include:"doctype.cs" ?>
+<?cs include:"macros.cs" ?>
+<?cs set:resources="true" ?>
+<html devsite>
+<?cs include:"head_tag.cs" ?>
+<?cs include:"header.cs" ?>
+<body class="gc-documentation">
+
+
+<a name="top"></a>
+<div class="g-unit" id="doc-content">
+ <div id="jd-header" class="guide-header">
+ <span class="crumb">
+ <a href="<?cs var:toroot ?>resources/browser.html?tag=sample">Sample Code</a> >
+ </span>
+ <h1><?cs var:page.title ?></h1>
+ </div>
+
+<div id="jd-content">
+<p><a href="../index.html">&larr; Back</a></p>
+
+<?cs var:summary ?>
+
+ <?cs if:subcount(subdirs) ?>
+ <h2>Subdirectories</h2>
+ <ul class="nolist">
+ <?cs each:dir=subdirs ?>
+ <li><a href="<?cs var:dir.name ?>/index.html"><?cs
+ var:dir.name ?>/</a></li>
+ <?cs /each ?>
+ </ul>
+ <?cs /if ?>
+
+ <?cs if:subcount(files) ?>
+ <h2>Files</h2>
+ <ul class="nolist">
+ <?cs each:file=files ?>
+ <li><a href="<?cs var:file.href ?>"><?cs
+ var:file.name ?></a></li>
+ <?cs /each ?>
+ </ul>
+ <?cs /if ?>
+
+</div><!-- end jd-content -->
+
+<?cs include:"footer.cs" ?>
+
+</div><!-- end doc-content -->
+
+<?cs include:"trailer.cs" ?>
+
+</body>
+</html>
diff --git a/tools/droiddoc/templates-ds/sdkpage.cs b/tools/droiddoc/templates-ds/sdkpage.cs
new file mode 100644
index 0000000..3b4ea85
--- /dev/null
+++ b/tools/droiddoc/templates-ds/sdkpage.cs
@@ -0,0 +1,492 @@
+<?cs include:"doctype.cs" ?>
+<?cs include:"macros.cs" ?>
+<html devsite>
+<?cs if:sdk.redirect ?>
+ <head>
+ <title>Redirecting...</title>
+ <meta http-equiv="refresh" content="0;url=<?cs var:toroot ?>sdk/<?cs
+ if:sdk.redirect.path ?><?cs var:sdk.redirect.path ?><?cs
+ else ?>index.html<?cs /if ?>">
+ <link href="<?cs var:toroot ?>assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+ </head>
+<?cs else ?>
+ <?cs include:"head_tag.cs" ?>
+<?cs /if ?>
+<body class="gc-documentation
+ <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ elif:design ?>design<?cs
+ elif:distribute ?>distribute<?cs
+ /if ?>" itemscope itemtype="http://schema.org/CreativeWork">
+ <a name="top"></a>
+<?cs include:"header.cs" ?>
+
+
+<div <?cs if:fullpage
+?><?cs else
+?>class="col-13" id="doc-col"<?cs /if ?> >
+
+<?cs if:sdk.redirect ?>
+
+<div class="g-unit">
+ <div id="jd-content">
+ <p>Redirecting to
+ <a href="<?cs var:toroot ?>sdk/<?cs
+ if:sdk.redirect.path ?><?cs var:sdk.redirect.path ?><?cs
+ else ?>index.html<?cs /if ?>"><?cs
+ if:sdk.redirect.path ?><?cs var:sdk.redirect.path ?><?cs
+ else ?>Download the SDK<?cs /if ?>
+ </a> ...</p>
+
+<?cs else ?>
+<?cs # else, if NOT redirect ...
+#
+#
+# The following is for SDK/NDK pages
+#
+#
+?>
+
+<?cs if:header.hide ?><?cs else ?>
+<h1 itemprop="name"><?cs var:page.title ?></h1>
+<?cs /if ?>
+ <div id="jd-content" itemprop="description">
+
+<?cs if:sdk.not_latest_version ?>
+ <div class="special">
+ <p><strong>This is NOT the current Android SDK release.</strong></p>
+ <p><a href="/sdk/index.html">Download the current Android SDK</a></p>
+ </div>
+<?cs /if ?>
+
+
+<?cs if:ndk ?>
+<?cs #
+#
+#
+#
+#
+#
+#
+# the following is for the NDK
+#
+# (nested in if/else redirect)
+#
+#
+#
+#
+?>
+
+ <table class="download" id="download-table">
+ <tr>
+ <th>Platform</th>
+ <th>Package</th>
+ <th>Size</th>
+ <th>MD5 Checksum</th>
+ </tr>
+ <tr>
+ <td>Windows</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.win_download ?>"><?cs var:ndk.win_download ?></a>
+ </td>
+ <td><?cs var:ndk.win_bytes ?> bytes</td>
+ <td><?cs var:ndk.win_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Mac OS X (intel)</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.mac_download ?>"><?cs var:ndk.mac_download ?></a>
+ </td>
+ <td><?cs var:ndk.mac_bytes ?> bytes</td>
+ <td><?cs var:ndk.mac_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux 32/64-bit (x86)</td>
+ <td>
+ <a onClick="return onDownload(this)"
+ href="http://dl.google.com/android/ndk/<?cs var:ndk.linux_download ?>"><?cs var:ndk.linux_download ?></a>
+ </td>
+ <td><?cs var:ndk.linux_bytes ?> bytes</td>
+ <td><?cs var:ndk.linux_checksum ?></td>
+ </tr>
+ </table>
+
+ <?cs ######## HERE IS THE JD DOC CONTENT ######### ?>
+ <?cs call:tag_list(root.descr) ?>
+
+
+
+<script>
+ function onDownload(link) {
+
+ $("#downloadForRealz").html("Download " + $(link).text());
+ $("#downloadForRealz").attr('href',$(link).attr('href'));
+
+ $("#tos").fadeIn('slow');
+
+ location.hash = "download";
+ return false;
+ }
+
+
+ function onAgreeChecked() {
+ if ($("input#agree").is(":checked")) {
+ $("a#downloadForRealz").removeClass('disabled');
+ } else {
+ $("a#downloadForRealz").addClass('disabled');
+ }
+ }
+
+ function onDownloadNdkForRealz(link) {
+ if ($("input#agree").is(':checked')) {
+ $("#tos").fadeOut('slow');
+
+ $('html, body').animate({
+ scrollTop: $("#Installing").offset().top
+ }, 800, function() {
+ $("#Installing").click();
+ });
+
+ return true;
+ } else {
+ $("label#agreeLabel").parent().stop().animate({color: "#258AAF"}, 200,
+ function() {$("label#agreeLabel").parent().stop().animate({color: "#222"}, 200)}
+ );
+ return false;
+ }
+ }
+
+ $(window).hashchange( function(){
+ if (location.hash == "") {
+ location.reload();
+ }
+ });
+
+</script>
+
+ <?cs else ?>
+<?cs # end if NDK ...
+#
+#
+#
+#
+#
+#
+# the following is for the SDK
+#
+# (nested in if/else redirect and if/else NDK)
+#
+#
+#
+#
+?>
+ <?cs if:android.whichdoc == "online" ?>
+
+
+<?cs ######## HERE IS THE JD DOC CONTENT FOR ONLINE ######### ?>
+<?cs call:tag_list(root.descr) ?>
+
+
+
+
+<h4><a href='' class="expandable"
+ onclick="toggleExpandable(this,'.pax');hideExpandable('.myide,.reqs');return false;"
+ >DOWNLOAD FOR OTHER PLATFORMS</a></h4>
+
+
+<div class="pax col-13 online" style="display:none;margin:0;">
+
+
+<p class="table-caption"><strong>ADT Bundle</strong></p>
+ <table class="download">
+ <tr>
+ <th>Platform</th>
+ <th>Package</th>
+ <th>Size</th>
+ <th>MD5 Checksum</th>
+ </tr>
+ <tr>
+ <td>Windows 32-bit</td>
+ <td>
+ <a onClick="return onDownload(this)" id="win-bundle32"
+ href="http://dl.google.com/android/adt/<?cs var:sdk.win32_bundle_download ?>"><?cs var:sdk.win32_bundle_download ?></a>
+ </td>
+ <td><?cs var:sdk.win32_bundle_bytes ?> bytes</td>
+ <td><?cs var:sdk.win32_bundle_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Windows 64-bit</td>
+ <td>
+ <a onClick="return onDownload(this)" id="win-bundle64"
+ href="http://dl.google.com/android/adt/<?cs var:sdk.win64_bundle_download ?>"><?cs var:sdk.win64_bundle_download ?></a>
+ </td>
+ <td><?cs var:sdk.win64_bundle_bytes ?> bytes</td>
+ <td><?cs var:sdk.win64_bundle_checksum ?></td>
+ </tr>
+ <tr>
+ <td><nobr>Mac OS X 64-bit</nobr></td>
+ <td>
+ <a onClick="return onDownload(this)" id="mac-bundle64"
+ href="http://dl.google.com/android/adt/<?cs var:sdk.mac64_bundle_download ?>"><?cs var:sdk.mac64_bundle_download ?></a>
+ </td>
+ <td><?cs var:sdk.mac64_bundle_bytes ?> bytes</td>
+ <td><?cs var:sdk.mac64_bundle_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux 32-bit</td>
+ <td>
+ <a onClick="return onDownload(this)" id="linux-bundle32"
+ href="http://dl.google.com/android/adt/<?cs var:sdk.linux32_bundle_download ?>"><?cs var:sdk.linux32_bundle_download ?></a>
+ </td>
+ <td><?cs var:sdk.linux32_bundle_bytes ?> bytes</td>
+ <td><?cs var:sdk.linux32_bundle_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux 64-bit</td>
+ <td>
+ <a onClick="return onDownload(this)" id="linux-bundle64"
+ href="http://dl.google.com/android/adt/<?cs var:sdk.linux64_bundle_download ?>"><?cs var:sdk.linux64_bundle_download ?></a>
+ </td>
+ <td><?cs var:sdk.linux64_bundle_bytes ?> bytes</td>
+ <td><?cs var:sdk.linux64_bundle_checksum ?></td>
+ </tr>
+ </table>
+
+
+<p class="table-caption"><strong>SDK Tools Only</strong></p>
+ <table class="download">
+ <tr>
+ <th>Platform</th>
+ <th>Package</th>
+ <th>Size</th>
+ <th>MD5 Checksum</th>
+ </tr>
+ <tr>
+ <td rowspan="2">Windows</td>
+ <td>
+ <a onclick="return onDownload(this)" href="http://dl.google.com/android/<?cs var:sdk.win_download
+?>"><?cs var:sdk.win_download ?></a>
+ </td>
+ <td><?cs var:sdk.win_bytes ?> bytes</td>
+ <td><?cs var:sdk.win_checksum ?></td>
+ </tr>
+ <tr>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this)" id="win-tools" href="http://dl.google.com/android/<?cs
+var:sdk.win_installer
+?>"><?cs var:sdk.win_installer ?></a> (Recommended)
+ </td>
+ <td><?cs var:sdk.win_installer_bytes ?> bytes</td>
+ <td><?cs var:sdk.win_installer_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Mac OS X</td>
+ <td>
+ <a onclick="return onDownload(this)" id="mac-tools" href="http://dl.google.com/android/<?cs
+var:sdk.mac_download
+?>"><?cs var:sdk.mac_download ?></a>
+ </td>
+ <td><?cs var:sdk.mac_bytes ?> bytes</td>
+ <td><?cs var:sdk.mac_checksum ?></td>
+ </tr>
+ <tr>
+ <td>Linux</td>
+ <td>
+ <a onclick="return onDownload(this)" id="linux-tools" href="http://dl.google.com/android/<?cs
+var:sdk.linux_download
+?>"><?cs var:sdk.linux_download ?></a>
+ </td>
+ <td><?cs var:sdk.linux_bytes ?> bytes</td>
+ <td><?cs var:sdk.linux_checksum ?></td>
+ </tr>
+ </table>
+
+</div><!-- end pax -->
+
+
+
+</div><!-- end col-13 for lower-half content -->
+
+
+
+
+<script>
+ if (location.hash == "#Requirements") {
+ $('.reqs').show();
+ } else if (location.hash == "#ExistingIDE") {
+ $('.ide').show();
+ }
+
+ var os;
+ var bundlename;
+ var $toolslink;
+
+ if (navigator.appVersion.indexOf("Win")!=-1) {
+ os = "Windows";
+ bundlename = '#win-bundle';
+ $toolslink = $('#win-tools');
+ } else if (navigator.appVersion.indexOf("Mac")!=-1) {
+ os = "Mac";
+ bundlename = '#mac-bundle';
+ $toolslink = $('#mac-tools');
+ } else if (navigator.appVersion.indexOf("Linux")!=-1) {
+ os = "Linux";
+ bundlename = '#linux-bundle';
+ $toolslink = $('#linux-tools');
+ }
+
+ if (os) {
+ $('#not-supported').hide();
+
+ /* set up primary adt download button */
+ $('#download-bundle-button').show();
+ $('#download-bundle-button').append("Download the SDK <br/><span class='small'>ADT Bundle for " + os + "</span>");
+ $('#download-bundle-button').click(function() {return onDownload(this,true,true);}).attr('href', bundlename);
+
+ /* set up sdk tools only button */
+ $('#download-tools-button').show();
+ $('#download-tools-button').append("Download the SDK Tools for " + os);
+ $('#download-tools-button').click(function() {return onDownload(this,true);}).attr('href', $toolslink.attr('href'));
+ } else {
+ $('.pax').show();
+ }
+
+
+ function onDownload(link, button, bundle) {
+
+ /* set text for download button */
+ if (button) {
+ $("#downloadForRealz").html($(link).text());
+ } else {
+ $("#downloadForRealz").html("Download " + $(link).text());
+ }
+
+ /* if it's a bundle, show the 32/64-bit picker */
+ if (bundle) {
+ $("#downloadForRealz").attr('bundle','true');
+ if ($("#downloadForRealz").text().indexOf("Mac") == -1) {
+ $("p#bitpicker").show();
+ } else {
+ /* mac is always 64 bit, so set it checked */
+ $("p#bitpicker input[value=64]").attr('checked', true);
+ }
+ /* save link name until the bit version is chosen */
+ $("#downloadForRealz").attr('name',$(link).attr('href'));
+ } else {
+ /* if not using bundle, set download button to ignore bitpicker and set url */
+ $("#downloadForRealz").attr('bundle','false');
+ $("#downloadForRealz").attr('href',$(link).attr('href'));
+ /* set picker checked as a fake default */
+ $("p#bitpicker input[value=64]").attr('checked', true);
+ $("a#next-link").html("Setting Up an Existing IDE").attr('href',toRoot + 'sdk/installing/index.html');
+ }
+
+ $("#tos").fadeIn('fast');
+ $("#landing").fadeOut('fast');
+
+ location.hash = "download";
+ return false;
+ }
+
+
+ function onAgreeChecked() {
+ /* verify that the TOS is agreed and a bit version is chosen */
+ if ($("input#agree").is(":checked") && $("#bitpicker input:checked").length) {
+
+ /* if downloading the bundle */
+ if ($("#downloadForRealz").attr('bundle')) {
+ /* construct the name of the link we want based on the bit version */
+ linkId = $("a#downloadForRealz").attr("name") + $("#bitpicker input:checked").val();
+ /* set the real url for download */
+ $("a#downloadForRealz").attr("href", $(linkId).attr("href"));
+ }
+
+ /* reveal the download button */
+ $("a#downloadForRealz").removeClass('disabled');
+ } else {
+ $("a#downloadForRealz").addClass('disabled');
+ }
+ }
+
+ function onDownloadForRealz(link) {
+ if ($("input#agree").is(':checked') && $("#bitpicker input:checked").length) {
+ $("div.sdk-terms").slideUp();
+ $("#sdk-terms-form,.sdk-terms-intro").fadeOut('slow');
+ $("#next-steps").fadeIn('slow');
+ $("h1#tos-header").text('Get Ready to Code!');
+ return true;
+ } else {
+ $("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#258AAF"}, 200,
+ function() {$("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#222"}, 200)}
+ );
+ return false;
+ }
+ }
+
+ $(window).hashchange( function(){
+ if (location.hash == "") {
+ location.reload();
+ }
+ });
+
+</script>
+
+
+
+</div><!-- end the wrapper used for relative/absolute positions -->
+<?cs # THIS DIV WAS OPENED IN INDEX.JD ?>
+
+
+
+
+ <?cs else ?> <?cs # end if online ?>
+
+ <?cs if:sdk.preview ?><?cs # it's preview offline docs ?>
+ <p>Welcome developers! We are pleased to provide you with a preview SDK for the upcoming
+ Android 3.0 release, to give you a head-start on developing applications for it.
+ </p>
+
+ <p>See the <a
+ href="<?cs var:toroot ?>sdk/preview/start.html">Getting Started</a> document for more information
+ about how to set up the preview SDK and get started.</p>
+ <style type="text/css">
+ .non-preview { display:none; }
+ </style>
+
+ <?cs else ?><?cs # it's normal offline docs ?>
+
+ <?cs ######## HERE IS THE JD DOC CONTENT FOR OFFLINE ######### ?>
+ <?cs call:tag_list(root.descr) ?>
+ <style type="text/css">
+ body .offline { display:block; }
+ body .online { display:none; }
+ </style>
+ <script>
+ $('.reqs').show();
+ </script>
+ <?cs /if ?>
+
+ <?cs /if ?> <?cs # end if/else online ?>
+
+<?cs /if ?> <?cs # end if/else NDK ?>
+
+<?cs /if ?> <?cs # end if/else redirect ?>
+
+
+</div><!-- end jd-content -->
+
+<?cs if:!sdk.redirect ?>
+<?cs include:"footer.cs" ?>
+<?cs /if ?>
+
+</div><!-- end g-unit -->
+
+<?cs include:"trailer.cs" ?>
+
+</body>
+</html>
+
+
+
diff --git a/tools/droiddoc/templates-ds/timestamp.cs b/tools/droiddoc/templates-ds/timestamp.cs
new file mode 100644
index 0000000..4bf502a
--- /dev/null
+++ b/tools/droiddoc/templates-ds/timestamp.cs
@@ -0,0 +1 @@
+var BUILD_TIMESTAMP = "<?cs var:page.now ?>";
diff --git a/tools/droiddoc/templates-ds/trailer.cs b/tools/droiddoc/templates-ds/trailer.cs
new file mode 100644
index 0000000..1cf8793
--- /dev/null
+++ b/tools/droiddoc/templates-ds/trailer.cs
@@ -0,0 +1,48 @@
+</div> <!-- end body-content --> <?cs # normally opened by header.cs ?>
+
+
+
+
+<!-- Grid - for dev
+<script type="text/javascript">
+
+window.gOverride = {
+ gColor: '#FF0000',
+ pColor: '#EEEEEE',
+ gOpacity: 0.10,
+ pOpacity: 0.40,
+ pHeight: 16,
+ pOffset: 2,
+ gColumns:16,
+ gEnabled:false,
+ pEnabled:false
+ }
+</script>
+
+<link href="<?cs var:toroot ?>assets/js/grid/960.gridder.css" rel="stylesheet" type="text/css">
+<script src="<?cs var:toroot ?>assets/js/grid/960.gridder.js" type="text/javascript"></script>
+-->
+
+
+
+<?cs if:carousel ?>
+<script type="text/javascript">
+$('.slideshow-container').dacSlideshow({
+ btnPrev: '.slideshow-prev',
+ btnNext: '.slideshow-next',
+ btnPause: '#pauseButton'
+});
+</script>
+<?cs /if ?>
+<?cs if:tabbedList ?>
+<script type="text/javascript">
+$(".feed").dacTabbedList({
+ nav_id: '.feed-nav',
+ frame_id: '.feed-frame'
+});
+</script>
+<?cs /if ?>
+<script type="text/javascript">
+init(); /* initialize android-developer-docs.js */
+</script>
+
diff --git a/tools/droiddoc/templates-sdk/assets/css/default.css b/tools/droiddoc/templates-sdk/assets/css/default.css
index f56fc98..20e462c 100644
--- a/tools/droiddoc/templates-sdk/assets/css/default.css
+++ b/tools/droiddoc/templates-sdk/assets/css/default.css
@@ -3,11 +3,15 @@
/* clearfix idiom */
/* common mixins */
/* page layout + top-level styles */
-::-webkit-selection,
-::-moz-selection,
::selection {
background-color: #0099cc;
color: #fff; }
+::-webkit-selection {
+ background-color: #0099cc;
+ color: #fff; }
+::-moz-selection {
+ background-color: #0099cc;
+ color: #fff; }
html, body {
height: 100%;
@@ -112,6 +116,11 @@ acronym:hover {
a:focus,
a:active {
color: #33b5e5 !important; }
+
+a.external-link {
+ background:url('../images/styles/open_new_page.png') no-repeat 100% 50%;
+ padding-right:16px;
+}
img {
border: none; }
@@ -129,11 +138,14 @@ strong {
em {
font-style: italic; }
-acronym {
+acronym,
+.tooltip-link {
border-bottom: 1px dotted #555555;
cursor: help; }
-acronym:hover {
+acronym:hover,
+.tooltip-link:hover {
+ color: #7aa1b0;
border-bottom-color: #7aa1b0; }
img.with-shadow,
@@ -263,7 +275,8 @@ video.with-shadow {
line-height: 15px; }
#nav a {
color: #555555;
- text-decoration: none; }
+ text-decoration: none;
+ word-wrap:break-word; }
#nav .nav-section-header {
position: relative;
margin-bottom: 1px;
@@ -317,13 +330,32 @@ video.with-shadow {
background: transparent; }
#nav li.expanded li ul {
/* 3rd level ul */
- padding:0 10px;
+ padding:0 0 0 10px;
}
#nav li.expanded > .nav-section-header:after {
content: '';
background: transparent url(../images/styles/disclosure_up.png) no-repeat scroll 50% 50%;
width: 34px;
height: 34px; }
+ #nav li.expanded li ul.tree-list-children {
+ padding:0;
+ }
+ #nav li.expanded li ul.tree-list-children .tree-list-children {
+ padding:0 0 0 10px;
+ }
+ #nav li span.tree-list-subtitle {
+ display:inline-block;
+ padding:5px 0 0 10px;
+ color:#555;
+ text-transform:uppercase;
+ font-size:12px;
+ }
+ #nav li span.tree-list-subtitle:before {
+ content: '—';
+ }
+ #nav li span.tree-list-subtitle:after {
+ content: '—';
+ }
#nav li ul {
display:none;
overflow: hidden;
@@ -348,11 +380,16 @@ video.with-shadow {
#nav li ul > li:last-child {
padding-bottom:5px;
}
+ #nav li ul.tree-list-children > li:last-child {
+ padding-bottom:0;
+ }
#nav li.expanded ul > li {
background:#efefef;
background: rgba(0, 0, 0, 0.03); }
#nav li.expanded ul > li li {
background:inherit; }
+ #nav li ul.tree-list-children ul {
+ display:block; }
.new,
.new-child {
@@ -445,21 +482,23 @@ video.with-shadow {
border:1px solid #DADADA;
border-bottom:0;
}
-
+
.training-nav-top a.next-page-link {
border-left:0;
width:123px;
}
+ .paging-links a.disabled,
.training-nav-top a.disabled,
.content-footer a.disabled {
- color:#999;
+ color:#bbb;
}
+ .paging-links a.disabled:hover,
.training-nav-top a.disabled:hover,
.content-footer a.disabled:hover {
cursor:default;
- color:#999 !important;
+ color:#bbb !important;
}
.training-nav-top a.start-class-link,
@@ -467,6 +506,78 @@ video.with-shadow {
width:262px;
}
+ /* list of classes on course landing page */
+ ol.class-list {
+ list-style:none;
+ margin-left:0;
+ }
+ ol.class-list>li {
+ margin:0 0 15px;
+ padding:5px 0 0;
+ overflow:hidden;
+ border-top:1px solid #ccc;
+ }
+ ol.class-list li a.title {
+ font-size:16px;
+ margin:0;
+ clear:left;
+ display:block;
+ height:32px;
+ padding:0 4px;
+ }
+ ol.class-list li a.title h2 {
+ color:inherit;
+ margin:0 0 10px;
+ display:block;
+ float:left;
+ width:675px;
+ }
+ ol.class-list li a.title span {
+ display:none;
+ float:left;
+ font-size:18px;
+ font-weight:bold;
+ background: transparent url(../images/styles/disclosure_right.png) no-repeat scroll 50% 50%;
+ width: 10px;
+ height: 32px;
+ }
+ ol.class-list li a.title:hover {
+ background:#ddd;
+ color:#258AAF !important;
+ }
+ ol.class-list li a.title:hover span {
+ display:block;
+ }
+
+ #jd-content
+ ol.class-list li img {
+ float:left;
+ clear:left;
+ width:64px;
+ margin:0 20px 0 0;
+ }
+ ol.class-list li p.description {
+ float:left;
+ display:block;
+ width:250px;
+ margin:0;
+ }
+ ol.class-list li p.description.article {
+ width: 550px;
+ }
+ ol.class-list ol {
+ float:left;
+ width:320px;
+ margin:0 0 0 30px;
+ list-style:none;
+ margin:0 0 0 20px;
+ }
+ ol.class-list div.lessons li {
+ margin:0 0 6px;
+ line-height:16px;
+ }
+
+
.hide {
display:none !important;
}
@@ -483,6 +594,49 @@ video.with-shadow {
float:right;
text-transform:uppercase;
}
+
+
+
+ /* inner-doc tabs w/ title */
+
+div#title-tabs-wrapper {
+ border-bottom:1px solid #ccc;
+ margin:20px 0 30px;
+}
+h1.with-title-tabs {
+ display:inline-block;
+ margin:0 0 -1px 0;
+ padding:0 60px 0 0;
+ border-bottom:1px solid #F9F9F9;
+}
+ul#title-tabs {
+ list-style:none;
+ padding:0;
+ height:29px;
+ margin:0;
+ font-size:16px;
+ line-height:26px;
+ display:inline-block;
+ vertical-align:bottom;
+}
+ul#title-tabs li {
+ display:block;
+ float:left;
+ margin-right:40px;
+ border-bottom: 3px solid transparent;
+}
+ul#title-tabs li.selected {
+ border-bottom: 3px solid #93C;
+}
+ul#title-tabs li a {
+ color:#333;
+}
+ul#title-tabs li a:hover,
+ul#title-tabs li a:active {
+ color:#93C !important;
+}
+
+
/* content body */
@-webkit-keyframes glowheader {
@@ -842,9 +996,9 @@ fieldset, iframe, img {
border: 0;
}
img {
- -ms-interpolation-mode: bicubic;
- vertical-align: middle;
- max-width: 100%;
+ -ms-interpolation-mode: bicubic;
+ vertical-align: middle;
+ max-width: 100%;
}
q {
quotes: none;
@@ -876,7 +1030,7 @@ h1.short {
margin-right:320px;
}
h1.super {
- font-size: 37px;
+ font-size: 37px;
}
h2 {
color:#333;
@@ -894,29 +1048,29 @@ h3, h4 {
margin: 10px 0;
}
h4 {
- font-size: 16px;
+ font-size: 16px;
}
h5 {
- font-size: 14px;
+ font-size: 14px;
}
h5, h6 {
- margin: 5px 0;
+ margin: 5px 0;
}
h6 {
- font-size: 12px;
+ font-size: 12px;
}
hr { /* applied to the bottom of h2 elements */
- height: 1px;
- margin: 5px 0 20px;
- border: 0;
- background: #ccc;
+ height: 1px;
+ margin: 5px 0 20px;
+ border: 0;
+ background: #ccc;
}
p, pre, table, form {
margin: 0 0 15px;
}
small {
- font-size: 11.5px;
- color: #000;
+ font-size: 11.5px;
+ color: #000;
}
ul, ol {
margin: 0 0 15px 18px;
@@ -938,9 +1092,12 @@ dd {
dd p {
margin:10px 0 0;
}
-ul p,
-ol p {
- margin:5px 0 0;
+li p,
+li pre,
+li ul,
+li ol {
+ margin-top:5px;
+ margin-bottom:5px;
}
pre strong, pre b, a strong, a b, a code {
color: inherit;
@@ -951,6 +1108,7 @@ pre, code {
}
code {
font-weight:bold;
+ font: 14px/14px 'courier new', courier, monospace;
}
legend {
@@ -985,6 +1143,9 @@ td {
background-color:inherit;
border:solid 1px #DDD;
}
+td *:last-child {
+ margin-bottom:0;
+}
th {
background-color: #999;
color: #fff;
@@ -1021,8 +1182,8 @@ color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
width:auto;
}
#footer-local ul {
- list-style: none;
- margin: 5px 0 30px 0;
+ list-style: none;
+ margin: 5px 0 30px 0;
}
#footer-local li {
display: inline;
@@ -1030,11 +1191,11 @@ color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
#footer-local li+li:before {
content: '|';
padding: 0 3px;
- color: #e5e5e5;
+ color: #e5e5e5;
}
#footer-global {
padding: 10px 15px;
- background: #f5f5f5;
+ background: #f5f5f5;
}
#footer-global {
border-top: 1px solid #ebebeb;
@@ -1077,7 +1238,7 @@ color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
padding: 0 24px 0 0;
}
.locales form {
- margin: 0;
+ margin: 0;
}
.locales select, .sites select {
line-height: 3.08;
@@ -1170,15 +1331,15 @@ color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
@media screen, projection, print {
.full {
- padding: 2.5em 0;
- border-top: solid 1px #ddd;
- border-bottom: solid 1px #ddd;
- background: #f7f7f7;
+ padding: 2.5em 0;
+ border-top: solid 1px #ddd;
+ border-bottom: solid 1px #ddd;
+ background: #f7f7f7;
}
.wrap {
- margin: 0 auto;
- width: 940px;
- clear: both;
+ margin: 0 auto;
+ width: 940px;
+ clear: both;
}
.cols {
height: 1%;
@@ -1197,9 +1358,9 @@ color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
.col-13, .col-14, .col-15, .col-16 {
display: inline;
- float: left;
- margin-left: 10px;
- margin-right: 10px;
+ float: left;
+ margin-left: 10px;
+ margin-right: 10px;
}
/*
* html .col-1, * html .col-2, * html .col-3, * html .col-4, * html .col-5, * html .col-6, * html
@@ -1250,19 +1411,19 @@ color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
Header, Login, Nav-X, Search
*/
#header {
- padding: 2.2em 0 0.2em 0;
+ padding: 2.2em 0 0.2em 0;
}
#header:before, #header:after {
- content: "";
- display: table;
- clear: both
+ content: "";
+ display: table;
+ clear: both
}
.logo, .nav-x {
float: left;
}
.nav-x {
margin-top: -2px;
- list-style-type: none;
+ list-style-type: none;
}
.nav-x a {
color: #333;
@@ -1285,30 +1446,30 @@ Header, Login, Nav-X, Search
margin-right: 45px;
}
.search {
- float: right;
- position: relative;
- width: 220px
+ float: right;
+ position: relative;
+ width: 220px
}
.search .bottom, .search .left, .search .right {
- position: absolute;
- background-color: #a3a3a3;
+ position: absolute;
+ background-color: #a3a3a3;
}
.search .bottom {
- width: 220px;
- height: 1px;
- top: 24px;
- left: 0
+ width: 220px;
+ height: 1px;
+ top: 24px;
+ left: 0
}
-.search .left, .search .right {
- height: 5px;
- width: 1px
+.search .left, .search .right {
+ height: 5px;
+ width: 1px
}
-.search .left { top: 19px; left: 0 }
+.search .left { top: 19px; left: 0 }
.search .right { top: 19px; right: 0 }
.search form {
- float: left;
- margin-top: 2px;
- width: inherit;
+ float: left;
+ margin-top: 2px;
+ width: inherit;
}
.search .close,
#player-frame .close {
@@ -1331,76 +1492,77 @@ Header, Login, Nav-X, Search
top: 6px;
}
.search form input {
- color: #999;
- font-size: 1em;
- width: inherit;
- border: none;
- margin: 0;
- padding:0 0 0 6px;
- z-index: 1500;
- background-color: transparent
+ color: #999;
+ font-size: 1em;
+ width: inherit;
+ border: none;
+ margin: 0;
+ padding:0 0 0 6px;
+ z-index: 1500;
+ background-color: transparent
}
.search:hover .bottom, .search:hover .left, .search:hover .right {
- background-color: #33b5e5;
+ background-color: #33b5e5;
}
.search:hover .icon {
- background-position: -8px 0
+ background-position: -8px 0
}
.search form input:focus {
- color: #222;
- font-weight: bold;
- outline:0;
+ color: #222;
+ font-weight: bold;
+ outline:0;
}
/* Search Dropdown */
.search-dropdown {
- padding: 15px;
- width: 192px;
- border: solid 1px #c5c5c5;
- background: #fff;
- position: absolute;
- top: 35px;
- left: 0;
- -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- box-shadow: 0 0 10px rgba(0,0,0,0.2)
+ padding: 15px;
+ width: 192px;
+ border: solid 1px #c5c5c5;
+ background: #fff;
+ position: absolute;
+ top: 35px;
+ left: 0;
+ -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
+ -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.2);
+ box-shadow: 0 0 10px rgba(0,0,0,0.2)
}
.search-dropdown ul, .search-dropdown ul li {
- list-style-type: none;
- margin: 0;
- padding: 0
+ list-style-type: none;
+ margin: 0;
+ padding: 0
}
.search-dropdown ul li {
- clear: both
+ clear: both
}
.search-dropdown img {
- float: left;
- margin: 0 10px 10px 0
+ float: left;
+ margin: 0 10px 10px 0
}
.search-dropdown h6 {
- color: #222;
- margin: 0;
- line-height: normal
+ color: #222;
+ margin: 0;
+ line-height: normal
}
.search-dropdown .desc {
- color: #999;
- font-size: 11.5px;
- line-height: normal;
- margin: 0;
+ color: #999;
+ font-size: 11.5px;
+ line-height: normal;
+ margin: 0;
}
.search-dropdown li a:hover h6, .search-dropdown li a:hover .desc {
- color: #33b5e5
+ color: #33b5e5
}
/* --------------------------------------------------------------------------
Buttons
*/
.button, a.button, .button-secondary, a.button-secondary {
- border-image: initial;
+ border-image: initial;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
cursor: pointer;
}
.button, a.button {
+ display:inline-block;
background-color: #09c;
background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
background-image: -webkit-linear-gradient(top, #2faddb, #09c);
@@ -1418,20 +1580,16 @@ Buttons
color: #444;
}
a.button, a.button:visited, a.button-secondary, a.button-secondary:visited {
- height: 28px;
- line-height: 28px;
margin-right: 16px;
- font-weight: 400;
+ font-weight: 400;
min-width: 54px;
outline: 0;
padding: 8px 15px;
text-align: center;
}
.button, .button-secondary {
- height: 34px;
- line-height: 34px;
margin-right: 16px;
- font-weight: 400;
+ font-weight: 400;
min-width: 54px;
outline: 0;
padding: 0 15px;
@@ -1455,6 +1613,9 @@ EndColorStr='#4cadcb',GradientType=0);
background-image: none;
border-color: #30b7e6;
}
+a.button.big.subtitle {
+ line-height:18px;
+}
.button-secondary:hover, a.button-secondary:hover {
border-color: #dbdbdb;
background-color: #f3f3f3;
@@ -1469,10 +1630,10 @@ EndColorStr='#ececec');
color: #33B5E5 !important;
}
.button-secondary:active, a.button-secondary:active {
- border-color: #dadada;
- background: #ebebeb; /* Old browsers */
- /* IE9 SVG, needs conditional override of 'filter' to 'none' */
- background:
+ border-color: #dadada;
+ background: #ebebeb; /* Old browsers */
+ /* IE9 SVG, needs conditional override of 'filter' to 'none' */
+ background:
url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/
Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0Jv
eD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+
@@ -1486,36 +1647,44 @@ CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNmY2ZjYiIHN0b3Atb3BhY2l0eT0i
R3JhZGllbnQ+
CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIg
Lz4KPC9zdmc+);
- background: -moz-linear-gradient(top, #ebebeb 0%, #f9f9f9 5%, #fafafa 50%, #f9f9f9 90%,
+ background: -moz-linear-gradient(top, #ebebeb 0%, #f9f9f9 5%, #fafafa 50%, #f9f9f9 90%,
#ffffff 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb),
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb),
color-stop(5%,#f9f9f9), color-stop(50%,#fafafa), color-stop(90%,#f9f9f9), color-stop(100%,#ffffff));
/* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9
+ background: -webkit-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9
90%,#ffffff 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
+ background: -o-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
+ background: -ms-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
100%); /* IE10+ */
- background: linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
+ background: linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebebeb',
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebebeb',
endColorstr='#ffffff',GradientType=0 ); /* IE6-8 */
- -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- color: #258AAF !important;
+ -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ color: #258AAF !important;
}
.button.big {
font-size:20px;
display:inline-block;
}
+.button.big span.small {
+ font-size:14px;
+}
+.button-caption {
+ margin-top:10px;
+ font-size:12px;
+ font-style:italic;
+}
.button.disabled,
.button.disabled:hover,
.button.disabled:active {
background:#ebebeb;
- color:#999;
+ color:#999 !important;
border-color:#999;
cursor:default;
}
@@ -1735,14 +1904,14 @@ ul ul {
margin-bottom: 15px;
}
.checkbox-group input {
- width: 13px;
- height: 13px;
- background: #fff;
- border: solid 1px #c6c6c6;
- float: left;
+ width: 13px;
+ height: 13px;
+ background: #fff;
+ border: solid 1px #c6c6c6;
+ float: left;
}
.article form .checkbox-group, .article form .radio-group {
- display: block
+ display: block
}
.article form select {
border: solid 1px #ebebeb;
@@ -1757,14 +1926,14 @@ ul ul {
}
.article form .browse .browse-msg {
- font-size: 11.5px;
+ font-size: 11.5px;
}
.article form .browse .button-secondary {
- height: auto;
- line-height: 25px;
- font-size: 11px;
- padding: 0 8px;
- margin: 0 10px 15px 0;
+ height: auto;
+ line-height: 25px;
+ font-size: 11px;
+ padding: 0 8px;
+ margin: 0 10px 15px 0;
}
.article form input[type='text'], .article form textarea {
border: 1px solid #ebebeb;
@@ -1772,7 +1941,7 @@ ul ul {
color: #222;
line-height: normal;
padding: 6px 10px;
- width: 300px;
+ width: 300px;
}
.article form textarea {
height: 150px;
@@ -1793,7 +1962,7 @@ ul ul {
}
form .form-error input[type='text'], form .form-error textarea {
border-color: #dd4b39;
- margin-right: 20px;
+ margin-right: 20px;
}
.aside {
-moz-border-radius: 2px;
@@ -1801,9 +1970,9 @@ form .form-error input[type='text'], form .form-error textarea {
border-radius: 2px;
margin: 10px 0;
padding: 20px;
- color: #666;
+ color: #666;
position: relative;
- background: #f9f9f9;
+ background: #f9f9f9;
}
/*
.aside, .notification, .promo {
@@ -1832,15 +2001,54 @@ form .form-error input[type='text'], form .form-error textarea {
border-color: #eff2f9;
}
*/
+
+/* SDK TOS styles */
+
+div.sdk-terms {
+ white-space: pre-wrap;
+ word-wrap: break-word;
+ font-family: inherit;
+ font-size: inherit;
+ padding: 10px;
+ height: 370px;
+ width: 738px;
+ border: 1px solid #444;
+ background: transparent;
+ overflow:auto;
+ margin:0 0 10px;
+}
+
+div.sdk-terms.fullsize {
+ padding: 0;
+ height: auto;
+ width: auto;
+ border:none;
+}
+
+div.sdk-terms h3,
+div.sdk-terms h2 {
+ margin:0;
+}
+
+div#sdk-terms-form {
+ padding:0 0 0 10px;
+}
+
+div#sdk-terms-form input {
+ display:inline;
+ margin:4px 4px 4px 0;
+}
+
+
/* --------------------------------------------------------------------------
Code Style
*/
pre {
- margin:0 0 1em 0;
- padding: 1em;
- overflow: auto;
- border: solid 1px #ddd;
- background: #f7f7f7;
+ margin:0 0 1em 0;
+ padding: 1em;
+ overflow: auto;
+ border: solid 1px #ddd;
+ background: #f7f7f7;
}
.str { color: #080; }
.kwd { color: #008; }
@@ -1859,8 +2067,8 @@ Three-Pane
*/
/* Package Nav & Classes Nav */
.three-pane {
- position: relative;
- border-top: solid 1px #ebebeb;
+ position: relative;
+ border-top: solid 1px #ebebeb;
}
#packages-nav .js-pane,
#classes-nav .js-pane {
@@ -1868,40 +2076,40 @@ Three-Pane
}
#packages-nav {
height:270px;
- max-height: inherit;
- overflow: hidden;
- position: relative;
+ max-height: inherit;
+ overflow: hidden;
+ position: relative;
}
#classes-nav {
- overflow: hidden;
- position: relative;
+ overflow: hidden;
+ position: relative;
}
#packages-nav ul, #classes-nav ul {
- list-style-type: none;
- margin: 10px 0 20px 0;
- padding: 0;
+ list-style-type: none;
+ margin: 10px 0 20px 0;
+ padding: 0;
}
#classes-nav li {
- font-weight: bold;
- margin: 5px 0;
+ font-weight: bold;
+ margin: 5px 0;
}
#packages-nav li,
#classes-nav li li {
- margin: 0;
+ margin: 0;
}
#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
#classes-nav li a, #classes-nav li a:active, #classes-nav li a:visited {
- padding: 0 0 0 4px;
+ padding: 0 0 0 4px;
}
#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
#classes-nav li li a, #classes-nav li li a:active, #classes-nav li li a:visited,
#nav-tree li a, #nav-tree li a:active, #nav-tree li a:visited {
- color: #222;
- font-weight: normal;
+ color: #222;
+ font-weight: normal;
}
#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
#classes-nav li li a, #classes-nav li li a:active, #classes-nav li li a:visited {
- display: block;
+ display: block;
}
#packages-nav li.selected a, #packages-nav li.selected a:active, #packages-nav li.selected
a:visited,
@@ -2020,27 +2228,27 @@ a:visited,
margin-right:0;
}
#doc-content-container {
- margin-left: 291px
+ margin-left: 291px
}
#doc-header, #doc-content {
- padding: 1em 2em;
+ padding: 1em 2em;
}
#doc-header {
- background: #f7f7f7;
+ background: #f7f7f7;
}
#doc-header h1 {
- line-height: 0;
- margin-bottom: 15px;
+ line-height: 0;
+ margin-bottom: 15px;
}
#api-info-block {
- float: right;
- font-weight: bold;
+ float: right;
+ font-weight: bold;
}
#api-info-block a, #api-info-block a:active, #api-info-block a:visited {
- color: #222;
+ color: #222;
}
#api-info-block a:hover, #api-info-block a:focus {
- color: #33B5E5;
+ color: #33B5E5;
}
#api-nav-header {
height:19px; /* plus 16px padding = 35; same as #nav li */
@@ -2162,31 +2370,31 @@ cursor: e-resize; width: 10px; right: 0; top: 0; height: 100%; border-right: sol
/* --------------------------------------------------------------------------
Lightbox
*/
-.lightbox {
- width: 769px;
- padding: 1.5em;
- margin: 0 auto;
- border: solid 1px #dcdcdc;
- background: #fff;
- -moz-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
- -webkit-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
- box-shadow: 1px 1px 5px rgba(0,0,0,0.1)
+.lightbox {
+ width: 769px;
+ padding: 1.5em;
+ margin: 0 auto;
+ border: solid 1px #dcdcdc;
+ background: #fff;
+ -moz-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
+ -webkit-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
+ box-shadow: 1px 1px 5px rgba(0,0,0,0.1)
}
.lightbox .header {
- float: left;
- width: 720px;
- margin: -10px 20px 10px 0;
+ float: left;
+ width: 720px;
+ margin: -10px 20px 10px 0;
}
.lightbox .close {
- float: right;
- width: 10px;
- height: 10px;
- margin: -10px -10px 10px 0;
- text-indent: -1000em;
- background: url(../images/close.png) no-repeat 0 0;
+ float: right;
+ width: 10px;
+ height: 10px;
+ margin: -10px -10px 10px 0;
+ text-indent: -1000em;
+ background: url(../images/close.png) no-repeat 0 0;
}
.lightbox .close:hover, .lightbox .close:focus {
- background-position: -10px 0;
+ background-position: -10px 0;
}
/* --------------------------------------------------------------------------
@@ -2195,29 +2403,32 @@ Misc
.clearfix:before, .clearfix:after {
- content: "";
- display: table
+ content: "";
+ display: table
}
.clearfix:after {
- clear: both
+ clear: both
}
.clearfix {
- *zoom: 1
+ *zoom: 1
}
table.blank th, table.blank td {
border: 0;
- background: none
+ background: none
}
.caption {
- margin: 0.5em 0 2em 0;
- color: #000;
- font-size: 11.5px;
+ margin: 0.5em 0 2em 0;
+ color: #000;
+ font-size: 11.5px;
}
.nolist {
list-style:none;
margin-left:0;
}
+#tb .nolist {
+ margin-left:15px;
+}
pre.classic {
@@ -2332,6 +2543,29 @@ div.design-announce p {
line-height:30px;
}
+.expandable {
+ height:34px;
+ padding-left:20px;
+ position:relative;
+}
+.expandable:before {
+ content: '';
+ background-image: url(../images/styles/disclosure_down.png);
+ background-repeat:no-repeat;
+ background-position: -12px -9px;
+ width: 20px;
+ height: 20px;
+ display: inline-block;
+ position: absolute;
+ top: 0;
+ left: 0; }
+}
+.expandable.expanded:before {
+ background-image: url(../images/styles/disclosure_up.png);
+}
+
+
+
/* -----------------------------------------------
Dialog box for popup messages
*/
@@ -2401,109 +2635,109 @@ div#naMessage strong {
/* --------------------------------------------------------------------------
Slideshow Controls & Next/Prev
*/
-.slideshow-next, .slideshow-prev {
- width: 20px;
- height: 36px;
- text-indent: -1000em;
+.slideshow-next, .slideshow-prev {
+ width: 20px;
+ height: 36px;
+ text-indent: -1000em;
}
.slideshow-container {
- margin: 2em 0;
+ margin: 2em 0;
}
.slideshow-container:before, .slideshow-container:after {
- content: "";
- display: table;
- clear: both;
+ content: "";
+ display: table;
+ clear: both;
}
a.slideshow-next, a.slideshow-next:visited {
- float: right;
+ float: right;
- background: url(../images/arrow-right.png) no-repeat 0 0
+ background: url(../images/arrow-right.png) no-repeat 0 0
}
a.slideshow-prev, a.slideshow-prev:visited {
- float: left;
+ float: left;
- background: url(../images/arrow-left.png) no-repeat 0 0
+ background: url(../images/arrow-left.png) no-repeat 0 0
}
.slideshow-next:hover, .slideshow-prev:hover, .slideshow-next:focus, .slideshow-prev:focus {
- background-position: 0 -36px
+ background-position: 0 -36px
}
.slideshow-next:active, .slideshow-prev:active {
- background-position: 0 -72px
+ background-position: 0 -72px
}
.slideshow-nav {
- width: 74px;
- margin: 0 auto;
+ width: 74px;
+ margin: 0 auto;
}
.slideshow-nav a, .slideshow-nav a:visited {
- display: inline-block;
- width: 12px;
- height: 12px;
- margin: 0 2px 20px 2px;
- background: #ccc;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ margin: 0 2px 20px 2px;
+ background: #ccc;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
}
.slideshow-nav a:hover, .slideshow-nav a:focus {
- background: #33B5E5
+ background: #33B5E5
}
.slideshow-nav a:active {
- background: #1e799a;
- background: #ebebeb;
- -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ background: #1e799a;
+ background: #ebebeb;
+ -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
+ box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
}
.slideshow-nav a.active, .slideshow-nav a.active:active, .slideshow-nav a.active:visited {
- background: #33B5E5
+ background: #33B5E5
}
/* --------------------------------------------------------------------------
Tabs
*/
ul.tabs {
- padding: 0;
- margin: 2em 0 0 0;
+ padding: 0;
+ margin: 2em 0 0 0;
}
ul.tabs:before, ul.tabs:after {
- content: "";
- display: table;
- clear: both;
+ content: "";
+ display: table;
+ clear: both;
}
ul.tabs li {
- list-style-type: none;
- float: left;
+ list-style-type: none;
+ float: left;
}
ul.tabs li a, ul.tabs li a:active, ul.tabs li a:visited {
- display: block;
- height: 36px;
- line-height: 36px;
- padding: 0 15px;
- margin-right: 2px;
- color: #222;
- -moz-border-radius-topleft: 2px;
- -moz-border-radius-topright: 2px;
- -moz-border-radius-bottomright: px;
- -moz-border-radius-bottomleft: px;
- -webkit-border-radius: 2px 2px px px;
- border-radius: 2px 2px px px;
- border-top: solid 1px #ebebeb;
- border-left: solid 1px #ebebeb;
- border-right: solid 1px #ebebeb;
- background-color: #fff;
+ display: block;
+ height: 36px;
+ line-height: 36px;
+ padding: 0 15px;
+ margin-right: 2px;
+ color: #222;
+ -moz-border-radius-topleft: 2px;
+ -moz-border-radius-topright: 2px;
+ -moz-border-radius-bottomright: px;
+ -moz-border-radius-bottomleft: px;
+ -webkit-border-radius: 2px 2px px px;
+ border-radius: 2px 2px px px;
+ border-top: solid 1px #ebebeb;
+ border-left: solid 1px #ebebeb;
+ border-right: solid 1px #ebebeb;
+ background-color: #fff;
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#fafafa));
background-image: -webkit-linear-gradient(top, #ffffff, #fafafa);
background-image: -moz-linear-gradient(top, #ffffff, #fafafa);
@@ -2514,23 +2748,23 @@ ul.tabs li a, ul.tabs li a:active, ul.tabs li a:visited {
EndColorStr='#fafafa');
}
ul.tabs li a:hover {
- color: #33B5E5;
+ color: #33B5E5;
}
ul.tabs li a.selected {
- height: 37px;
- color: #33B5E5;
- background-color: #f7f7f7;
- background-image: none;
- border-color: #ddd;
+ height: 37px;
+ color: #33B5E5;
+ background-color: #f7f7f7;
+ background-image: none;
+ border-color: #ddd;
}
.tab-content {
- padding: 1.2em;
- margin: -1px 0 2em 0;
- -webkit-border-radius: 2px;
+ padding: 1.2em;
+ margin: -1px 0 2em 0;
+ -webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
- border: solid 1px #ddd;
- background: #f7f7f7;
+ border: solid 1px #ddd;
+ background: #f7f7f7;
}
/* --------------------------------------------------------------------------
Feature Boxes
@@ -2542,20 +2776,20 @@ Feature Boxes
background: #F7F7F7;
}
.box-border .top, .box-border .bottom, .box-border .left, .box-border .right {
- z-index: 100;
- position: absolute;
- background-color: #aaa;
+ z-index: 100;
+ position: absolute;
+ background-color: #aaa;
}
.box-border .top, .box-border .bottom {
- width: 291px;
- height: 1px;
+ width: 291px;
+ height: 1px;
}
.dialog .box-border .top,
.dialog .box-border .bottom { width:391px; }
-.box-border .left, .box-border .right {
- width: 1px;
- height: 8px;
+.box-border .left, .box-border .right {
+ width: 1px;
+ height: 8px;
}
.box-border .top { top: 0; left: 0 }
.box-border .top .left { top: 1px; left: 0 }
@@ -2590,36 +2824,36 @@ Feature Boxes
transition: color .4s ease;
}
.feature-box:hover {
- cursor: pointer;
+ cursor: pointer;
}
.feature-box:hover .box-border .top, .feature-box:hover .box-border .bottom, .feature-box:hover
-.left, .feature-box:hover .right {
- background-color: #33B5E5;
+.left, .feature-box:hover .right {
+ background-color: #33B5E5;
}
.feature-box:hover h4, .feature-box:hover a {
- color: #33B5E5;
+ color: #33B5E5;
}
/* --------------------------------------------------------------------------
Page-Specific Styles
*/
.colors {
- position: relative;
- float: left;
- width: 92px;
- margin: 40px 0 20px;
+ position: relative;
+ float: left;
+ width: 92px;
+ margin: 40px 0 20px;
}
.colors div {
- color: #fff;
- font-size: 11.5px;
- width: 82px;
- height: 82px;
- margin-top:-30px;
- line-height: 82px;
- text-align: center;
- border: solid 5px #fff;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
+ color: #fff;
+ font-size: 11.5px;
+ width: 82px;
+ height: 82px;
+ margin-top:-30px;
+ line-height: 82px;
+ text-align: center;
+ border: solid 5px #fff;
+ -webkit-border-radius: 50%;
+ -moz-border-radius: 50%;
+ border-radius: 50%;
}
@@ -2820,6 +3054,15 @@ h4.jd-details-title {
margin:1.5em 0 .6em;
padding:3px 95px 3px 3px; /* room for api-level */
}
+body.google h4.jd-details-title {
+ background-color: #FFF;
+ padding-top:5px;
+ border-top: 1px solid #ccc;
+}
+body.google table.jd-sumtable th {
+ background-color: #FFF;
+ color:#000;
+}
h4.jd-tagtitle {
margin:0;
@@ -3197,15 +3440,6 @@ EndColorStr='#ececec');
/*********** PREVIOUSLY dac-styles.css ***************/
-
-
-
-::-webkit-selection,
-::-moz-selection,
-::selection {
- background-color: #0099cc;
- color: #fff; }
-
#header {
border-bottom:0;
}
@@ -3417,20 +3651,20 @@ EndColorStr='#ececec');
}
.search .bottom, .search .left, .search .right {
- position: absolute;
- background-color: #a2a2a2
+ position: absolute;
+ background-color: #a2a2a2
}
.search .bottom {
- width: 214px;
- height: 1px;
- top: 24px;
- left: 0
+ width: 214px;
+ height: 1px;
+ top: 24px;
+ left: 0
}
-.search .left, .search .right {
- height: 5px;
- width: 1px
+.search .left, .search .right {
+ height: 5px;
+ width: 1px
}
.search .left {
@@ -3446,24 +3680,24 @@ EndColorStr='#ececec');
}
.search form {
- margin-top: 2px;
- width: 162px;
- float:left;
+ margin-top: 2px;
+ width: 162px;
+ float:left;
}
.search form input {
- color: #2f2f2f;
- font-size: 0.95em;
- width: 178px;
- border: none;
- margin-left: 6px;
- z-index: 1500;
+ color: #2f2f2f;
+ font-size: 0.95em;
+ width: 178px;
+ border: none;
+ margin-left: 6px;
+ z-index: 1500;
position: relative;
- background-color: transparent;
- border-bottom:1px solid #CCC;
- padding:0 0 0 4px;
- outline:none;
- height:24px;
+ background-color: transparent;
+ border-bottom:1px solid #CCC;
+ padding:0 0 0 4px;
+ outline:none;
+ height:24px;
}
.search:hover form input {
@@ -3471,23 +3705,23 @@ EndColorStr='#ececec');
}
.search:hover .bottom, .search:hover .left, .search:hover .right {
- background-color: #33b5e5;
+ background-color: #33b5e5;
}
.search:hover #search-btn {
- background-position: 0 -28px
+ background-position: 0 -28px
}
.search form input:focus {
- color: #222;
- font-weight: bold
+ color: #222;
+ font-weight: bold
}
.moremenu {
float: right;
- position: relative;
- width: 50px;
- height:28px;
+ position: relative;
+ width: 50px;
+ height:28px;
display: block;
margin-top:-3px;
margin-bottom:7px;
@@ -3547,7 +3781,8 @@ EndColorStr='#ececec');
-transition-timing-function:ease;
}
-.morehover:hover {
+.morehover:hover,
+.morehover.hover {
opacity:1;
height:385px;
width:268px;
@@ -3599,62 +3834,62 @@ EndColorStr='#ececec');
/* MARQUEE */
.slideshow-container {
- width:100%;
- overflow:hidden;
- position:relative;
+ width:100%;
+ overflow:hidden;
+ position:relative;
}
.slideshow-container .slideshow-prev {
- position:absolute;
- top:50%;
- left:0px;
- margin-top:-36px;
- z-index:99;
+ position:absolute;
+ top:50%;
+ left:0px;
+ margin-top:-36px;
+ z-index:99;
}
.slideshow-container .slideshow-next {
- position:absolute;
- top:50%;
- margin-top:-36px;
- z-index:99;
- right:0px;
+ position:absolute;
+ top:50%;
+ margin-top:-36px;
+ z-index:99;
+ right:0px;
}
.slideshow-container .pagination {
- position:absolute;
- bottom:20px;
- width:100%;
- text-align:center;
- z-index:99;
+ position:absolute;
+ bottom:20px;
+ width:100%;
+ text-align:center;
+ z-index:99;
}
.slideshow-container .pagination ul {
- margin:0;
+ margin:0;
}
.slideshow-container .pagination ul li{
- display: inline-block;
- width:12px;
- height:12px;
- text-indent:-8000px;
- list-style:none;
- margin: 0 2px;
- border-radius:6px;
- background-color:#ccc;
- cursor:pointer;
+ display: inline-block;
+ width:12px;
+ height:12px;
+ text-indent:-8000px;
+ list-style:none;
+ margin: 0 2px;
+ border-radius:6px;
+ background-color:#ccc;
+ cursor:pointer;
-webkit-transition:color .5s ease-in;
-moz-transition:color .5s ease-in;
-o-transition:color .5s ease-in;
transition:color .5s ease-in;
}
.slideshow-container .pagination ul li:hover {
- background-color:#999;
+ background-color:#999;
}
.slideshow-container .pagination ul li.active {
- background-color:#33b5e5;
+ background-color:#33b5e5;
}
.slideshow-container .pagination ul li.active:hover {
- background-color:#33b5e5;
+ background-color:#33b5e5;
}
.slideshow-container ul li {
- display:inline;
- list-style:none;
+ display:inline;
+ list-style:none;
}
@@ -3776,7 +4011,7 @@ a.download-sdk {
background-image: -ms-linear-gradient(left, #5dbcd9, #4cadcb);
background-image: -o-linear-gradient(left, #5dbcd9, #4cadcb);
background-image: linear-gradient(left, #5dbcd9, #4cadcb);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9', EndColorStr='#4cadcb');
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9', EndColorStr='#4cadcb');
}
.jspHorizontalBar .jspTrack,
@@ -4049,20 +4284,21 @@ a.download-sdk {
}
+
/************ DEVELOP TOPIC CONTAINERS ************/
.landing-banner,
.landing-docs {
margin:20px 0 0;
}
-.landing-banner .col-6:first-child,
-.landing-docs .col-6:first-child,
+.landing-banner div:first-child,
+.landing-docs div:first-child,
.landing-docs .col-12 {
margin-left:0;
min-height:280px;
}
-.landing-banner .col-6:last-child,
-.landing-docs .col-6:last-child,
+.landing-banner div:last-child,
+.landing-docs div:last-child,
.landing-docs .col-12 {
margin-right:0;
}
@@ -4085,11 +4321,16 @@ a.download-sdk {
.landing-docs a {
color:#333 !important;
}
+
.landing-docs a:hover,
.landing-docs a:hover * {
color:#7AA1B0 !important
}
+.landing-docs .normal-links a {
+ color:#258aaf !important;
+}
+
.plusone {
float:right;
}
diff --git a/tools/droiddoc/templates-sdk/assets/js/android_3p-bundle.js b/tools/droiddoc/templates-sdk/assets/js/android_3p-bundle.js
new file mode 100644
index 0000000..a67b5b0
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/js/android_3p-bundle.js
@@ -0,0 +1,2766 @@
+//third_party/javascript/google_code_prettify/src/prettify.js
+/**
+ * @license Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * some functions for browser-side pretty printing of code contained in html.
+ * <p>
+ *
+ * For a fairly comprehensive set of languages see the
+ * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
+ * file that came with this source. At a minimum, the lexer should work on a
+ * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
+ * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk
+ * and a subset of Perl, but, because of commenting conventions, doesn't work on
+ * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
+ * <p>
+ * Usage: <ol>
+ * <li> include this source file in an html page via
+ * {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
+ * <li> define style rules. See the example page for examples.
+ * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
+ * {@code class=prettyprint.}
+ * You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
+ * printer needs to do more substantial DOM manipulations to support that, so
+ * some css styles may not be preserved.
+ * </ol>
+ * That's it. I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in, but if you wish, you can add
+ * another class to the {@code <pre>} or {@code <code>} element to specify the
+ * language, as in {@code <pre class="prettyprint lang-java">}. Any class that
+ * starts with "lang-" followed by a file extension, specifies the file type.
+ * See the "lang-*.js" files in this directory for code that implements
+ * per-language file handlers.
+ * <p>
+ * Change log:<br>
+ * cbeust, 2006/08/22
+ * <blockquote>
+ * Java annotations (start with "@") are now captured as literals ("lit")
+ * </blockquote>
+ * @requires console
+ */
+
+// JSLint declarations
+/*global console, document, navigator, setTimeout, window */
+
+/**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+window['PR_SHOULD_USE_CONTINUATION'] = true;
+
+/** the number of characters between tab columns */
+window['PR_TAB_WIDTH'] = 8;
+
+/** Walks the DOM returning a properly escaped version of innerHTML.
+ * @param {Node} node
+ * @param {Array.<string>} out output buffer that receives chunks of HTML.
+ */
+window['PR_normalizedHtml']
+
+/** Contains functions for creating and registering new language handlers.
+ * @type {Object}
+ */
+ = window['PR']
+
+/** Pretty print a chunk of code.
+ *
+ * @param {string} sourceCodeHtml code as html
+ * @return {string} code as html, but prettier
+ */
+ = window['prettyPrintOne']
+/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
+ * {@code class=prettyprint} and prettify them.
+ * @param {Function?} opt_whenDone if specified, called when the last entry
+ * has been finished.
+ */
+ = window['prettyPrint'] = void 0;
+
+/** browser detection. @extern @returns false if not IE, otherwise the major version. */
+window['_pr_isIE6'] = function () {
+ var ieVersion = navigator && navigator.userAgent &&
+ navigator.userAgent.match(/\bMSIE ([678])\./);
+ ieVersion = ieVersion ? +ieVersion[1] : false;
+ window['_pr_isIE6'] = function () { return ieVersion; };
+ return ieVersion;
+};
+
+
+(function () {
+ // Keyword lists for various languages.
+ var FLOW_CONTROL_KEYWORDS =
+ "break continue do else for if return while ";
+ var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
+ "double enum extern float goto int long register short signed sizeof " +
+ "static struct switch typedef union unsigned void volatile ";
+ var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
+ "new operator private protected public this throw true try typeof ";
+ var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
+ "concept concept_map const_cast constexpr decltype " +
+ "dynamic_cast explicit export friend inline late_check " +
+ "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
+ "template typeid typename using virtual wchar_t where ";
+ var JAVA_KEYWORDS = COMMON_KEYWORDS +
+ "abstract boolean byte extends final finally implements import " +
+ "instanceof null native package strictfp super synchronized throws " +
+ "transient ";
+ var CSHARP_KEYWORDS = JAVA_KEYWORDS +
+ "as base by checked decimal delegate descending dynamic event " +
+ "fixed foreach from group implicit in interface internal into is lock " +
+ "object out override orderby params partial readonly ref sbyte sealed " +
+ "stackalloc string select uint ulong unchecked unsafe ushort var ";
+ var COFFEE_KEYWORDS = "all and by catch class else extends false finally " +
+ "for if in is isnt loop new no not null of off on or return super then " +
+ "true try unless until when while yes ";
+ var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
+ "debugger eval export function get null set undefined var with " +
+ "Infinity NaN ";
+ var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
+ "goto if import last local my next no our print package redo require " +
+ "sub undef unless until use wantarray while BEGIN END ";
+ var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
+ "elif except exec finally from global import in is lambda " +
+ "nonlocal not or pass print raise try with yield " +
+ "False True None ";
+ var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
+ " defined elsif end ensure false in module next nil not or redo rescue " +
+ "retry self super then true undef unless until when yield BEGIN END ";
+ var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
+ "function in local set then until ";
+ var ALL_KEYWORDS = (
+ CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
+ PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
+
+ // token style names. correspond to css classes
+ /** token style for a string literal */
+ var PR_STRING = 'str';
+ /** token style for a keyword */
+ var PR_KEYWORD = 'kwd';
+ /** token style for a comment */
+ var PR_COMMENT = 'com';
+ /** token style for a type */
+ var PR_TYPE = 'typ';
+ /** token style for a literal value. e.g. 1, null, true. */
+ var PR_LITERAL = 'lit';
+ /** token style for a punctuation string. */
+ var PR_PUNCTUATION = 'pun';
+ /** token style for a punctuation string. */
+ var PR_PLAIN = 'pln';
+
+ /** token style for an sgml tag. */
+ var PR_TAG = 'tag';
+ /** token style for a markup declaration such as a DOCTYPE. */
+ var PR_DECLARATION = 'dec';
+ /** token style for embedded source. */
+ var PR_SOURCE = 'src';
+ /** token style for an sgml attribute name. */
+ var PR_ATTRIB_NAME = 'atn';
+ /** token style for an sgml attribute value. */
+ var PR_ATTRIB_VALUE = 'atv';
+
+ /**
+ * A class that indicates a section of markup that is not code, e.g. to allow
+ * embedding of line numbers within code listings.
+ */
+ var PR_NOCODE = 'nocode';
+
+ /** A set of tokens that can precede a regular expression literal in
+ * javascript.
+ * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
+ * list, but I've removed ones that might be problematic when seen in
+ * languages that don't support regular expression literals.
+ *
+ * <p>Specifically, I've removed any keywords that can't precede a regexp
+ * literal in a syntactically legal javascript program, and I've removed the
+ * "in" keyword since it's not a keyword in many languages, and might be used
+ * as a count of inches.
+ *
+ * <p>The link a above does not accurately describe EcmaScript rules since
+ * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
+ * very well in practice.
+ *
+ * @private
+ */
+ var REGEXP_PRECEDER_PATTERN = function () {
+ var preceders = [
+ "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
+ "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
+ "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
+ "<", "<<", "<<=", "<=", "=", "==", "===", ">",
+ ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
+ "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
+ "||=", "~" /* handles =~ and !~ */,
+ "break", "case", "continue", "delete",
+ "do", "else", "finally", "instanceof",
+ "return", "throw", "try", "typeof"
+ ];
+ var pattern = '(?:^^|[+-]';
+ for (var i = 0; i < preceders.length; ++i) {
+ pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
+ }
+ pattern += ')\\s*'; // matches at end, and matches empty string
+ return pattern;
+ // CAVEAT: this does not properly handle the case where a regular
+ // expression immediately follows another since a regular expression may
+ // have flags for case-sensitivity and the like. Having regexp tokens
+ // adjacent is not valid in any language I'm aware of, so I'm punting.
+ // TODO: maybe style special characters inside a regexp as punctuation.
+ }();
+
+ // Define regexps here so that the interpreter doesn't have to create an
+ // object each time the function containing them is called.
+ // The language spec requires a new object created even if you don't access
+ // the $1 members.
+ var pr_amp = /&/g;
+ var pr_lt = /</g;
+ var pr_gt = />/g;
+ var pr_quot = /\"/g;
+ /** like textToHtml but escapes double quotes to be attribute safe. */
+ function attribToHtml(str) {
+ return str.replace(pr_amp, '&amp;')
+ .replace(pr_lt, '&lt;')
+ .replace(pr_gt, '&gt;')
+ .replace(pr_quot, '&quot;');
+ }
+
+ /** escapest html special characters to html. */
+ function textToHtml(str) {
+ return str.replace(pr_amp, '&amp;')
+ .replace(pr_lt, '&lt;')
+ .replace(pr_gt, '&gt;');
+ }
+
+
+ var pr_ltEnt = /&lt;/g;
+ var pr_gtEnt = /&gt;/g;
+ var pr_aposEnt = /&apos;/g;
+ var pr_quotEnt = /&quot;/g;
+ var pr_ampEnt = /&amp;/g;
+ var pr_nbspEnt = /&nbsp;/g;
+ /** unescapes html to plain text. */
+ function htmlToText(html) {
+ var pos = html.indexOf('&');
+ if (pos < 0) { return html; }
+ // Handle numeric entities specially. We can't use functional substitution
+ // since that doesn't work in older versions of Safari.
+ // These should be rare since most browsers convert them to normal chars.
+ for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
+ var end = html.indexOf(';', pos);
+ if (end >= 0) {
+ var num = html.substring(pos + 3, end);
+ var radix = 10;
+ if (num && num.charAt(0) === 'x') {
+ num = num.substring(1);
+ radix = 16;
+ }
+ var codePoint = parseInt(num, radix);
+ if (!isNaN(codePoint)) {
+ html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
+ html.substring(end + 1));
+ }
+ }
+ }
+
+ return html.replace(pr_ltEnt, '<')
+ .replace(pr_gtEnt, '>')
+ .replace(pr_aposEnt, "'")
+ .replace(pr_quotEnt, '"')
+ .replace(pr_nbspEnt, ' ')
+ .replace(pr_ampEnt, '&');
+ }
+
+ /** is the given node's innerHTML normally unescaped? */
+ function isRawContent(node) {
+ return 'XMP' === node.tagName;
+ }
+
+ var newlineRe = /[\r\n]/g;
+ /**
+ * Are newlines and adjacent spaces significant in the given node's innerHTML?
+ */
+ function isPreformatted(node, content) {
+ // PRE means preformatted, and is a very common case, so don't create
+ // unnecessary computed style objects.
+ if ('PRE' === node.tagName) { return true; }
+ if (!newlineRe.test(content)) { return true; } // Don't care
+ var whitespace = '';
+ // For disconnected nodes, IE has no currentStyle.
+ if (node.currentStyle) {
+ whitespace = node.currentStyle.whiteSpace;
+ } else if (window.getComputedStyle) {
+ // Firefox makes a best guess if node is disconnected whereas Safari
+ // returns the empty string.
+ whitespace = window.getComputedStyle(node, null).whiteSpace;
+ }
+ return !whitespace || whitespace === 'pre';
+ }
+
+ function normalizedHtml(node, out, opt_sortAttrs) {
+ switch (node.nodeType) {
+ case 1: // an element
+ var name = node.tagName.toLowerCase();
+
+ out.push('<', name);
+ var attrs = node.attributes;
+ var n = attrs.length;
+ if (n) {
+ if (opt_sortAttrs) {
+ var sortedAttrs = [];
+ for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
+ sortedAttrs.sort(function (a, b) {
+ return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
+ });
+ attrs = sortedAttrs;
+ }
+ for (var i = 0; i < n; ++i) {
+ var attr = attrs[i];
+ if (!attr.specified) { continue; }
+ out.push(' ', attr.name.toLowerCase(),
+ '="', attribToHtml(attr.value), '"');
+ }
+ }
+ out.push('>');
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ normalizedHtml(child, out, opt_sortAttrs);
+ }
+ if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
+ out.push('<\/', name, '>');
+ }
+ break;
+ case 3: case 4: // text
+ out.push(textToHtml(node.nodeValue));
+ break;
+ }
+ }
+
+ /**
+ * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
+ * matches the union o the sets o strings matched d by the input RegExp.
+ * Since it matches globally, if the input strings have a start-of-input
+ * anchor (/^.../), it is ignored for the purposes of unioning.
+ * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
+ * @return {RegExp} a global regex.
+ */
+ function combinePrefixPatterns(regexs) {
+ var capturedGroupIndex = 0;
+
+ var needToFoldCase = false;
+ var ignoreCase = false;
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.ignoreCase) {
+ ignoreCase = true;
+ } else if (/[a-z]/i.test(regex.source.replace(
+ /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
+ needToFoldCase = true;
+ ignoreCase = false;
+ break;
+ }
+ }
+
+ function decodeEscape(charsetPart) {
+ if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
+ switch (charsetPart.charAt(1)) {
+ case 'b': return 8;
+ case 't': return 9;
+ case 'n': return 0xa;
+ case 'v': return 0xb;
+ case 'f': return 0xc;
+ case 'r': return 0xd;
+ case 'u': case 'x':
+ return parseInt(charsetPart.substring(2), 16)
+ || charsetPart.charCodeAt(1);
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7':
+ return parseInt(charsetPart.substring(1), 8);
+ default: return charsetPart.charCodeAt(1);
+ }
+ }
+
+ function encodeEscape(charCode) {
+ if (charCode < 0x20) {
+ return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
+ }
+ var ch = String.fromCharCode(charCode);
+ if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
+ ch = '\\' + ch;
+ }
+ return ch;
+ }
+
+ function caseFoldCharset(charSet) {
+ var charsetParts = charSet.substring(1, charSet.length - 1).match(
+ new RegExp(
+ '\\\\u[0-9A-Fa-f]{4}'
+ + '|\\\\x[0-9A-Fa-f]{2}'
+ + '|\\\\[0-3][0-7]{0,2}'
+ + '|\\\\[0-7]{1,2}'
+ + '|\\\\[\\s\\S]'
+ + '|-'
+ + '|[^-\\\\]',
+ 'g'));
+ var groups = [];
+ var ranges = [];
+ var inverse = charsetParts[0] === '^';
+ for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
+ var p = charsetParts[i];
+ switch (p) {
+ case '\\B': case '\\b':
+ case '\\D': case '\\d':
+ case '\\S': case '\\s':
+ case '\\W': case '\\w':
+ groups.push(p);
+ continue;
+ }
+ var start = decodeEscape(p);
+ var end;
+ if (i + 2 < n && '-' === charsetParts[i + 1]) {
+ end = decodeEscape(charsetParts[i + 2]);
+ i += 2;
+ } else {
+ end = start;
+ }
+ ranges.push([start, end]);
+ // If the range might intersect letters, then expand it.
+ if (!(end < 65 || start > 122)) {
+ if (!(end < 65 || start > 90)) {
+ ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
+ }
+ if (!(end < 97 || start > 122)) {
+ ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
+ }
+ }
+ }
+
+ // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
+ // -> [[1, 12], [14, 14], [16, 17]]
+ ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); });
+ var consolidatedRanges = [];
+ var lastRange = [NaN, NaN];
+ for (var i = 0; i < ranges.length; ++i) {
+ var range = ranges[i];
+ if (range[0] <= lastRange[1] + 1) {
+ lastRange[1] = Math.max(lastRange[1], range[1]);
+ } else {
+ consolidatedRanges.push(lastRange = range);
+ }
+ }
+
+ var out = ['['];
+ if (inverse) { out.push('^'); }
+ out.push.apply(out, groups);
+ for (var i = 0; i < consolidatedRanges.length; ++i) {
+ var range = consolidatedRanges[i];
+ out.push(encodeEscape(range[0]));
+ if (range[1] > range[0]) {
+ if (range[1] + 1 > range[0]) { out.push('-'); }
+ out.push(encodeEscape(range[1]));
+ }
+ }
+ out.push(']');
+ return out.join('');
+ }
+
+ function allowAnywhereFoldCaseAndRenumberGroups(regex) {
+ // Split into character sets, escape sequences, punctuation strings
+ // like ('(', '(?:', ')', '^'), and runs of characters that do not
+ // include any of the above.
+ var parts = regex.source.match(
+ new RegExp(
+ '(?:'
+ + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set
+ + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape
+ + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape
+ + '|\\\\[0-9]+' // a back-reference or octal escape
+ + '|\\\\[^ux0-9]' // other escape sequence
+ + '|\\(\\?[:!=]' // start of a non-capturing group
+ + '|[\\(\\)\\^]' // start/emd of a group, or line start
+ + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters
+ + ')',
+ 'g'));
+ var n = parts.length;
+
+ // Maps captured group numbers to the number they will occupy in
+ // the output or to -1 if that has not been determined, or to
+ // undefined if they need not be capturing in the output.
+ var capturedGroups = [];
+
+ // Walk over and identify back references to build the capturedGroups
+ // mapping.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ // groups are 1-indexed, so max group index is count of '('
+ ++groupIndex;
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ capturedGroups[decimalValue] = -1;
+ }
+ }
+ }
+
+ // Renumber groups and reduce capturing groups to non-capturing groups
+ // where possible.
+ for (var i = 1; i < capturedGroups.length; ++i) {
+ if (-1 === capturedGroups[i]) {
+ capturedGroups[i] = ++capturedGroupIndex;
+ }
+ }
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ ++groupIndex;
+ if (capturedGroups[groupIndex] === undefined) {
+ parts[i] = '(?:';
+ }
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ parts[i] = '\\' + capturedGroups[groupIndex];
+ }
+ }
+ }
+
+ // Remove any prefix anchors so that the output will match anywhere.
+ // ^^ really does mean an anchored match though.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
+ }
+
+ // Expand letters to groupts to handle mixing of case-sensitive and
+ // case-insensitive patterns if necessary.
+ if (regex.ignoreCase && needToFoldCase) {
+ for (var i = 0; i < n; ++i) {
+ var p = parts[i];
+ var ch0 = p.charAt(0);
+ if (p.length >= 2 && ch0 === '[') {
+ parts[i] = caseFoldCharset(p);
+ } else if (ch0 !== '\\') {
+ // TODO: handle letters in numeric escapes.
+ parts[i] = p.replace(
+ /[a-zA-Z]/g,
+ function (ch) {
+ var cc = ch.charCodeAt(0);
+ return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
+ });
+ }
+ }
+ }
+
+ return parts.join('');
+ }
+
+ var rewritten = [];
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.global || regex.multiline) { throw new Error('' + regex); }
+ rewritten.push(
+ '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
+ }
+
+ return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
+ }
+
+ var PR_innerHtmlWorks = null;
+ function getInnerHtml(node) {
+ // inner html is hopelessly broken in Safari 2.0.4 when the content is
+ // an html description of well formed XML and the containing tag is a PRE
+ // tag, so we detect that case and emulate innerHTML.
+ if (null === PR_innerHtmlWorks) {
+ var testNode = document.createElement('PRE');
+ testNode.appendChild(
+ document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
+ PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
+ }
+
+ if (PR_innerHtmlWorks) {
+ var content = node.innerHTML;
+ // XMP tags contain unescaped entities so require special handling.
+ if (isRawContent(node)) {
+ content = textToHtml(content);
+ } else if (!isPreformatted(node, content)) {
+ content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
+ .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
+ }
+ return content;
+ }
+
+ var out = [];
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ normalizedHtml(child, out);
+ }
+ return out.join('');
+ }
+
+ /** returns a function that expand tabs to spaces. This function can be fed
+ * successive chunks of text, and will maintain its own internal state to
+ * keep track of how tabs are expanded.
+ * @return {function (string) : string} a function that takes
+ * plain text and return the text with tabs expanded.
+ * @private
+ */
+ function makeTabExpander(tabWidth) {
+ var SPACES = ' ';
+ var charInLine = 0;
+
+ return function (plainText) {
+ // walk over each character looking for tabs and newlines.
+ // On tabs, expand them. On newlines, reset charInLine.
+ // Otherwise increment charInLine
+ var out = null;
+ var pos = 0;
+ for (var i = 0, n = plainText.length; i < n; ++i) {
+ var ch = plainText.charAt(i);
+
+ switch (ch) {
+ case '\t':
+ if (!out) { out = []; }
+ out.push(plainText.substring(pos, i));
+ // calculate how much space we need in front of this part
+ // nSpaces is the amount of padding -- the number of spaces needed
+ // to move us to the next column, where columns occur at factors of
+ // tabWidth.
+ var nSpaces = tabWidth - (charInLine % tabWidth);
+ charInLine += nSpaces;
+ for (; nSpaces >= 0; nSpaces -= SPACES.length) {
+ out.push(SPACES.substring(0, nSpaces));
+ }
+ pos = i + 1;
+ break;
+ case '\n':
+ charInLine = 0;
+ break;
+ default:
+ ++charInLine;
+ }
+ }
+ if (!out) { return plainText; }
+ out.push(plainText.substring(pos));
+ return out.join('');
+ };
+ }
+
+ var pr_chunkPattern = new RegExp(
+ '[^<]+' // A run of characters other than '<'
+ + '|<\!--[\\s\\S]*?--\>' // an HTML comment
+ + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>' // a CDATA section
+ // a probable tag that should not be highlighted
+ + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
+ + '|<', // A '<' that does not begin a larger chunk
+ 'g');
+ var pr_commentPrefix = /^<\!--/;
+ var pr_cdataPrefix = /^<!\[CDATA\[/;
+ var pr_brPrefix = /^<br\b/i;
+ var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
+
+ /** split markup into chunks of html tags (style null) and
+ * plain text (style {@link #PR_PLAIN}), converting tags which are
+ * significant for tokenization (<br>) into their textual equivalent.
+ *
+ * @param {string} s html where whitespace is considered significant.
+ * @return {Object} source code and extracted tags.
+ * @private
+ */
+ function extractTags(s) {
+ // since the pattern has the 'g' modifier and defines no capturing groups,
+ // this will return a list of all chunks which we then classify and wrap as
+ // PR_Tokens
+ var matches = s.match(pr_chunkPattern);
+ var sourceBuf = [];
+ var sourceBufLen = 0;
+ var extractedTags = [];
+ if (matches) {
+ for (var i = 0, n = matches.length; i < n; ++i) {
+ var match = matches[i];
+ if (match.length > 1 && match.charAt(0) === '<') {
+ if (pr_commentPrefix.test(match)) { continue; }
+ if (pr_cdataPrefix.test(match)) {
+ // strip CDATA prefix and suffix. Don't unescape since it's CDATA
+ sourceBuf.push(match.substring(9, match.length - 3));
+ sourceBufLen += match.length - 12;
+ } else if (pr_brPrefix.test(match)) {
+ // <br> tags are lexically significant so convert them to text.
+ // This is undone later.
+ sourceBuf.push('\n');
+ ++sourceBufLen;
+ } else {
+ if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
+ // A <span class="nocode"> will start a section that should be
+ // ignored. Continue walking the list until we see a matching end
+ // tag.
+ var name = match.match(pr_tagNameRe)[2];
+ var depth = 1;
+ var j;
+ end_tag_loop:
+ for (j = i + 1; j < n; ++j) {
+ var name2 = matches[j].match(pr_tagNameRe);
+ if (name2 && name2[2] === name) {
+ if (name2[1] === '/') {
+ if (--depth === 0) { break end_tag_loop; }
+ } else {
+ ++depth;
+ }
+ }
+ }
+ if (j < n) {
+ extractedTags.push(
+ sourceBufLen, matches.slice(i, j + 1).join(''));
+ i = j;
+ } else { // Ignore unclosed sections.
+ extractedTags.push(sourceBufLen, match);
+ }
+ } else {
+ extractedTags.push(sourceBufLen, match);
+ }
+ }
+ } else {
+ var literalText = htmlToText(match);
+ sourceBuf.push(literalText);
+ sourceBufLen += literalText.length;
+ }
+ }
+ }
+ return { source: sourceBuf.join(''), tags: extractedTags };
+ }
+
+ /** True if the given tag contains a class attribute with the nocode class. */
+ function isNoCodeTag(tag) {
+ return !!tag
+ // First canonicalize the representation of attributes
+ .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
+ ' $1="$2$3$4"')
+ // Then look for the attribute we want.
+ .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
+ }
+
+ /**
+ * Apply the given language handler to sourceCode and add the resulting
+ * decorations to out.
+ * @param {number} basePos the index of sourceCode within the chunk of source
+ * whose decorations are already present on out.
+ */
+ function appendDecorations(basePos, sourceCode, langHandler, out) {
+ if (!sourceCode) { return; }
+ var job = {
+ source: sourceCode,
+ basePos: basePos
+ };
+ langHandler(job);
+ out.push.apply(out, job.decorations);
+ }
+
+ /** Given triples of [style, pattern, context] returns a lexing function,
+ * The lexing function interprets the patterns to find token boundaries and
+ * returns a decoration list of the form
+ * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+ * where index_n is an index into the sourceCode, and style_n is a style
+ * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to
+ * all characters in sourceCode[index_n-1:index_n].
+ *
+ * The stylePatterns is a list whose elements have the form
+ * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
+ *
+ * Style is a style constant like PR_PLAIN, or can be a string of the
+ * form 'lang-FOO', where FOO is a language extension describing the
+ * language of the portion of the token in $1 after pattern executes.
+ * E.g., if style is 'lang-lisp', and group 1 contains the text
+ * '(hello (world))', then that portion of the token will be passed to the
+ * registered lisp handler for formatting.
+ * The text before and after group 1 will be restyled using this decorator
+ * so decorators should take care that this doesn't result in infinite
+ * recursion. For example, the HTML lexer rule for SCRIPT elements looks
+ * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match
+ * '<script>foo()<\/script>', which would cause the current decorator to
+ * be called with '<script>' which would not match the same rule since
+ * group 1 must not be empty, so it would be instead styled as PR_TAG by
+ * the generic tag rule. The handler registered for the 'js' extension would
+ * then be called with 'foo()', and finally, the current decorator would
+ * be called with '<\/script>' which would not match the original rule and
+ * so the generic tag rule would identify it as a tag.
+ *
+ * Pattern must only match prefixes, and if it matches a prefix, then that
+ * match is considered a token with the same style.
+ *
+ * Context is applied to the last non-whitespace, non-comment token
+ * recognized.
+ *
+ * Shortcut is an optional string of characters, any of which, if the first
+ * character, gurantee that this pattern and only this pattern matches.
+ *
+ * @param {Array} shortcutStylePatterns patterns that always start with
+ * a known character. Must have a shortcut string.
+ * @param {Array} fallthroughStylePatterns patterns that will be tried in
+ * order if the shortcut ones fail. May have shortcuts.
+ *
+ * @return {function (Object)} a
+ * function that takes source code and returns a list of decorations.
+ */
+ function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
+ var shortcuts = {};
+ var tokenizer;
+ (function () {
+ var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
+ var allRegexs = [];
+ var regexKeys = {};
+ for (var i = 0, n = allPatterns.length; i < n; ++i) {
+ var patternParts = allPatterns[i];
+ var shortcutChars = patternParts[3];
+ if (shortcutChars) {
+ for (var c = shortcutChars.length; --c >= 0;) {
+ shortcuts[shortcutChars.charAt(c)] = patternParts;
+ }
+ }
+ var regex = patternParts[1];
+ var k = '' + regex;
+ if (!regexKeys.hasOwnProperty(k)) {
+ allRegexs.push(regex);
+ regexKeys[k] = null;
+ }
+ }
+ allRegexs.push(/[\0-\uffff]/);
+ tokenizer = combinePrefixPatterns(allRegexs);
+ })();
+
+ var nPatterns = fallthroughStylePatterns.length;
+ var notWs = /\S/;
+
+ /**
+ * Lexes job.source and produces an output array job.decorations of style
+ * classes preceded by the position at which they start in job.source in
+ * order.
+ *
+ * @param {Object} job an object like {@code
+ * source: {string} sourceText plain text,
+ * basePos: {int} position of job.source in the larger chunk of
+ * sourceCode.
+ * }
+ */
+ var decorate = function (job) {
+ var sourceCode = job.source, basePos = job.basePos;
+ /** Even entries are positions in source in ascending order. Odd enties
+ * are style markers (e.g., PR_COMMENT) that run from that position until
+ * the end.
+ * @type {Array.<number|string>}
+ */
+ var decorations = [basePos, PR_PLAIN];
+ var pos = 0; // index into sourceCode
+ var tokens = sourceCode.match(tokenizer) || [];
+ var styleCache = {};
+
+ for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
+ var token = tokens[ti];
+ var style = styleCache[token];
+ var match = void 0;
+
+ var isEmbedded;
+ if (typeof style === 'string') {
+ isEmbedded = false;
+ } else {
+ var patternParts = shortcuts[token.charAt(0)];
+ if (patternParts) {
+ match = token.match(patternParts[1]);
+ style = patternParts[0];
+ } else {
+ for (var i = 0; i < nPatterns; ++i) {
+ patternParts = fallthroughStylePatterns[i];
+ match = token.match(patternParts[1]);
+ if (match) {
+ style = patternParts[0];
+ break;
+ }
+ }
+
+ if (!match) { // make sure that we make progress
+ style = PR_PLAIN;
+ }
+ }
+
+ isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
+ if (isEmbedded && !(match && typeof match[1] === 'string')) {
+ isEmbedded = false;
+ style = PR_SOURCE;
+ }
+
+ if (!isEmbedded) { styleCache[token] = style; }
+ }
+
+ var tokenStart = pos;
+ pos += token.length;
+
+ if (!isEmbedded) {
+ decorations.push(basePos + tokenStart, style);
+ } else { // Treat group 1 as an embedded block of source code.
+ var embeddedSource = match[1];
+ var embeddedSourceStart = token.indexOf(embeddedSource);
+ var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
+ if (match[2]) {
+ // If embeddedSource can be blank, then it would match at the
+ // beginning which would cause us to infinitely recurse on the
+ // entire token, so we catch the right context in match[2].
+ embeddedSourceEnd = token.length - match[2].length;
+ embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
+ }
+ var lang = style.substring(5);
+ // Decorate the left of the embedded source
+ appendDecorations(
+ basePos + tokenStart,
+ token.substring(0, embeddedSourceStart),
+ decorate, decorations);
+ // Decorate the embedded source
+ appendDecorations(
+ basePos + tokenStart + embeddedSourceStart,
+ embeddedSource,
+ langHandlerForExtension(lang, embeddedSource),
+ decorations);
+ // Decorate the right of the embedded section
+ appendDecorations(
+ basePos + tokenStart + embeddedSourceEnd,
+ token.substring(embeddedSourceEnd),
+ decorate, decorations);
+ }
+ }
+ job.decorations = decorations;
+ };
+ return decorate;
+ }
+
+ /** returns a function that produces a list of decorations from source text.
+ *
+ * This code treats ", ', and ` as string delimiters, and \ as a string
+ * escape. It does not recognize perl's qq() style strings.
+ * It has no special handling for double delimiter escapes as in basic, or
+ * the tripled delimiters used in python, but should work on those regardless
+ * although in those cases a single string literal may be broken up into
+ * multiple adjacent string literals.
+ *
+ * It recognizes C, C++, and shell style comments.
+ *
+ * @param {Object} options a set of optional parameters.
+ * @return {function (Object)} a function that examines the source code
+ * in the input job and builds the decoration list.
+ */
+ function sourceDecorator(options) {
+ var shortcutStylePatterns = [], fallthroughStylePatterns = [];
+ if (options['tripleQuotedStrings']) {
+ // '''multi-line-string''', 'single-line-string', and double-quoted
+ shortcutStylePatterns.push(
+ [PR_STRING, /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
+ null, '\'"']);
+ } else if (options['multiLineStrings']) {
+ // 'multi-line-string', "multi-line-string"
+ shortcutStylePatterns.push(
+ [PR_STRING, /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
+ null, '\'"`']);
+ } else {
+ // 'single-line-string', "single-line-string"
+ shortcutStylePatterns.push(
+ [PR_STRING,
+ /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
+ null, '"\'']);
+ }
+ if (options['verbatimStrings']) {
+ // verbatim-string-literal production from the C# grammar. See issue 93.
+ fallthroughStylePatterns.push(
+ [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
+ }
+ var hc = options['hashComments'];
+ if (hc) {
+ if (options['cStyleComments']) {
+ if (hc > 1) { // multiline hash comments
+ shortcutStylePatterns.push(
+ [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
+ } else {
+ // Stop C preprocessor declarations at an unclosed open comment
+ shortcutStylePatterns.push(
+ [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
+ null, '#']);
+ }
+ fallthroughStylePatterns.push(
+ [PR_STRING,
+ /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
+ null]);
+ } else {
+ shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
+ }
+ }
+ if (options['cStyleComments']) {
+ fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
+ fallthroughStylePatterns.push(
+ [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
+ }
+ if (options['regexLiterals']) {
+ var REGEX_LITERAL = (
+ // A regular expression literal starts with a slash that is
+ // not followed by * or / so that it is not confused with
+ // comments.
+ '/(?=[^/*])'
+ // and then contains any number of raw characters,
+ + '(?:[^/\\x5B\\x5C]'
+ // escape sequences (\x5C),
+ + '|\\x5C[\\s\\S]'
+ // or non-nesting character sets (\x5B\x5D);
+ + '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
+ // finally closed by a /.
+ + '/');
+ fallthroughStylePatterns.push(
+ ['lang-regex',
+ new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
+ ]);
+ }
+
+ var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
+ if (keywords.length) {
+ fallthroughStylePatterns.push(
+ [PR_KEYWORD,
+ new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
+ }
+
+ shortcutStylePatterns.push([PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0']);
+ fallthroughStylePatterns.push(
+ // TODO(mikesamuel): recognize non-latin letters and numerals in idents
+ [PR_LITERAL, /^@[a-z_$][a-z_$@0-9]*/i, null],
+ [PR_TYPE, /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
+ [PR_PLAIN, /^[a-z_$][a-z_$@0-9]*/i, null],
+ [PR_LITERAL,
+ new RegExp(
+ '^(?:'
+ // A hex number
+ + '0x[a-f0-9]+'
+ // or an octal or decimal number,
+ + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
+ // possibly in scientific notation
+ + '(?:e[+\\-]?\\d+)?'
+ + ')'
+ // with an optional modifier like UL for unsigned long
+ + '[a-z]*', 'i'),
+ null, '0123456789'],
+ [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
+
+ return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
+ }
+
+ var decorateSource = sourceDecorator({
+ 'keywords': ALL_KEYWORDS,
+ 'hashComments': true,
+ 'cStyleComments': true,
+ 'multiLineStrings': true,
+ 'regexLiterals': true
+ });
+
+ /** Breaks {@code job.source} around style boundaries in
+ * {@code job.decorations} while re-interleaving {@code job.extractedTags},
+ * and leaves the result in {@code job.prettyPrintedHtml}.
+ * @param {Object} job like {
+ * source: {string} source as plain text,
+ * extractedTags: {Array.<number|string>} extractedTags chunks of raw
+ * html preceded by their position in {@code job.source}
+ * in order
+ * decorations: {Array.<number|string} an array of style classes preceded
+ * by the position at which they start in job.source in order
+ * }
+ * @private
+ */
+ function recombineTagsAndDecorations(job) {
+ var sourceText = job.source;
+ var extractedTags = job.extractedTags;
+ var decorations = job.decorations;
+ var numberLines = job.numberLines;
+ var sourceNode = job.sourceNode;
+
+ var html = [];
+ // index past the last char in sourceText written to html
+ var outputIdx = 0;
+
+ var openDecoration = null;
+ var currentDecoration = null;
+ var tagPos = 0; // index into extractedTags
+ var decPos = 0; // index into decorations
+ var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
+
+ var adjacentSpaceRe = /([\r\n ]) /g;
+ var startOrSpaceRe = /(^| ) /gm;
+ var newlineRe = /\r\n?|\n/g;
+ var trailingSpaceRe = /[ \r\n]$/;
+ var lastWasSpace = true; // the last text chunk emitted ended with a space.
+
+ // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
+ var isIE678 = window['_pr_isIE6']();
+ var lineBreakHtml = (
+ isIE678
+ ? (sourceNode && sourceNode.tagName === 'PRE'
+ // Use line feeds instead of <br>s so that copying and pasting works
+ // on IE.
+ // See Issue 104 for the derivation of this mess.
+ ? (isIE678 === 6 ? '&#160;\r\n' :
+ isIE678 === 7 ? '&#160;<br />\r' :
+ isIE678 === 8 ? '&#160;<br />' : '&#160;\r')
+ // IE collapses multiple adjacent <br>s into 1 line break.
+ // Prefix every newline with '&#160;' to prevent such behavior.
+ // &nbsp; is the same as &#160; but works in XML as well as HTML.
+ : '&#160;<br />')
+ : '<br />');
+
+ var lineBreaker;
+ if (numberLines) {
+ var lineBreaks = [];
+ for (var i = 0; i < 10; ++i) {
+ lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
+ }
+ var lineNum = typeof numberLines === 'number'
+ ? numberLines - 1 /* number lines are 1 indexed */ : 0;
+ html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
+ if (lineNum) {
+ html.push(' value="', lineNum + 1, '"');
+ }
+ html.push('>');
+ lineBreaker = function () {
+ var lb = lineBreaks[++lineNum % 10];
+ // If a decoration is open, we need to close it before closing a list-item
+ // and reopen it on the other side of the list item.
+ return openDecoration
+ ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
+ };
+ } else {
+ lineBreaker = lineBreakHtml;
+ }
+
+ // A helper function that is responsible for opening sections of decoration
+ // and outputing properly escaped chunks of source
+ function emitTextUpTo(sourceIdx) {
+ if (sourceIdx > outputIdx) {
+ if (openDecoration && openDecoration !== currentDecoration) {
+ // Close the current decoration
+ html.push('</span>');
+ openDecoration = null;
+ }
+ if (!openDecoration && currentDecoration) {
+ openDecoration = currentDecoration;
+ html.push('<span class="', openDecoration, '">');
+ }
+ // This interacts badly with some wikis which introduces paragraph tags
+ // into pre blocks for some strange reason.
+ // It's necessary for IE though which seems to lose the preformattedness
+ // of <pre> tags when their innerHTML is assigned.
+ // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
+ // and it serves to undo the conversion of <br>s to newlines done in
+ // chunkify.
+ var htmlChunk = textToHtml(
+ tabExpander(sourceText.substring(outputIdx, sourceIdx)))
+ .replace(lastWasSpace
+ ? startOrSpaceRe
+ : adjacentSpaceRe, '$1&#160;');
+ // Keep track of whether we need to escape space at the beginning of the
+ // next chunk.
+ lastWasSpace = trailingSpaceRe.test(htmlChunk);
+ html.push(htmlChunk.replace(newlineRe, lineBreaker));
+ outputIdx = sourceIdx;
+ }
+ }
+
+ while (true) {
+ // Determine if we're going to consume a tag this time around. Otherwise
+ // we consume a decoration or exit.
+ var outputTag;
+ if (tagPos < extractedTags.length) {
+ if (decPos < decorations.length) {
+ // Pick one giving preference to extractedTags since we shouldn't open
+ // a new style that we're going to have to immediately close in order
+ // to output a tag.
+ outputTag = extractedTags[tagPos] <= decorations[decPos];
+ } else {
+ outputTag = true;
+ }
+ } else {
+ outputTag = false;
+ }
+ // Consume either a decoration or a tag or exit.
+ if (outputTag) {
+ emitTextUpTo(extractedTags[tagPos]);
+ if (openDecoration) {
+ // Close the current decoration
+ html.push('</span>');
+ openDecoration = null;
+ }
+ html.push(extractedTags[tagPos + 1]);
+ tagPos += 2;
+ } else if (decPos < decorations.length) {
+ emitTextUpTo(decorations[decPos]);
+ currentDecoration = decorations[decPos + 1];
+ decPos += 2;
+ } else {
+ break;
+ }
+ }
+ emitTextUpTo(sourceText.length);
+ if (openDecoration) {
+ html.push('</span>');
+ }
+ if (numberLines) { html.push('</li></ol>'); }
+ job.prettyPrintedHtml = html.join('');
+ }
+
+ /** Maps language-specific file extensions to handlers. */
+ var langHandlerRegistry = {};
+ /** Register a language handler for the given file extensions.
+ * @param {function (Object)} handler a function from source code to a list
+ * of decorations. Takes a single argument job which describes the
+ * state of the computation. The single parameter has the form
+ * {@code {
+ * source: {string} as plain text.
+ * decorations: {Array.<number|string>} an array of style classes
+ * preceded by the position at which they start in
+ * job.source in order.
+ * The language handler should assigned this field.
+ * basePos: {int} the position of source in the larger source chunk.
+ * All positions in the output decorations array are relative
+ * to the larger source chunk.
+ * } }
+ * @param {Array.<string>} fileExtensions
+ */
+ function registerLangHandler(handler, fileExtensions) {
+ for (var i = fileExtensions.length; --i >= 0;) {
+ var ext = fileExtensions[i];
+ if (!langHandlerRegistry.hasOwnProperty(ext)) {
+ langHandlerRegistry[ext] = handler;
+ } else if ('console' in window) {
+ console['warn']('cannot override language handler %s', ext);
+ }
+ }
+ }
+ function langHandlerForExtension(extension, source) {
+ if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
+ // Treat it as markup if the first non whitespace character is a < and
+ // the last non-whitespace character is a >.
+ extension = /^\s*</.test(source)
+ ? 'default-markup'
+ : 'default-code';
+ }
+ return langHandlerRegistry[extension];
+ }
+ registerLangHandler(decorateSource, ['default-code']);
+ registerLangHandler(
+ createSimpleLexer(
+ [],
+ [
+ [PR_PLAIN, /^[^<?]+/],
+ [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
+ [PR_COMMENT, /^<\!--[\s\S]*?(?:-\->|$)/],
+ // Unescaped content in an unknown language
+ ['lang-', /^<\?([\s\S]+?)(?:\?>|$)/],
+ ['lang-', /^<%([\s\S]+?)(?:%>|$)/],
+ [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
+ ['lang-', /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
+ // Unescaped content in javascript. (Or possibly vbscript).
+ ['lang-js', /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
+ // Contains unescaped stylesheet content
+ ['lang-css', /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
+ ['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i]
+ ]),
+ ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
+ registerLangHandler(
+ createSimpleLexer(
+ [
+ [PR_PLAIN, /^[\s]+/, null, ' \t\r\n'],
+ [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
+ ],
+ [
+ [PR_TAG, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
+ [PR_ATTRIB_NAME, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
+ ['lang-uq.val', /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
+ [PR_PUNCTUATION, /^[=<>\/]+/],
+ ['lang-js', /^on\w+\s*=\s*\"([^\"]+)\"/i],
+ ['lang-js', /^on\w+\s*=\s*\'([^\']+)\'/i],
+ ['lang-js', /^on\w+\s*=\s*([^\"\'>\s]+)/i],
+ ['lang-css', /^style\s*=\s*\"([^\"]+)\"/i],
+ ['lang-css', /^style\s*=\s*\'([^\']+)\'/i],
+ ['lang-css', /^style\s*=\s*([^\"\'>\s]+)/i]
+ ]),
+ ['in.tag']);
+ registerLangHandler(
+ createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': CPP_KEYWORDS,
+ 'hashComments': true,
+ 'cStyleComments': true
+ }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': 'null true false'
+ }), ['json']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': CSHARP_KEYWORDS,
+ 'hashComments': true,
+ 'cStyleComments': true,
+ 'verbatimStrings': true
+ }), ['cs']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': JAVA_KEYWORDS,
+ 'cStyleComments': true
+ }), ['java']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': SH_KEYWORDS,
+ 'hashComments': true,
+ 'multiLineStrings': true
+ }), ['bsh', 'csh', 'sh']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': PYTHON_KEYWORDS,
+ 'hashComments': true,
+ 'multiLineStrings': true,
+ 'tripleQuotedStrings': true
+ }), ['cv', 'py']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': PERL_KEYWORDS,
+ 'hashComments': true,
+ 'multiLineStrings': true,
+ 'regexLiterals': true
+ }), ['perl', 'pl', 'pm']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': RUBY_KEYWORDS,
+ 'hashComments': true,
+ 'multiLineStrings': true,
+ 'regexLiterals': true
+ }), ['rb']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': JSCRIPT_KEYWORDS,
+ 'cStyleComments': true,
+ 'regexLiterals': true
+ }), ['js']);
+ registerLangHandler(sourceDecorator({
+ 'keywords': COFFEE_KEYWORDS,
+ 'hashComments': 3, // ### style block comments
+ 'cStyleComments': true,
+ 'multilineStrings': true,
+ 'tripleQuotedStrings': true,
+ 'regexLiterals': true
+ }), ['coffee']);
+ registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
+
+ function applyDecorator(job) {
+ var sourceCodeHtml = job.sourceCodeHtml;
+ var opt_langExtension = job.langExtension;
+
+ // Prepopulate output in case processing fails with an exception.
+ job.prettyPrintedHtml = sourceCodeHtml;
+
+ try {
+ // Extract tags, and convert the source code to plain text.
+ var sourceAndExtractedTags = extractTags(sourceCodeHtml);
+ /** Plain text. @type {string} */
+ var source = sourceAndExtractedTags.source;
+ job.source = source;
+ job.basePos = 0;
+
+ /** Even entries are positions in source in ascending order. Odd entries
+ * are tags that were extracted at that position.
+ * @type {Array.<number|string>}
+ */
+ job.extractedTags = sourceAndExtractedTags.tags;
+
+ // Apply the appropriate language handler
+ langHandlerForExtension(opt_langExtension, source)(job);
+ // Integrate the decorations and tags back into the source code to produce
+ // a decorated html string which is left in job.prettyPrintedHtml.
+ recombineTagsAndDecorations(job);
+ } catch (e) {
+ if ('console' in window) {
+ console['log'](e && e['stack'] ? e['stack'] : e);
+ }
+ }
+ }
+
+ /**
+ * @param sourceCodeHtml {string} The HTML to pretty print.
+ * @param opt_langExtension {string} The language name to use.
+ * Typically, a filename extension like 'cpp' or 'java'.
+ * @param opt_numberLines {number|boolean} True to number lines,
+ * or the 1-indexed number of the first line in sourceCodeHtml.
+ */
+ function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
+ var job = {
+ sourceCodeHtml: sourceCodeHtml,
+ langExtension: opt_langExtension,
+ numberLines: opt_numberLines
+ };
+ applyDecorator(job);
+ return job.prettyPrintedHtml;
+ }
+
+ function prettyPrint(opt_whenDone) {
+ function byTagName(tn) { return document.getElementsByTagName(tn); }
+ // fetch a list of nodes to rewrite
+ var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
+ var elements = [];
+ for (var i = 0; i < codeSegments.length; ++i) {
+ for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
+ elements.push(codeSegments[i][j]);
+ }
+ }
+ codeSegments = null;
+
+ var clock = Date;
+ if (!clock['now']) {
+ clock = { 'now': function () { return (new Date).getTime(); } };
+ }
+
+ // The loop is broken into a series of continuations to make sure that we
+ // don't make the browser unresponsive when rewriting a large page.
+ var k = 0;
+ var prettyPrintingJob;
+
+ function doWork() {
+ var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
+ clock.now() + 250 /* ms */ :
+ Infinity);
+ for (; k < elements.length && clock.now() < endTime; k++) {
+ var cs = elements[k];
+ if (cs.className && cs.className.indexOf('prettyprint') >= 0) {
+ // If the classes includes a language extensions, use it.
+ // Language extensions can be specified like
+ // <pre class="prettyprint lang-cpp">
+ // the language extension "cpp" is used to find a language handler as
+ // passed to PR.registerLangHandler.
+ var langExtension = cs.className.match(/\blang-(\w+)\b/);
+ if (langExtension) { langExtension = langExtension[1]; }
+
+ // make sure this is not nested in an already prettified element
+ var nested = false;
+ for (var p = cs.parentNode; p; p = p.parentNode) {
+ if ((p.tagName === 'pre' || p.tagName === 'code' ||
+ p.tagName === 'xmp') &&
+ p.className && p.className.indexOf('prettyprint') >= 0) {
+ nested = true;
+ break;
+ }
+ }
+ if (!nested) {
+ // fetch the content as a snippet of properly escaped HTML.
+ // Firefox adds newlines at the end.
+ var content = getInnerHtml(cs);
+ content = content.replace(/(?:\r\n?|\n)$/, '');
+
+ // Look for a class like linenums or linenums:<n> where <n> is the
+ // 1-indexed number of the first line.
+ var numberLines = cs.className.match(/\blinenums\b(?::(\d+))?/);
+
+ // do the pretty printing
+ prettyPrintingJob = {
+ sourceCodeHtml: content,
+ langExtension: langExtension,
+ sourceNode: cs,
+ numberLines: numberLines
+ ? numberLines[1] && numberLines[1].length ? +numberLines[1] : true
+ : false
+ };
+ applyDecorator(prettyPrintingJob);
+ replaceWithPrettyPrintedHtml();
+ }
+ }
+ }
+ if (k < elements.length) {
+ // finish up in a continuation
+ setTimeout(doWork, 250);
+ } else if (opt_whenDone) {
+ opt_whenDone();
+ }
+ }
+
+ function replaceWithPrettyPrintedHtml() {
+ var newContent = prettyPrintingJob.prettyPrintedHtml;
+ if (!newContent) { return; }
+ var cs = prettyPrintingJob.sourceNode;
+
+ // push the prettified html back into the tag.
+ if (!isRawContent(cs)) {
+ // just replace the old html with the new
+ cs.innerHTML = newContent;
+ } else {
+ // we need to change the tag to a <pre> since <xmp>s do not allow
+ // embedded tags such as the span tags used to attach styles to
+ // sections of source code.
+ var pre = document.createElement('PRE');
+ for (var i = 0; i < cs.attributes.length; ++i) {
+ var a = cs.attributes[i];
+ if (a.specified) {
+ var aname = a.name.toLowerCase();
+ if (aname === 'class') {
+ pre.className = a.value; // For IE 6
+ } else {
+ pre.setAttribute(a.name, a.value);
+ }
+ }
+ }
+ pre.innerHTML = newContent;
+
+ // remove the old
+ cs.parentNode.replaceChild(pre, cs);
+ cs = pre;
+ }
+ }
+
+ doWork();
+ }
+
+ window['PR_normalizedHtml'] = normalizedHtml;
+ window['prettyPrintOne'] = prettyPrintOne;
+ window['prettyPrint'] = prettyPrint;
+ window['PR'] = {
+ 'combinePrefixPatterns': combinePrefixPatterns,
+ 'createSimpleLexer': createSimpleLexer,
+ 'registerLangHandler': registerLangHandler,
+ 'sourceDecorator': sourceDecorator,
+ 'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
+ 'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
+ 'PR_COMMENT': PR_COMMENT,
+ 'PR_DECLARATION': PR_DECLARATION,
+ 'PR_KEYWORD': PR_KEYWORD,
+ 'PR_LITERAL': PR_LITERAL,
+ 'PR_NOCODE': PR_NOCODE,
+ 'PR_PLAIN': PR_PLAIN,
+ 'PR_PUNCTUATION': PR_PUNCTUATION,
+ 'PR_SOURCE': PR_SOURCE,
+ 'PR_STRING': PR_STRING,
+ 'PR_TAG': PR_TAG,
+ 'PR_TYPE': PR_TYPE
+ };
+})();
+
+//third_party/javascript/google_code_prettify/src/lang-apollo.js
+/**
+ * @license Copyright (C) 2009 Onno Hommes.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for the AGC/AEA Assembly Language as described
+ * at http://virtualagc.googlecode.com
+ * <p>
+ * This file could be used by goodle code to allow syntax highlight for
+ * Virtual AGC SVN repository or if you don't want to commonize
+ * the header for the agc/aea html assembly listing.
+ *
+ * @author ohommes@alumni.cmu.edu
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // A line comment that starts with ;
+ [PR['PR_COMMENT'], /^#[^\r\n]*/, null, '#'],
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
+ // A double quoted, possibly multi-line, string.
+ [PR['PR_STRING'], /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"']
+ ],
+ [
+ [PR['PR_KEYWORD'], /^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/,null],
+ [PR['PR_TYPE'], /^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],
+ // A single quote possibly followed by a word that optionally ends with
+ // = ! or ?.
+ [PR['PR_LITERAL'],
+ /^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],
+ // Any word including labels that optionally ends with = ! or ?.
+ [PR['PR_PLAIN'],
+ /^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],
+ // A printable non-space non-special character
+ [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0()\"\\\';]+/]
+ ]),
+ ['apollo', 'agc', 'aea']);
+
+//third_party/javascript/google_code_prettify/src/lang-clj.js
+/**
+ * @license Copyright (C) 2011 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for Clojure.
+ *
+ *
+ * To use, include prettify.js and this file in your HTML page.
+ * Then put your code in an HTML tag like
+ * <pre class="prettyprint lang-lisp">(my lisp code)</pre>
+ * The lang-cl class identifies the language as common lisp.
+ * This file supports the following language extensions:
+ * lang-clj - Clojure
+ *
+ *
+ * I used lang-lisp.js as the basis for this adding the clojure specific
+ * keywords and syntax.
+ *
+ * "Name" = 'Clojure'
+ * "Author" = 'Rich Hickey'
+ * "Version" = '1.2'
+ * "About" = 'Clojure is a lisp for the jvm with concurrency primitives and a richer set of types.'
+ *
+ *
+ * I used <a href="http://clojure.org/Reference">Clojure.org Reference</a> as
+ * the basis for the reserved word list.
+ *
+ *
+ * @author jwall@google.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // clojure has more paren types than minimal lisp.
+ ['opn', /^[\(\{\[]+/, null, '([{'],
+ ['clo', /^[\)\}\]]+/, null, ')]}'],
+ // A line comment that starts with ;
+ [PR['PR_COMMENT'], /^;[^\r\n]*/, null, ';'],
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
+ // A double quoted, possibly multi-line, string.
+ [PR['PR_STRING'], /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"']
+ ],
+ [
+ // clojure has a much larger set of keywords
+ [PR['PR_KEYWORD'], /^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\b/, null],
+ [PR['PR_TYPE'], /^:[0-9a-zA-Z\-]+/]
+ ]),
+ ['clj']);
+
+//third_party/javascript/google_code_prettify/src/lang-css.js
+/**
+ * @license Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for CSS.
+ *
+ *
+ * To use, include prettify.js and this file in your HTML page.
+ * Then put your code in an HTML tag like
+ * <pre class="prettyprint lang-css"></pre>
+ *
+ *
+ * http://www.w3.org/TR/CSS21/grammar.html Section G2 defines the lexical
+ * grammar. This scheme does not recognize keywords containing escapes.
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // The space production <s>
+ [PR['PR_PLAIN'], /^[ \t\r\n\f]+/, null, ' \t\r\n\f']
+ ],
+ [
+ // Quoted strings. <string1> and <string2>
+ [PR['PR_STRING'],
+ /^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/, null],
+ [PR['PR_STRING'],
+ /^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/, null],
+ ['lang-css-str', /^url\(([^\)\"\']*)\)/i],
+ [PR['PR_KEYWORD'],
+ /^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,
+ null],
+ // A property name -- an identifier followed by a colon.
+ ['lang-css-kw', /^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],
+ // A C style block comment. The <comment> production.
+ [PR['PR_COMMENT'], /^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],
+ // Escaping text spans
+ [PR['PR_COMMENT'], /^(?:<!--|-->)/],
+ // A number possibly containing a suffix.
+ [PR['PR_LITERAL'], /^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],
+ // A hex color
+ [PR['PR_LITERAL'], /^#(?:[0-9a-f]{3}){1,2}/i],
+ // An identifier
+ [PR['PR_PLAIN'],
+ /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],
+ // A run of punctuation
+ [PR['PR_PUNCTUATION'], /^[^\s\w\'\"]+/]
+ ]),
+ ['css']);
+PR['registerLangHandler'](
+ PR['createSimpleLexer']([],
+ [
+ [PR['PR_KEYWORD'],
+ /^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]
+ ]),
+ ['css-kw']);
+PR['registerLangHandler'](
+ PR['createSimpleLexer']([],
+ [
+ [PR['PR_STRING'], /^[^\)\"\']+/]
+ ]),
+ ['css-str']);
+
+//third_party/javascript/google_code_prettify/src/lang-go.js
+/**
+ * @license Copyright (C) 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for the Go language..
+ * <p>
+ * Based on the lexical grammar at
+ * http://golang.org/doc/go_spec.html#Lexical_elements
+ * <p>
+ * Go uses a minimal style for highlighting so the below does not distinguish
+ * strings, keywords, literals, etc. by design.
+ * From a discussion with the Go designers:
+ * <pre>
+ * On Thursday, July 22, 2010, Mike Samuel <...> wrote:
+ * > On Thu, Jul 22, 2010, Rob 'Commander' Pike <...> wrote:
+ * >> Personally, I would vote for the subdued style godoc presents at http://golang.org
+ * >>
+ * >> Not as fancy as some like, but a case can be made it's the official style.
+ * >> If people want more colors, I wouldn't fight too hard, in the interest of
+ * >> encouragement through familiarity, but even then I would ask to shy away
+ * >> from technicolor starbursts.
+ * >
+ * > Like http://golang.org/pkg/go/scanner/ where comments are blue and all
+ * > other content is black? I can do that.
+ * </pre>
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace is made up of spaces, tabs and newline characters.
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
+ // Not escaped as a string. See note on minimalism above.
+ [PR['PR_PLAIN'], /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])+(?:\'|$))/, null, '"\'']
+ ],
+ [
+ // Block comments are delimited by /* and */.
+ // Single-line comments begin with // and extend to the end of a line.
+ [PR['PR_COMMENT'], /^(?:\/\/[^\r\n]*|\/\*[\s\S]*?\*\/)/],
+ [PR['PR_PLAIN'], /^(?:[^\/\"\']|\/(?![\/\*]))+/i]
+ ]),
+ ['go']);
+
+//third_party/javascript/google_code_prettify/src/lang-hs.js
+/**
+ * @license Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for Haskell.
+ *
+ *
+ * To use, include prettify.js and this file in your HTML page.
+ * Then put your code in an HTML tag like
+ * <pre class="prettyprint lang-hs">(my lisp code)</pre>
+ * The lang-cl class identifies the language as common lisp.
+ * This file supports the following language extensions:
+ * lang-cl - Common Lisp
+ * lang-el - Emacs Lisp
+ * lang-lisp - Lisp
+ * lang-scm - Scheme
+ *
+ *
+ * I used http://www.informatik.uni-freiburg.de/~thiemann/haskell/haskell98-report-html/syntax-iso.html
+ * as the basis, but ignore the way the ncomment production nests since this
+ * makes the lexical grammar irregular. It might be possible to support
+ * ncomments using the lookbehind filter.
+ *
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace
+ // whitechar -> newline | vertab | space | tab | uniWhite
+ // newline -> return linefeed | return | linefeed | formfeed
+ [PR['PR_PLAIN'], /^[\t\n\x0B\x0C\r ]+/, null, '\t\n\x0B\x0C\r '],
+ // Single line double and single-quoted strings.
+ // char -> ' (graphic<' | \> | space | escape<\&>) '
+ // string -> " {graphic<" | \> | space | escape | gap}"
+ // escape -> \ ( charesc | ascii | decimal | o octal
+ // | x hexadecimal )
+ // charesc -> a | b | f | n | r | t | v | \ | " | ' | &
+ [PR['PR_STRING'], /^\"(?:[^\"\\\n\x0C\r]|\\[\s\S])*(?:\"|$)/,
+ null, '"'],
+ [PR['PR_STRING'], /^\'(?:[^\'\\\n\x0C\r]|\\[^&])\'?/,
+ null, "'"],
+ // decimal -> digit{digit}
+ // octal -> octit{octit}
+ // hexadecimal -> hexit{hexit}
+ // integer -> decimal
+ // | 0o octal | 0O octal
+ // | 0x hexadecimal | 0X hexadecimal
+ // float -> decimal . decimal [exponent]
+ // | decimal exponent
+ // exponent -> (e | E) [+ | -] decimal
+ [PR['PR_LITERAL'],
+ /^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+\-]?\d+)?)/i,
+ null, '0123456789']
+ ],
+ [
+ // Haskell does not have a regular lexical grammar due to the nested
+ // ncomment.
+ // comment -> dashes [ any<symbol> {any}] newline
+ // ncomment -> opencom ANYseq {ncomment ANYseq}closecom
+ // dashes -> '--' {'-'}
+ // opencom -> '{-'
+ // closecom -> '-}'
+ [PR['PR_COMMENT'], /^(?:(?:--+(?:[^\r\n\x0C]*)?)|(?:\{-(?:[^-]|-+[^-\}])*-\}))/],
+ // reservedid -> case | class | data | default | deriving | do
+ // | else | if | import | in | infix | infixl | infixr
+ // | instance | let | module | newtype | of | then
+ // | type | where | _
+ [PR['PR_KEYWORD'], /^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^a-zA-Z0-9\']|$)/, null],
+ // qvarid -> [ modid . ] varid
+ // qconid -> [ modid . ] conid
+ // varid -> (small {small | large | digit | ' })<reservedid>
+ // conid -> large {small | large | digit | ' }
+ // modid -> conid
+ // small -> ascSmall | uniSmall | _
+ // ascSmall -> a | b | ... | z
+ // uniSmall -> any Unicode lowercase letter
+ // large -> ascLarge | uniLarge
+ // ascLarge -> A | B | ... | Z
+ // uniLarge -> any uppercase or titlecase Unicode letter
+ [PR['PR_PLAIN'], /^(?:[A-Z][\w\']*\.)*[a-zA-Z][\w\']*/],
+ // matches the symbol production
+ [PR['PR_PUNCTUATION'], /^[^\t\n\x0B\x0C\r a-zA-Z0-9\'\"]+/]
+ ]),
+ ['hs']);
+
+//third_party/javascript/google_code_prettify/src/lang-lisp.js
+/**
+ * @license Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for Common Lisp and related languages.
+ *
+ *
+ * To use, include prettify.js and this file in your HTML page.
+ * Then put your code in an HTML tag like
+ * <pre class="prettyprint lang-lisp">(my lisp code)</pre>
+ * The lang-cl class identifies the language as common lisp.
+ * This file supports the following language extensions:
+ * lang-cl - Common Lisp
+ * lang-el - Emacs Lisp
+ * lang-lisp - Lisp
+ * lang-scm - Scheme
+ *
+ *
+ * I used http://www.devincook.com/goldparser/doc/meta-language/grammar-LISP.htm
+ * as the basis, but added line comments that start with ; and changed the atom
+ * production to disallow unquoted semicolons.
+ *
+ * "Name" = 'LISP'
+ * "Author" = 'John McCarthy'
+ * "Version" = 'Minimal'
+ * "About" = 'LISP is an abstract language that organizes ALL'
+ * | 'data around "lists".'
+ *
+ * "Start Symbol" = [s-Expression]
+ *
+ * {Atom Char} = {Printable} - {Whitespace} - [()"\'']
+ *
+ * Atom = ( {Atom Char} | '\'{Printable} )+
+ *
+ * [s-Expression] ::= [Quote] Atom
+ * | [Quote] '(' [Series] ')'
+ * | [Quote] '(' [s-Expression] '.' [s-Expression] ')'
+ *
+ * [Series] ::= [s-Expression] [Series]
+ * |
+ *
+ * [Quote] ::= '' !Quote = do not evaluate
+ * |
+ *
+ *
+ * I used <a href="http://gigamonkeys.com/book/">Practical Common Lisp</a> as
+ * the basis for the reserved word list.
+ *
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ ['opn', /^\(+/, null, '('],
+ ['clo', /^\)+/, null, ')'],
+ // A line comment that starts with ;
+ [PR['PR_COMMENT'], /^;[^\r\n]*/, null, ';'],
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
+ // A double quoted, possibly multi-line, string.
+ [PR['PR_STRING'], /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"']
+ ],
+ [
+ [PR['PR_KEYWORD'], /^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, null],
+ [PR['PR_LITERAL'],
+ /^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],
+ // A single quote possibly followed by a word that optionally ends with
+ // = ! or ?.
+ [PR['PR_LITERAL'],
+ /^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],
+ // A word that optionally ends with = ! or ?.
+ [PR['PR_PLAIN'],
+ /^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],
+ // A printable non-space non-special character
+ [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0()\"\\\';]+/]
+ ]),
+ ['cl', 'el', 'lisp', 'scm']);
+
+//third_party/javascript/google_code_prettify/src/lang-lua.js
+/**
+ * @license Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for Lua.
+ *
+ *
+ * To use, include prettify.js and this file in your HTML page.
+ * Then put your code in an HTML tag like
+ * <pre class="prettyprint lang-lua">(my Lua code)</pre>
+ *
+ *
+ * I used http://www.lua.org/manual/5.1/manual.html#2.1
+ * Because of the long-bracket concept used in strings and comments, Lua does
+ * not have a regular lexical grammar, but luckily it fits within the space
+ * of irregular grammars supported by javascript regular expressions.
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
+ // A double or single quoted, possibly multi-line, string.
+ [PR['PR_STRING'], /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/, null, '"\'']
+ ],
+ [
+ // A comment is either a line comment that starts with two dashes, or
+ // two dashes preceding a long bracketed block.
+ [PR['PR_COMMENT'], /^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/],
+ // A long bracketed block not preceded by -- is a string.
+ [PR['PR_STRING'], /^\[(=*)\[[\s\S]*?(?:\]\1\]|$)/],
+ [PR['PR_KEYWORD'], /^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/, null],
+ // A number is a hex integer literal, a decimal real literal, or in
+ // scientific notation.
+ [PR['PR_LITERAL'],
+ /^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],
+ // An identifier
+ [PR['PR_PLAIN'], /^[a-z_]\w*/i],
+ // A run of punctuation
+ [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0][^\w\t\n\r \xA0\"\'\-\+=]*/]
+ ]),
+ ['lua']);
+
+//third_party/javascript/google_code_prettify/src/lang-ml.js
+/**
+ * @license Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for OCaml, SML, F# and similar languages.
+ *
+ * Based on the lexical grammar at
+ * http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597388
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace is made up of spaces, tabs and newline characters.
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
+ // #if ident/#else/#endif directives delimit conditional compilation
+ // sections
+ [PR['PR_COMMENT'],
+ /^#(?:if[\t\n\r \xA0]+(?:[a-z_$][\w\']*|``[^\r\n\t`]*(?:``|$))|else|endif|light)/i,
+ null, '#'],
+ // A double or single quoted, possibly multi-line, string.
+ // F# allows escaped newlines in strings.
+ [PR['PR_STRING'], /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])(?:\'|$))/, null, '"\'']
+ ],
+ [
+ // Block comments are delimited by (* and *) and may be
+ // nested. Single-line comments begin with // and extend to
+ // the end of a line.
+ // TODO: (*...*) comments can be nested. This does not handle that.
+ [PR['PR_COMMENT'], /^(?:\/\/[^\r\n]*|\(\*[\s\S]*?\*\))/],
+ [PR['PR_KEYWORD'], /^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/],
+ // A number is a hex integer literal, a decimal real literal, or in
+ // scientific notation.
+ [PR['PR_LITERAL'],
+ /^[+\-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],
+ [PR['PR_PLAIN'], /^(?:[a-z_][\w']*[!?#]?|``[^\r\n\t`]*(?:``|$))/i],
+ // A printable non-space non-special character
+ [PR['PR_PUNCTUATION'], /^[^\t\n\r \xA0\"\'\w]+/]
+ ]),
+ ['fs', 'ml']);
+
+//third_party/javascript/google_code_prettify/src/lang-proto.js
+/**
+ * @license Copyright (C) 2006 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for Protocol Buffers as described at
+ * http://code.google.com/p/protobuf/.
+ *
+ * Based on the lexical grammar at
+ * http://research.microsoft.com/fsharp/manual/spec2.aspx#_Toc202383715
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](PR['sourceDecorator']({
+ keywords: (
+ 'bool bytes default double enum extend extensions false fixed32 '
+ + 'fixed64 float group import int32 int64 max message option '
+ + 'optional package repeated required returns rpc service '
+ + 'sfixed32 sfixed64 sint32 sint64 string syntax to true uint32 '
+ + 'uint64'),
+ cStyleComments: true
+ }), ['proto']);
+
+//third_party/javascript/google_code_prettify/src/lang-scala.js
+/**
+ * @license Copyright (C) 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for Scala.
+ *
+ * Derived from http://lampsvn.epfl.ch/svn-repos/scala/scala-documentation/trunk/src/reference/SyntaxSummary.tex
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
+ // A double or single quoted string
+ // or a triple double-quoted multi-line string.
+ [PR['PR_STRING'],
+ /^(?:"(?:(?:""(?:""?(?!")|[^\\"]|\\.)*"{0,3})|(?:[^"\r\n\\]|\\.)*"?))/,
+ null, '"'],
+ [PR['PR_LITERAL'], /^`(?:[^\r\n\\`]|\\.)*`?/, null, '`'],
+ [PR['PR_PUNCTUATION'], /^[!#%&()*+,\-:;<=>?@\[\\\]^{|}~]+/, null,
+ '!#%&()*+,-:;<=>?@[\\]^{|}~']
+ ],
+ [
+ // A symbol literal is a single quote followed by an identifier with no
+ // single quote following
+ // A character literal has single quotes on either side
+ [PR['PR_STRING'], /^'(?:[^\r\n\\']|\\(?:'|[^\r\n']+))'/],
+ [PR['PR_LITERAL'], /^'[a-zA-Z_$][\w$]*(?!['$\w])/],
+ [PR['PR_KEYWORD'], /^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/],
+ [PR['PR_LITERAL'], /^(?:true|false|null|this)\b/],
+ [PR['PR_LITERAL'], /^(?:(?:0(?:[0-7]+|X[0-9A-F]+))L?|(?:(?:0|[1-9][0-9]*)(?:(?:\.[0-9]+)?(?:E[+\-]?[0-9]+)?F?|L?))|\\.[0-9]+(?:E[+\-]?[0-9]+)?F?)/i],
+ // Treat upper camel case identifiers as types.
+ [PR['PR_TYPE'], /^[$_]*[A-Z][_$A-Z0-9]*[a-z][\w$]*/],
+ [PR['PR_PLAIN'], /^[$a-zA-Z_][\w$]*/],
+ [PR['PR_COMMENT'], /^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/],
+ [PR['PR_PUNCTUATION'], /^(?:\.+|\/)/]
+ ]),
+ ['scala']);
+
+//third_party/javascript/google_code_prettify/src/lang-sql.js
+/**
+ * @license Copyright (C) 2008 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * @fileoverview
+ * Registers a language handler for SQL.
+ *
+ *
+ * To use, include prettify.js and this file in your HTML page.
+ * Then put your code in an HTML tag like
+ * <pre class="prettyprint lang-sql">(my SQL code)</pre>
+ *
+ *
+ * http://savage.net.au/SQL/sql-99.bnf.html is the basis for the grammar, and
+ * http://msdn.microsoft.com/en-us/library/aa238507(SQL.80).aspx as the basis
+ * for the keyword list.
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
+ // A double or single quoted, possibly multi-line, string.
+ [PR['PR_STRING'], /^(?:"(?:[^\"\\]|\\.)*"|'(?:[^\'\\]|\\.)*')/, null,
+ '"\'']
+ ],
+ [
+ // A comment is either a line comment that starts with two dashes, or
+ // two dashes preceding a long bracketed block.
+ [PR['PR_COMMENT'], /^(?:--[^\r\n]*|\/\*[\s\S]*?(?:\*\/|$))/],
+ [PR['PR_KEYWORD'], /^(?:ADD|ALL|ALTER|AND|ANY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|NATIONAL|NOCHECK|NONCLUSTERED|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PERCENT|PLAN|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNION|UNIQUE|UPDATE|UPDATETEXT|USE|USER|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WRITETEXT)(?=[^\w-]|$)/i, null],
+ // A number is a hex integer literal, a decimal real literal, or in
+ // scientific notation.
+ [PR['PR_LITERAL'],
+ /^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],
+ // An identifier
+ [PR['PR_PLAIN'], /^[a-z_][\w-]*/i],
+ // A run of punctuation
+ [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0+\-\"\']*/]
+ ]),
+ ['sql']);
+
+//third_party/javascript/google_code_prettify/src/lang-vb.js
+/**
+ * @license Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+/**
+ * @fileoverview
+ * Registers a language handler for various flavors of basic.
+ *
+ *
+ * To use, include prettify.js and this file in your HTML page.
+ * Then put your code in an HTML tag like
+ * <pre class="prettyprint lang-vb"></pre>
+ *
+ *
+ * http://msdn.microsoft.com/en-us/library/aa711638(VS.71).aspx defines the
+ * visual basic grammar lexical grammar.
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0\u2028\u2029]+/, null, '\t\n\r \xA0\u2028\u2029'],
+ // A double quoted string with quotes escaped by doubling them.
+ // A single character can be suffixed with C.
+ [PR['PR_STRING'], /^(?:[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})(?:[\"\u201C\u201D]c|$)|[\"\u201C\u201D](?:[^\"\u201C\u201D]|[\"\u201C\u201D]{2})*(?:[\"\u201C\u201D]|$))/i, null,
+ '"\u201C\u201D'],
+ // A comment starts with a single quote and runs until the end of the
+ // line.
+ [PR['PR_COMMENT'], /^[\'\u2018\u2019][^\r\n\u2028\u2029]*/, null, '\'\u2018\u2019']
+ ],
+ [
+ [PR['PR_KEYWORD'], /^(?:AddHandler|AddressOf|Alias|And|AndAlso|Ansi|As|Assembly|Auto|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|CBool|CByte|CChar|CDate|CDbl|CDec|Char|CInt|Class|CLng|CObj|Const|CShort|CSng|CStr|CType|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get|GetType|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|Let|Lib|Like|Long|Loop|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|Namespace|New|Next|Not|NotInheritable|NotOverridable|Object|On|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|ParamArray|Preserve|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TypeOf|Unicode|Until|Variant|Wend|When|While|With|WithEvents|WriteOnly|Xor|EndIf|GoSub|Let|Variant|Wend)\b/i, null],
+ // A second comment form
+ [PR['PR_COMMENT'], /^REM[^\r\n\u2028\u2029]*/i],
+ // A boolean, numeric, or date literal.
+ [PR['PR_LITERAL'],
+ /^(?:True\b|False\b|Nothing\b|\d+(?:E[+\-]?\d+[FRD]?|[FRDSIL])?|(?:&H[0-9A-F]+|&O[0-7]+)[SIL]?|\d*\.\d+(?:E[+\-]?\d+)?[FRD]?|#\s+(?:\d+[\-\/]\d+[\-\/]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)?|\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)\s+#)/i],
+ // An identifier?
+ [PR['PR_PLAIN'], /^(?:(?:[a-z]|_\w)\w*|\[(?:[a-z]|_\w)\w*\])/i],
+ // A run of punctuation
+ [PR['PR_PUNCTUATION'],
+ /^[^\w\t\n\r \"\'\[\]\xA0\u2018\u2019\u201C\u201D\u2028\u2029]+/],
+ // Square brackets
+ [PR['PR_PUNCTUATION'], /^(?:\[|\])/]
+ ]),
+ ['vb', 'vbs']);
+
+//third_party/javascript/google_code_prettify/src/lang-vhdl.js
+/**
+ * @fileoverview
+ * Registers a language handler for VHDL '93.
+ *
+ * Based on the lexical grammar and keywords at
+ * http://www.iis.ee.ethz.ch/~zimmi/download/vhdl93_syntax.html
+ *
+ * @author benoit@ryder.fr
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0']
+ ],
+ [
+ // String, character or bit string
+ [PR['PR_STRING'], /^(?:[BOX]?"(?:[^\"]|"")*"|'.')/i],
+ // Comment, from two dashes until end of line.
+ [PR['PR_COMMENT'], /^--[^\r\n]*/],
+ [PR['PR_KEYWORD'], /^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i, null],
+ // Type, predefined or standard
+ [PR['PR_TYPE'], /^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i, null],
+ // Predefined attributes
+ [PR['PR_TYPE'], /^\'(?:ACTIVE|ASCENDING|BASE|DELAYED|DRIVING|DRIVING_VALUE|EVENT|HIGH|IMAGE|INSTANCE_NAME|LAST_ACTIVE|LAST_EVENT|LAST_VALUE|LEFT|LEFTOF|LENGTH|LOW|PATH_NAME|POS|PRED|QUIET|RANGE|REVERSE_RANGE|RIGHT|RIGHTOF|SIMPLE_NAME|STABLE|SUCC|TRANSACTION|VAL|VALUE)(?=[^\w-]|$)/i, null],
+ // Number, decimal or based literal
+ [PR['PR_LITERAL'], /^\d+(?:_\d+)*(?:#[\w\\.]+#(?:[+\-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:E[+\-]?\d+(?:_\d+)*)?)/i],
+ // Identifier, basic or extended
+ [PR['PR_PLAIN'], /^(?:[a-z]\w*|\\[^\\]*\\)/i],
+ // Punctuation
+ [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0\-\"\']*/]
+ ]),
+ ['vhdl', 'vhd']);
+
+//third_party/javascript/google_code_prettify/src/lang-wiki.js
+/**
+ * @license Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for Wiki pages.
+ *
+ * Based on WikiSyntax at http://code.google.com/p/support/wiki/WikiSyntax
+ *
+ * @author mikesamuel@gmail.com
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ // Whitespace
+ [PR['PR_PLAIN'], /^[\t \xA0a-gi-z0-9]+/, null,
+ '\t \xA0abcdefgijklmnopqrstuvwxyz0123456789'],
+ // Wiki formatting
+ [PR['PR_PUNCTUATION'], /^[=*~\^\[\]]+/, null, '=*~^[]']
+ ],
+ [
+ // Meta-info like #summary, #labels, etc.
+ ['lang-wiki.meta', /(?:^^|\r\n?|\n)(#[a-z]+)\b/],
+ // A WikiWord
+ [PR['PR_LITERAL'], /^(?:[A-Z][a-z][a-z0-9]+[A-Z][a-z][a-zA-Z0-9]+)\b/
+ ],
+ // A preformatted block in an unknown language
+ ['lang-', /^\{\{\{([\s\S]+?)\}\}\}/],
+ // A block of source code in an unknown language
+ ['lang-', /^`([^\r\n`]+)`/],
+ // An inline URL.
+ [PR['PR_STRING'],
+ /^https?:\/\/[^\/?#\s]*(?:\/[^?#\s]*)?(?:\?[^#\s]*)?(?:#\S*)?/i],
+ [PR['PR_PLAIN'], /^(?:\r\n|[\s\S])[^#=*~^A-Zh\{`\[\r\n]*/]
+ ]),
+ ['wiki']);
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer']([[PR['PR_KEYWORD'], /^#[a-z]+/i, null, '#']], []),
+ ['wiki.meta']);
+
+//third_party/javascript/google_code_prettify/src/lang-yaml.js
+/** Contributed by ribrdb @ code.google.com
+ */
+
+/**
+ * @fileoverview
+ * Registers a language handler for YAML.
+ *
+ * @author ribrdb
+ */
+
+PR['registerLangHandler'](
+ PR['createSimpleLexer'](
+ [
+ [PR['PR_PUNCTUATION'], /^[:|>?]+/, null, ':|>?'],
+ [PR['PR_DECLARATION'], /^%(?:YAML|TAG)[^#\r\n]+/, null, '%'],
+ [PR['PR_TYPE'], /^[&]\S+/, null, '&'],
+ [PR['PR_TYPE'], /^!\S*/, null, '!'],
+ [PR['PR_STRING'], /^"(?:[^\\"]|\\.)*(?:"|$)/, null, '"'],
+ [PR['PR_STRING'], /^'(?:[^']|'')*(?:'|$)/, null, "'"],
+ [PR['PR_COMMENT'], /^#[^\r\n]*/, null, '#'],
+ [PR['PR_PLAIN'], /^\s+/, null, ' \t\r\n']
+ ],
+ [
+ [PR['PR_DECLARATION'], /^(?:---|\.\.\.)(?:[\r\n]|$)/],
+ [PR['PR_PUNCTUATION'], /^-/],
+ [PR['PR_KEYWORD'], /^\w+:[ \r\n]/],
+ [PR['PR_PLAIN'], /^\w+/]
+ ]), ['yaml', 'yml']);
+
+//third_party/javascript/jquery/v1_7_2/jquery-1.7.2.min.js
+/**
+ * @license jQuery JavaScript Library v1.7.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Wed Mar 21 12:46:34 2012 -0700
+ */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test("Â ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(
+a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f
+.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType)