diff options
Diffstat (limited to 'build/tools/droiddoc')
19 files changed, 16448 insertions, 0 deletions
diff --git a/build/tools/droiddoc/templates-cmsdk/assets/android-developer-docs.css b/build/tools/droiddoc/templates-cmsdk/assets/android-developer-docs.css new file mode 100644 index 0000000..cd610f7 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/android-developer-docs.css @@ -0,0 +1,2768 @@ +/* file: android-developer-core.css + author: smain + date: september 2008 + info: core developer styles (developer.android.com) + Required by jdiff +*/ + + +/* RESET STYLES */ + +html,body,div,h1,h2,h3,h4,h5,h6,p,img, +dl,dt,dd,ol,ul,li,table,caption,tbody, +tfoot,thead,tr,th,td,form,fieldset, +embed,object,applet { + margin: 0; + padding: 0; + border: 0; +} + +/* BASICS */ + +html, body { + overflow:hidden; /* keeps scrollbar off IE */ + background-color:#fff; +} + +body { + font-family:arial,sans-serif; + color:#000; + font-size:13px; + color:#333; + background-image:url(images/bg_fade.jpg); + background-repeat:repeat-x; +} + +a, a code { + color:#006699; +} + +a:active, +a:active code { + color:#f00; +} + +a:visited, +a:visited code { + color:#006699; +} + +input, select, +textarea, option, label { + font-family:inherit; + font-size:inherit; + padding:0; + margin:0; + vertical-align:middle; +} + +option { + padding:0 4px; +} + +p, form { + padding:0; + margin:0 0 1em; +} + +code, pre { + color:#007000; + font-family:monospace; + line-height:1em; +} + +var { + color:#007000; + font-style:italic; +} + +pre { + border:1px solid #ccc; + background-color:#fafafa; + padding:10px; + margin:0 0 1em 1em; + overflow:auto; + line-height:inherit; /* fixes vertical scrolling in webkit */ +} + +h1,h2,h3,h4,h5 { + margin:1em 0; + padding:0; +} + +p,ul,ol,dl,dd,dt,li { + line-height:1.3em; +} + +ul,ol { + margin:0 0 .8em; + padding:0 0 0 2em; +} + +li { + padding:0 0 .5em; +} + +dl { + margin:0 0 1em 0; + padding:0; +} + +dt { + margin:0; + padding:0; +} + +dd { + margin:0 0 1em; + padding:0 0 0 2em; +} + +li p { + margin:.5em 0 0; +} + +dd p { + margin:1em 0 0; +} + +li pre, li table, li img { + margin:.5em 0 0 1em; +} + +dd pre, +#jd-content dd table, +#jd-content dd img { + margin:1em 0 0 1em; +} + +li ul, +li ol, +dd ul, +dd ol { + margin:0; + padding: 0 0 0 2em; +} + +li li, +dd li { + margin:0; + padding:.5em 0 0; +} + +dl dl, +ol dl, +ul dl { + margin:0 0 1em; + padding:0; +} + +table { + font-size:1em; + margin:0 0 1em; + padding:0; + border-collapse:collapse; + border-width:0; + empty-cells:show; +} + +td,th { + border:1px solid #ccc; + padding:6px 12px; + text-align:left; + vertical-align:top; + background-color:inherit; +} + +th { + background-color:#dee8f1; +} + +td > p:last-child { + margin:0; +} + +hr.blue { + background-color:#DDF0F2; + border:none; + height:5px; + margin:20px 0 10px; +} + +blockquote { + margin: 0 0 1em 1em; + padding: 0 4em 0 1em; + border-left:2px solid #eee; +} +/* LAYOUT */ + +#body-content { + /* "Preliminary" watermark for preview releases and interim builds. + background:transparent url(images/preliminary.png) repeat scroll 0 0; */ + margin:0; + position:relative; + width:100%; +} + +#header { + height: 114px; + position:relative; + z-index:100; + min-width:675px; /* min width for the tabs, before they wrap */ + padding:0 10px; + border-bottom:3px solid #94b922; +} + +#headerLeft{ + padding: 25px 0 0; +} + +#headerLeft img{ + height:50px; + width:180px; +} + +#headerRight { + position:absolute; + right:0; + top:0; + text-align:right; +} + +/* Tabs in the header */ + +#header ul { + list-style: none; + margin: 7px 0 0; + padding: 0; + height: 29px; +} + +#header li { + float: left; + margin: 0px 2px 0px 0px; + padding:0; +} + +#header li a { + text-decoration: none; + display: block; + background-image: url(images/bg_images_sprite.png); + background-position: 0 -58px; + background-repeat: no-repeat; + color: #666; + font-size: 13px; + font-weight: bold; + width: 94px; + height: 29px; + text-align: center; + margin: 0px; +} + +#header li a:hover { + background-image: url(images/bg_images_sprite.png); + background-position: 0 -29px; + background-repeat: no-repeat; +} + +#header li a span { + position:relative; + top:7px; +} + +#header li a span+span { + display:none; +} + +/* tab highlighting */ + +.home #home-link a, +.guide #guide-link a, +.reference #reference-link a, +.sdk #sdk-link a, +.resources #resources-link a, +.videos #videos-link a { + background-image: url(images/bg_images_sprite.png); + background-position: 0 0; + background-repeat: no-repeat; + color: #fff; + font-weight: bold; + cursor:default; +} + +.home #home-link a:hover, +.guide #guide-link a:hover, +.reference #reference-link a:hover, +.sdk #sdk-link a:hover, +.resources #resources-link a:hover, +.videos #videos-link a:hover { + background-image: url(images/bg_images_sprite.png); + background-position: 0 0; +} + +#headerLinks { + margin:10px 10px 0 0; + height:13px; + font-size: 11px; + vertical-align: top; +} + +#headerLinks a { + color: #7FA9B5; +} + +#headerLinks img { + vertical-align:middle; +} + +#language { + margin:0 10px 0 4px; +} + +#search { + height:45px; + margin:15px 10px 0 0; +} + +/* MAIN BODY */ + +#mainBodyFluid { + margin: 20px 10px; + color:#333; +} + +#mainBodyFixed { + margin: 20px 10px; + color: #333; + width:930px; + position:relative; +} + +#mainBodyFixed h3, +#mainBodyFluid h3 { + color:#336666; + font-size:1.25em; + margin: 0em 0em 0em 0em; + padding-bottom:.5em; +} + +#mainBodyFixed h2, +#mainBodyFluid h2 { + color:#336666; + font-size:1.25em; + margin: 0; + padding-bottom:.5em; +} + +#mainBodyFixed h1, +#mainBodyFluid h1 { + color:#435A6E; + font-size:1.7em; + margin: 1em 0; +} + +#mainBodyFixed .green, +#mainBodyFluid .green, +#jd-content .green { + color:#7BB026; + background-color:none; +} + +#mainBodyLeft { + float: left; + width: 600px; + margin-right: 20px; + color: #333; + position:relative; +} + +div.indent { + margin-left: 40px; + margin-right: 70px; +} + +#mainBodyLeft p { + color: #333; + font-size: 13px; +} + +#mainBodyLeft p.blue { + color: #669999; +} + +#mainBodyLeft #communityDiv { + float: left; + background-image:url(images/bg_community_leftDiv.jpg); + background-repeat: no-repeat; + width: 581px; + height: 347px; + padding: 20px 0px 0px 20px; +} + +#mainBodyRight { + float: left; + width: 300px; + color: #333; +} + +#mainBodyRight p { + padding-right: 50px; + color: #333; +} + +#mainBodyRight table { + width: 100%; +} + +#mainBodyRight td { + border:0px solid #666; + padding:0px 5px; + text-align:left; +} + +#mainBodyRight td p { + margin:0 0 1em 0; +} + +#mainBodyRight .blueBorderBox { + border:5px solid #ddf0f2; + padding:18px 18px 18px 18px; + text-align:left; +} + +#mainBodyFixed .seperator { + background-image:url(images/hr_gray_side.jpg); + background-repeat:no-repeat; + width: 100%; + float: left; + clear: both; +} + +#mainBodyBottom { + float: left; + width: 100%; + clear:both; + color: #333; +} + +#mainBodyBottom .seperator { + background-image:url(images/hr_gray_main.jpg); + background-repeat:no-repeat; + width: 100%; + float: left; + clear: both; +} + +/* FOOTER */ + +#footer { + float: left; + width:90%; + margin: 20px; + color: #aaa; + font-size: 11px; +} + +#footer a { + color: #aaa; + font-size: 11px; +} + +#footer a:hover { + text-decoration: underline; + color:#aaa; +} + +#footerlinks { + margin-top:2px; +} + +#footerlinks a, +#footerlinks a:visited { + color:#006699; +} + +/* SEARCH FILTER */ + +#search_autocomplete { + color:#aaa; +} + +#search-button { + display:inline; +} + +#search_filtered_div { + position:absolute; + margin-top:-1px; + z-index:101; + border:1px solid #BCCDF0; + background-color:#fff; +} + +#search_filtered { + min-width:100%; +} +#search_filtered td{ + background-color:#fff; + border-bottom: 1px solid #669999; + line-height:1.5em; +} + +#search_filtered .jd-selected { + background-color: #94b922; + cursor:pointer; +} +#search_filtered .jd-selected, +#search_filtered .jd-selected a { + color:#fff; +} + +.no-display { + display: none; +} + +.jd-autocomplete { + font-family: Arial, sans-serif; + 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-row { + display: table-row; +} +.hide-row { + display: hidden; +} + +/* SEARCH */ + +/* restrict global search form width */ +#searchForm { + width:350px; +} + +#searchTxt { + width:200px; +} + +/* disable twiddle and size selectors for left column */ +#leftSearchControl div { + width: 100%; +} + +#leftSearchControl .gsc-twiddle { + background-image : none; +} + +#leftSearchControl td, #searchForm td { + border: 0px solid #000; +} + +#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; +} + +.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; +} + +#search-button { + margin:0 0 0 2px; + font-size:11px; +} + +/* search result tabs */ + +#doc-content .gsc-control { + position:relative; +} + +#doc-content .gsc-tabsArea { + position:relative; + white-space:nowrap; +} + +#doc-content .gsc-tabHeader { + padding: 3px 6px; + position:relative; + width:auto; +} + +#doc-content .gsc-tabHeader.gsc-tabhActive { + border-top: 2px solid #94B922; +} + +#doc-content h2#searchTitle { + padding:0; +} + +#doc-content .gsc-resultsbox-visible { + padding:1em 0 0 6px; +} + +/* CAROUSEL */ + +#homeMiddle { + padding: 0px 0px 0px 0px; + float: left; + width: 584px; + height: 627px; + position:relative; +} + +#topAnnouncement { + background:url(images/home/bg_home_announcement.png) no-repeat 0 0; +} + +#homeTitle { + padding:15px 15px 0; + height:30px; +} + +#homeTitle h2 { + padding:0; +} + +#announcement-block { + padding:0 15px 0; + overflow:hidden; + background: url(images/hr_gray_side.jpg) no-repeat 15px 0; + zoom:1; +} + +#announcement-block>* { + padding:15px 0 0; +} + +#announcement-block img { + float:left; + margin:0 30px 0 0; +} + +#announcement { + float:left; + margin:0; +} + +#carousel { + background:url(images/home/bg_home_carousel.png) no-repeat 0 0; + position:relative; + height:400px; +} + +#carouselMain { + background: url(images/home/bg_home_carousel_board.png) 0 0 no-repeat; + height:auto; + padding: 25px 21px 0; + overflow:hidden; + position:relative; + zoom:1; /*IE6*/ +} + +#carouselMain img { + margin:0; +} + +#carouselMain .bulletinDesc h3 { + margin:0; + padding:0; +} + +#carouselMain .bulletinDesc p { + margin:0; + padding:0.7em 0 0; +} + +#carouselWheel { + background: url(images/home/bg_home_carousel_wheel.png) 0 0 no-repeat; + padding-top:40px; + height:150px; +} + +.clearer { clear:both; } + +a#arrow-left, a#arrow-right { + float:left; + width:42px; + height:42px; + background-image:url(images/home/carousel_buttons_sprite.png); + background-repeat:no-repeat; +} +a#arrow-left { + margin:35px 3px 0 10px; +} +a#arrow-right { + margin:35px 10px 0 0; +} +a.arrow-left-off, +a#arrow-left.arrow-left-off:hover { + background-position:0 0; +} +a.arrow-right-off, +a#arrow-right.arrow-right-off:hover { + background-position:-42px 0; +} +a#arrow-left:hover { + background-position:0 -42px; +} +a#arrow-right:hover { + background-position:-42px -42px; +} +a.arrow-left-on { + background-position:0 0; +} +a.arrow-right-on { + background-position:-42px 0; +} +a.arrow-right-off, +a.arrow-left-off { + cursor:default; +} + +.app-list-container { + margin:0 20px; + position:relative; + width:100%; +} + +div#list-clip { + height:110px; + width:438px; + overflow:hidden; + position:relative; + float:left; +} + +div#app-list { + left:0; + z-index:1; + position:absolute; + margin:11px 0 0; + _margin-top:13px; + width:1000%; +} + +#app-list a { + display:block; + float:left; + height:90px; + width:90px; + margin:0 24px 0; + padding:3px; + background:#99cccc; + -webkit-border-radius:7px; + -moz-border-radius:7px; + border-radius:7px; + text-decoration:none; + text-align:center; + font-size:11px; + line-height:11px; +} + +#app-list a span { + position:relative; + top:-4px; +} + +#app-list img { + width:90px; + height:70px; + margin:0; +} + +#app-list a.selected, +#app-list a:active.selected, +#app-list a:hover.selected { + background:#A4C639; + color:#fff; + cursor:default; + text-decoration:none; +} + +#app-list a:hover, +#app-list a:active { + background:#ff9900; +} + +#app-list a:hover span, +#app-list a:active span { + text-decoration:underline; +} + +#droid-name { + padding-top:.5em; + color:#666; + padding-bottom:.25em; +} + +/*IE6*/ +* html #app-list a { zoom: 1; margin:0 24px 0 15px;} + +* html #list-clip { + width:430px !important; +} + +/*carousel bulletin layouts*/ +/*460px width*/ +/*185px height*/ +.img-left { + float:left; + width:230px; + overflow:hidden; + padding:8px 0 8px 8px; +} +.desc-right { + float:left; + width:270px; + padding:10px; +} +.img-right { + float:right; + width:220px; + overflow:hidden; + padding:8px 8px 8px 0; +} +.desc-left { + float:right; + width:280px; + padding:10px; + text-align:right; +} +.img-top { + padding:20px 20px 0; +} +.desc-bottom { + padding:10px; +} + + +/* VIDEO PAGE */ + +#mainBodyLeft.videoPlayer { + width:570px; +} + +#mainBodyRight.videoPlayer { + width:330px; +} + +/* player */ + +#videoPlayerBox { + background-color: #DAF3FC; + border-radius:7px; + -moz-border-radius:7px; + -webkit-border-radius:7px; + width:530px; + padding:20px; + border:1px solid #d3ecf5; + box-shadow:2px 3px 1px #eee; + -moz-box-shadow:2px 3px 1px #eee; + -webkit-box-shadow:2px 3px 1px #eee; +} + +#videoBorder { + background-color: #FFF; + min-height:399px; + height:auto !important; + border:1px solid #ccdada; + border-radius:7px 7px 0 0; + -moz-border-radius:7px 7px 0 0; + -webkit-border-top-left-radius:7px; + -webkit-border-top-right-radius:7px; +} + +#videoPlayerTitle { + width:500px; + padding:15px 15px 0; +} + +#videoPlayerTitle h2 { + font-weight:bold; + font-size:1.2em; + color:#336666; + margin:0; + padding:0; +} + +#objectWrapper { + padding:15px 15px; + height:334px; + width:500px; +} + +/* playlist tabs */ + +ul#videoTabs { + list-style-type:none; + padding:0; + clear:both; + margin:0; + padding: 20px 0 0 15px; + zoom:1; /* IE7/8, otherwise top-padding is double */ +} + +ul#videoTabs li { + display:inline; + padding:0; + margin:0 3px 0 0; + line-height:2em; +} + +ul#videoTabs li a { + border-radius:7px 7px 0 0; + -moz-border-radius:7px 7px 0 0; + -webkit-border-top-left-radius:7px; + -webkit-border-top-right-radius:7px; + background:#95c0d0; + color:#fff; + text-decoration:none; + padding:.45em 1.5em; + font-weight:bold; +} + +ul#videoTabs li.selected a { + font-weight:bold; + text-decoration:none; + color:#555; + background:#daf3fc; + border-bottom:1px solid #daf3fc; +} + +ul#videoTabs li:hover a { + background:#85acba; +} + +ul#videoTabs li.selected:hover a { + background:#daf3fc; +} + +/* playlists */ + +#videos { + background:#daf3fc; + margin-bottom:1.5em; + padding:15px; + border-radius:5px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + box-shadow:2px 3px 1px #eee; + -moz-box-shadow:2px 3px 1px #eee; + -webkit-box-shadow:2px 3px 1px #eee; +} + +#videos div { + display:none; +} + +#videos div.selected { + display:block; +} + +ul.videoPreviews { + list-style:none; + padding:0; + margin:0; + zoom:1; /* IE, otherwise, layout doesn't update when showing 'more' */ +} + +ul.videoPreviews li { + margin:0 0 5px; + padding:0; + overflow:hidden; + position:relative; +} + +#mainBodyFixed ul.videoPreviews h3 { + font-size: 12px; + margin:0 0 1em 130px; + padding:0; + font-weight:bold; + color:inherit; +} + +ul.videoPreviews a { + margin:1px; + padding:10px; + text-decoration:none; + height:90px; + display:block; + border-radius:5px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + background-color:transparent; +} + +ul.videoPreviews a:hover { + background-color:#FFF; + border:none; /* IE8, otherwise, bg doesn't work */ +} + +ul.videoPreviews a.selected { + background-color: #FF9900; +} + +ul.videoPreviews img { + float:left; + clear:left; + margin:0; +} + +ul.videoPreviews h3 { + font-size:12px; + font-weight:bold; + text-decoration:none; + margin:0 0 1em 130px; + padding:0; +} + +ul.videoPreviews p { + font-size: 12px; + text-decoration:none; + margin:0 0 1.2em 130px; +} + +ul.videoPreviews p.full { + display:none; +} + +ul.videoPreviews span.more { + padding:0 0 0 12px; + background:url(images/arrow_bluelink_down.png) 0 2px no-repeat; +} + +ul.videoPreviews span.less { + padding:0 0 0 12px; + background:url(images/arrow_bluelink_up.png) 0 2px no-repeat; + display:none; +} + +ul.videoPreviews p.toggle { + position:absolute; + margin:0; + margin-top:-23px; /* instead of bottom:23px, because IE won't do it correctly */ + left:140px; +} + +ul.videoPreviews p.toggle a { + height:auto; + margin:0; + padding:0; + zoom:1; /* IE6, otherwise the margin considers the img on redraws */ +} + +ul.videoPreviews p.toggle a:hover { + text-decoration:underline; + background:transparent; /* IE6, otherwise it inherits white */ +} + +/* featured videos */ + +#mainBodyRight h2 { + padding:0 0 5px; +} + +#mainBodyRight ul.videoPreviews { + margin:10px 0 0; +} + +#mainBodyRight ul.videoPreviews li { + font-size:11px; + line-height:13px; + margin:0 0 5px; + padding:0; +} + +#mainBodyRight ul.videoPreviews h3 { + padding:0; + margin:0; + font-size:100%; +} + +#mainBodyRight ul.videoPreviews a { + text-decoration:none; + height:108px; + border:1px solid #FFF; +} + +#mainBodyRight ul.videoPreviews a:hover { + border:1px solid #CCDADA; +} + +#mainBodyRight ul.videoPreviews a.selected { + border:1px solid #FFF; +} + +#mainBodyRight ul.videoPreviews p { + line-height:1.2em; + padding:0; + margin:4px 0 0 130px; +} + +#mainBodyRight ul.videoPreviews img { + margin-top:5px; +} + +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #080; } +.kwd { color: #008; } +.com { color: #800; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +dl.tag-list dt code, +.tag { color: #008; } +dl.atn-list dt code, +.atn { color: #828; } +.atv { color: #080; } +.dec { color: #606; } + +@media print { + .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; } +} + + +#title { + border-bottom: 4px solid #ccc; + display:none; +} + +#title h1 { + color:#336666; + margin:0; + padding: 5px 10px; + font-size: 1em; + line-height: 15px; +} + +#title h1 .small{ + color:#000; + margin:0; + font-size: 13px; + padding:0 0 0 15px; +} + +/* SIDE NAVIGATION */ + +#side-nav { + padding:0 6px 0 0; + background-color: #fff; + font-size:12px; +} + +#resize-packages-nav { +/* keeps the resize handle below the h-scroll handle */ + height:270px; + overflow:hidden; + max-height:100%; +} + +#packages-nav { + height:270px; + max-height:inherit; + position:relative; + overflow:auto; +} + +#classes-nav, +#devdoc-nav { + overflow:auto; + position:relative; +} + +#side-nav ul { + list-style: none; + margin: 0; + padding:5px 0; +} + +#side-nav ul ul { + margin: .5em 0 0 0; + padding: 0; +} + +#side-nav li { + padding:0; + padding:1px 0 1px 0; + zoom:1; +} + +#side-nav li span.heading, +#side-nav li h2 { + display:block; + font-size:12px; + font-weight: bold; + margin:.5em 0 0 0; + padding: 3px 0 1px 9px; +} + +#side-nav li a { + display: inline-block; /* needed to apply padding to line-wraps */ + text-decoration:none; + padding: 0 0 0 18px; + zoom:1; +} + +#side-nav li a span+span { + display:none; +} + +#side-nav li a:hover { + text-decoration:underline; +} + +#side-nav li a+a { + padding: 0; +} +/*second level (nested) list*/ +#side-nav li li li a { + padding: 0 0 0 28px; +} +/*third level (nested) list*/ +#side-nav li li li li a { + padding: 0 0 0 38px; +} + +#side-nav .selected { + background-color: #435a6e; + color: #fff; + font-weight:bold; +} + +#side-nav .selected a { + color: #fff; + text-decoration:none; +} + +#side-nav strong { + display:block; +} + +#side-nav .toggle-list .toggle-img { + margin:0; + padding:0; + position:absolute; + top:0; + left:0; + height:16px; + width:15px; + outline-style:none; +} +/* second-level toggle */ +#side-nav .toggle-list .toggle-list .toggle-img { + left:10px; +} + +#side-nav .closed .toggle-img, +#side-nav .open .closed .toggle-img { + background:url('images/triangle-closed-small.png') 7px 4px no-repeat; +} +#side-nav .open .toggle-img { + background:url('images/triangle-opened-small.png') 7px 4px no-repeat; +} + +#side-nav .toggle-list { + position:relative; +} + +#side-nav .toggle-list ul { + margin:0; + display:none; +} + +#side-nav .toggle-list div { + display:block; +} + +#index-links .selected { + background-color: #fff; + color: #000; + font-weight:normal; + text-decoration:none; +} + +#index-links { + padding:7px 0 4px 10px; +} + +/* nav tree */ + +#nav-tree ul { + padding:5px 0 1.5em; +} + +#side-nav #nav-tree ul li a, +#side-nav #nav-tree ul li span.no-children { + padding: 0 0 0 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 { + margin:0; +} + +#nav-tree a.nolink { + color: black; + text-decoration: none; +} + +#nav-tree span.label { + width: 100%; +} + +#nav-tree { + overflow-x: auto; + overflow-y: scroll; +} + +#nav-swap { + font-size:10px; + line-height:10px; + margin-left:1em; + text-decoration:none; + display:block; +} + +#tree-link { + +} + +/* DOCUMENT BODY */ + +#doc-content { + overflow:auto; +} + +#jd-header { + background-color: #E2E2E2; + padding: 7px 15px; +} + +#jd-header h1 { + margin: 0 0 10px; + font-size:1.7em; +} + +#jd-header .crumb { + font-size:.9em; + line-height:1em; + color:#777; +} + +#jd-header .crumb a, +#jd-header .crumb a:visited { + text-decoration:none; + color:#777; +} + +#jd-header .crumb a:hover { + text-decoration:underline; +} + +#jd-header table { + margin:0; + padding:0; +} + +#jd-header td { + border:none; + padding:0; + vertical-align:top; +} + +#jd-header.guide-header { + background-color:#fff; + color:#435a6e; + height:50px; +} + +#jd-descr { + position:relative; +} + +/* summary tables for reference pages */ +.jd-sumtable { + margin: .5em 1em 1em 1em; + width:95%; /* consistent table widths; within IE's quirks */ + font-size:.9em; +} + +.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-subclasses { + margin: 1em 0 0 0; + max-width:968px; +} + +/* 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; +} + +/* page-top-right container for reference pages (holds +links to summary tables) */ +#api-info-block { + font-size:.8em; + padding:6px 10px; + font-weight:normal; + float:right; + text-align:right; + color:#999; + max-width:70%; +} + +#api-level-toggle { + padding:0 10px; + font-size:11px; + float:right; +} + +#api-level-toggle label.disabled { + color:#999; +} + +div.api-level { + font-size:.8em; + font-weight:normal; + color:#999; + float:right; + padding:0 7px 0; + margin-top:-25px; +} + +#api-info-block div.api-level { + font-size:1.3em; + font-weight:bold; + float:none; + color:#444; + padding:0; + margin:0; +} + +/* Force link colors for IE6 */ +div.api-level a { + color:#999; +} +#api-info-block div.api-level a:link { + color:#444; +} +#api-level-toggle a { + color:#999; +} + +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 #dddd00; + 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; +} + +.absent, +.absent a:link, +.absent a:visited, +.absent a:hover, +.absent * { + color:#bbb !important; + cursor:default !important; + text-decoration:none !important; +} + +#api-level-toggle a, +.api-level a { + color:inherit; + text-decoration:none; +} + +#api-level-toggle a:hover, +.api-level a:hover { + color:inherit; + text-decoration:underline !important; + cursor:pointer !important; +} + +#side-nav li.absent.selected, +#side-nav li.absent.selected *, +#side-nav div.label.absent.selected, +#side-nav div.label.absent.selected * { + background-color:#eaeaea !important; +} +/* IE6 quirk (won't chain classes, so just keep background blue) */ +* html #side-nav li.selected, +* html #side-nav li.selected *, +* html #side-nav div.label.selected, +* html #side-nav div.label.selected * { + background-color: #435a6e !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)"; +} + + +/* applies to a div containing links to summary tables */ +.sum-details-links { + padding:0; + font-weight:normal; +} + +.sum-details-links a { + text-decoration:none; +} + +.sum-details-links a:hover { + text-decoration:underline; +} + + +/* inheritance table */ +.jd-inheritance-table { + border-spacing:0; + margin:0; + padding:0; + font-size:.9em; +} +.jd-inheritance-table td { + border: none; + margin: 0; + padding: 0; +} +.jd-inheritance-table .jd-inheritance-space { + font-weight:bold; + width:1em; +} +.jd-inheritance-table .jd-inheritance-interface-cell { + padding-left: 17px; +} + +#jd-content { + padding: 18px 15px; +} + +hr { + background-color:#ccc; + border-color:#fff; + margin:2em 0 1em; +} + +/* DOC CLASSES */ + +#jd-content h1 { +/*sdk page*/ + font-size:1.6em; + color:#336666; + margin:0 0 .5em; +} + +#jd-content h2 { + font-size:1.45em; + color:#111; + border-top:2px solid #ccc; + padding: .5em 0 0; + margin: 2em 0 1em 0; +} + +#jd-content h3 { + font-size:1.3em; + color:#3a3a3a; + padding: 0; + margin: 1.5em 0 .65em 0; +} + +#jd-content h4 { + font-size:1.1em; + color:#3a3a3a; + padding: 0; + margin: 1.25em 0 .65em 0; +} + +#jd-content h5 { + font-size:1.0em; + color:#3a3a3a; + padding: 0; + margin: 1em 0 .65em 0; +} + +#jd-content .small-header { + font-size:1em; + color:#000; + font-weight:bold; + border:none; + padding:0; + margin:1em 0 .5em; + position:inherit; +} + +#jd-content table { + margin: 0 0 1em 1em; +} + +#jd-content img { + margin: 0 0 1em 1em; +} + +#jd-content li img, +#jd-content dd img { + margin:.5em 0 .5em 1em; +} + +.nolist { + list-style:none; + padding:0; + margin:0 0 1em 1em; +} + +.nolist li { + padding:0 0 2px; + margin:0; +} + +h4 .normal { + font-size:.9em; + font-weight:normal; +} + +.caps { + font-variant:small-caps; + font-size:1.2em; +} + +dl.tag-list dl.atn-list { + padding:0 0 0 2em; +} + +.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; + line-height:1em; +} + +.jd-tagdescr p { + margin:.5em 0; + padding: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 */ +} + +h4.jd-tagtitle { + margin:0; +} + +/* 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; +} + +.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; +} + +#jd-content table h2 { + background-color: #d6d6d6; + font-size: 1.1em; + margin:0 0 10px; + padding:5px; + left:0; + width:auto; +} + +div.design-announce { + border-top:1px solid #33B5E5; + border-bottom:1px solid #33B5E5; + padding:5px 10px 10px 55px; + margin:2em 0; + background:url('images/icon_design.png') 5px 13px no-repeat; +} + +div.design-announce p { + margin: .5em 0 0 0; +} + +div.special { + padding: .5em 1em 1em 1em; + margin: 0 0 1em; + background-color: #DAF3FC; + border:1px solid #d3ecf5; + border-radius:5px; + -moz-border-radius:5px; + -webkit-border-radius:5px; +} + +div.special p { + margin: .5em 0 0 0; +} + +div.special ol { + margin: 0; +} + +div.special ol li { + margin: 0; + padding: 0; +} + +#jd-content div.special h2, +#jd-content div.special h3 { + color:#669999; + font-size:1.2em; + border:none; + margin:0 0 .5em; + padding:0; +} + +#jd-content div.special.reference h2, +#jd-content div.special.reference h3, +#jd-content div.special.reference h4 { + color:#000; + font-size:1em; + border:none; + font-weight:bold; + margin:.5em 0; + padding:0; +} + +p.note, div.note, +p.caution, div.caution, +p.warning, div.warning { + margin: 1em; + padding: 0 0 0 .5em; + border-left: 4px solid; +} + +p.special-note, +div.special-note { + background-color:#EBF3DB; + padding:10px 20px; + margin:0 0 1em; +} + +p.note, +div.note { + border-color: #99aacc; +} + +p.warning, +div.warning { + border-color: #aa0033; +} + +p.caution, +div.caution { + border-color: #ffcf00; +} + +li .note, +li .caution, +li .warning { + margin: .5em 0 0 0; + padding: .2em .5em .2em .9em; +} + +/* Makes sure the first paragraph does not add top-whitespace within the box*/ +li .note>p:first-child, +li .caution>p:first-child, +li .warning>p:first-child { + margin-top:0; + padding-top:0; +} + +dl.xml dt { + font-variant:small-caps; + font-size:1.2em; +} + +dl.xml dl { + padding:0; +} + +dl.xml dl dt { + font-variant:normal; + font-size:1em; +} + +.listhead li { + font-weight: bold; +} + +.listhead li *, /*ie*/.listhead li li { + font-weight: normal; +} + +ol.no-style, +ul.no-style { + list-style:none; + padding-left:1em; +} + +.new, +.new-child { + font-size: .78em; + font-weight: bold; + color: #ff3d3d; + text-decoration: none; + vertical-align:top; + line-height:.9em; + white-space:nowrap; +} + +.toggle-list.open .new-child { + display:none; +} + +pre.classic { + background-color:transparent; + border:none; + padding:0; +} + +p.img-caption { + margin: -0.5em 0 1em 1em; /* matches default img left-margin */ +} + +div.figure { + float:right; + clear:right; + margin:1em 0 0 0; + padding:0 0 0 3em; + background-color:#fff; + /* width must be defined w/ an inline style matching the image width */ +} + +#jd-content +div.figure img { + margin: 0 0 1em; +} + +div.figure p.img-caption { + margin: -0.5em 0 1em 0; +} + +p.table-caption { + margin: 0 0 0.5em 1em; /* matches default table left-margin */ +} + + +/* toggle for misc content (such as long sample code) + see toggleContent() script in android-developer-docs.js */ +.toggle-content.closed .toggle-content-toggleme { + display:none; +} + +.toggle-content a[href="#"] { + text-decoration:none; + color:inherit; +} + +.toggle-content-toggleme { + padding-bottom:1px; /* fixes animation bounce due to margins */ +} + +#jd-content .toggle-content img.toggle-content-img { + margin:0; +} + + +/* BEGIN quickview sidebar element styles */ + +#qv-wrapper { + float: right; + width:310px; /* +35px padding */ + background-color:#fff; + margin:-48px 0 2px 0; + padding:0 0 20px 35px; +} + +#qv { + background-color:#fff; + border:4px solid #dee8f1; + margin:0; + padding:0 5px 5px; + width:292px; /* +10px padding; +8px border */ + font-size:.9em; +} + +#qv ol { + list-style:none; + padding: 0; +} + +#qv ol ol{ + list-style:none; + padding: 0 0 0 12px; + margin:0; +} + +#qv ul { + padding: 0 10px 0 2em; +} + +#qv li { + padding: 0 10px 3px; + line-height: 1.2em; +} + +#qv li li { + padding: 3px 10px 0; +} + +#qv ul li { + padding: 0 10px 0 0; +} + +#qv li.selected a { + color:#555; + text-decoration:none; +} + +#qv a, +#qv a code { + color:#cc6600; +} + +#qv p { + margin:8px 0 0; + padding:0 10px; +} + +#jd-content #qv h2 { + font-size:1.05em; + font-weight:bold; + margin:12px 0 .25em 0; + padding:0 10px; + background-color:transparent; + color:#7BB026; + border:none; + left:0; + z-index:1; +} + +#qv-extra #rule { + padding: 0 10px; + margin: 0; +} + +#qv-sub-rule { + padding: 5px 15px 10px; + margin: 0; +} + +#jd-content +#qv-sub-rule h2 { + margin: 0 0 .5em 0; +} + +/* END quickview sidebar element styles */ + +/* Begin sidebox sidebar element styles */ + +.sidebox-wrapper { + float:right; + clear:right; + width:310px; /* +35px padding */ + background-color:#fff; + margin:0; + padding:0 0 20px 35px; +} + +.sidebox { + border-left:1px solid #dee8f1; + background-color:#ffffee; + margin:0; + padding:8px 12px; + font-size:0.9em; + width:285px; /* +24px padding; +1px border */ +} + +.sidebox p { + margin-bottom: .75em; +} + +.sidebox ul { + padding: 0 0 0 1.5em; +} + +.sidebox li ul { + margin-top:0; + margin-bottom:.1em; +} + +.sidebox li { +padding:0 0 0 0em; +} + +#jd-content .sidebox h2, +#jd-content .sidebox h3, +#jd-content .sidebox h4, +#jd-content .sidebox h5 { + border:none; + font-size:1em; + margin:0; + padding:0 0 8px; + left:0; + z-index:0; +} + +.sidebox hr { + background-color:#ccc; + border:none; +} + +/* End sidebox sidebar element styles */ + +/* BEGIN developer training bar styles */ + +div#tb-wrapper { + float: right; + clear:right; + width:380px; /* +25px padding = 405 */ + background-color:#fff; + margin:0 0 2px 0; + padding:0 0 20px 25px; +} + +div#tb { + margin:0; + padding:0 15px; + width:350px; /* +15px padding = 380 */ + font-size:.9em; + background:#e9e9e9; + border:1px solid #aaa; + border-radius:5px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + overflow:auto; +} + +div#tb h2 { + font-size:1.3em; + font-weight:bold; + margin:1em 0; + padding:0; + background-color:transparent; + border:none; + clear:both; +} + +div.download-box a.button { + color: #069; + font-size:1.1em; + font-weight:bold; + text-decoration:none; + height:27px; + line-height:27px; + text-align:center; + padding:5px 8px; + background-color: #fff; + border: 1px solid #aaa; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +div.download-box 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'); + color: #fff; +} + +div.download-box a.button:active { + background-color: #1E799A; + background-image: none; + border-color: #30B7E6; +} + +div.download-box p.filename { + font-size:0.85em; + color:#888; + margin:4px 0 1em 10px; +} + +/* End developer training bar */ + +/* Training nav bar (previous/next) */ + +div.training-nav-top { + float: right; + width:380px; /* +25px padding = 405 */ + margin:-58px 0 0 0; + padding:0 0 20px 25px; +} + +div.training-nav-bottom { + padding:1px; /* for weird FF bug (scrollbar appears) */ + margin:3em 0; + overflow:auto; +} + +div.training-nav-button-next a, +div.training-nav-button-previous a { + display:block; + width:160px; + height:55px; + padding:4px 7px; + border:1px solid #aaa; + border-radius:5px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + text-decoration:none; + font-weight:bold; +} + +div.training-nav-button-next a:hover, +div.training-nav-button-previous a:hover { + border:1px solid #069; /* match link color */ +} + +div.training-nav-button-next a:active, +div.training-nav-button-previous a:active { + border:1px solid #f00; /* match link color */ +} + +div.training-nav-button-previous { + float:left; + text-align:left; +} + +div.training-nav-button-next { + float:right; + text-align:right; +} + +span.training-nav-button-title { + display:block; + font-size:.85em; + font-weight:normal; + line-height:1.3em; + margin:.5em 0 0; +} + +/* End training nav bar */ + +/* BEGIN image and caption styles (originally for UI Guidelines docs) */ + +table.image-caption { + padding:0; + margin:.5em 0; + border:0; +} + +td.image-caption-i { + font-size:92%; + padding:0 5px; + margin:0; + border:0; +} + +td.image-caption-i img { + padding:0 1em; + margin:0; +} + +.image-list { + width:24px; + text-align:center; +} + +td.image-caption-c { + font-size:92%; + padding:1em 2px 2px 2px; + margin:0; + border:0; + width:350px; +} + +.grad-rule-top { +background-image:url(images/grad-rule-qv.png); +background-repeat:no-repeat; +padding-top:1em; +margin-top:0; +} + +.image-caption-nested { + margin-top:0; + padding:0 0 0 1em; +} + +.image-caption-nested td { + padding:0 4px 2px 0; + margin:0; + border:0; +} + +/* END image and caption styles */ + +/* table of contents */ + +ol.toc { + margin: 0 0 1em 0; + padding: 0; + list-style: none; + font-size:95%; +} + +ol.toc li { + font-weight: bold; + margin: 0 0 .5em 1em; + padding: 0; +} + +ol.toc li p { + font-weight: normal; +} + +ol.toc li ol { + margin: 0; + padding: 0; +} + +ol.toc li li { + padding: 0; + margin: 0 0 0 1em; + font-weight: normal; + list-style: none; +} + +table ol.toc { + margin-left: 0; +} + +.columns td { + padding:0 5px; + border:none; +} + +/* link table */ +.jd-linktable { + margin: 0 0 1em; + border-bottom: 1px solid #888; +} +.jd-linktable th, +.jd-linktable td { + padding: 3px 5px; + vertical-align: top; + text-align: left; + border:none; +} +.jd-linktable tr { + background-color: #fff; +} +.jd-linktable td { + border-top: 1px solid #888; + background-color: inherit; +} +.jd-linktable td p { + padding: 0 0 5px; +} +.jd-linktable .jd-linkcol { +} +.jd-linktable .jd-descrcol { +} +.jd-linktable .jd-typecol { + text-align:right; +} +.jd-linktable .jd-valcol { +} +.jd-linktable .jd-commentrow { + border-top:none; + padding-left:25px; +} +.jd-deprecated-warning { + margin-top: 0; + margin-bottom: 10px; +} + +tr.alt-color { + background-color: #f6f6f6; +} + +/* expando trigger */ +#jd-content .jd-expando-trigger-img { + margin:0; +} + +/* jd-expando */ +.jd-inheritedlinks { + padding:0 0 0 13px +} + +/* SDK PAGE */ +table.download tr { + background-color:#d9d9d9; +} + +table.download tr.alt-color { + background-color:#ededed; +} + +table.download td, +table.download th { + border:2px solid #fff; + padding:10px 5px; +} + +table.download th { + background-color:#6d8293; + color:#fff; +} + +/* INLAY 180 COPY and 240PX EXTENSION */ +/* modified to 43px so that all browsers eliminate the package panel h-scroll */ +.g-tpl-240 .g-unit, +.g-unit .g-tpl-240 .g-unit, +.g-unit .g-unit .g-tpl-240 .g-unit { + display: block; + margin: 0 0 0 243px; + width: auto; + float: none; +} +.g-unit .g-unit .g-tpl-240 .g-first, +.g-unit .g-tpl-240 .g-first, +.g-tpl-240 .g-first { + display: block; + margin: 0; + width: 243px; + float: left; +} +/* 240px alt */ +.g-tpl-240-alt .g-unit, +.g-unit .g-tpl-240-alt .g-unit, +.g-unit .g-unit .g-tpl-240-alt .g-unit { + display: block; + margin: 0 243px 0 0; + width: auto; + float: none; +} +.g-unit .g-unit .g-tpl-240-alt .g-first, +.g-unit .g-tpl-240-alt .g-first, +.g-tpl-240-alt .g-first { + display: block; + margin: 0; + width: 243px; + float: right; +} + +/* 200px */ +.g-tpl-200 .g-unit, +.g-unit .g-tpl-200 .g-unit, +.g-unit .g-unit .g-tpl-200 .g-unit { + display: block; + margin: 0 0 0 200px; + width: auto; + float: none; +} +.g-unit .g-unit .g-tpl-200 .g-first, +.g-unit .g-tpl-200 .g-first, +.g-tpl-200 .g-first { + display: block; + margin: 0; + width: 200px; + float: left; +} +/* 200px alt */ +.g-tpl-200-alt .g-unit, +.g-unit .g-tpl-200-alt .g-unit, +.g-unit .g-unit .g-tpl-200-alt .g-unit { + display: block; + margin: 0 200px 0 0; + width: auto; + float: none; +} +.g-unit .g-unit .g-tpl-200-alt .g-first, +.g-unit .g-tpl-200-alt .g-first, +.g-tpl-200-alt .g-first { + display: block; + margin: 0; + width: 200px; + float: right; +} + +/* 190px */ +.g-tpl-190 .g-unit, +.g-unit .g-tpl-190 .g-unit, +.g-unit .g-unit .g-tpl-190 .g-unit { + display: block; + margin: 0 0 0 190px; + width: auto; + float: none; +} +.g-unit .g-unit .g-tpl-190 .g-first, +.g-unit .g-tpl-190 .g-first, +.g-tpl-190 .g-first { + display: block; + margin: 0; + width: 190px; + float: left; +} +/* 190px alt */ +.g-tpl-190-alt .g-unit, +.g-unit .g-tpl-190-alt .g-unit, +.g-unit .g-unit .g-tpl-190-alt .g-unit { + display: block; + margin: 0 190px 0 0; + width: auto; + float: none; +} +.g-unit .g-unit .g-tpl-190-alt .g-first, +.g-unit .g-tpl-190-alt .g-first, +.g-tpl-190-alt .g-first { + display: block; + margin: 0; + width: 190px; + float: right; +} + +/* 180px */ +.g-tpl-180 .g-unit, +.g-unit .g-tpl-180 .g-unit, +.g-unit .g-unit .g-tpl-180 .g-unit { + display: block; + margin: 0 0 0 180px; + width: auto; + float: none; +} +.g-unit .g-unit .g-tpl-180 .g-first, +.g-unit .g-tpl-180 .g-first, +.g-tpl-180 .g-first { + display: block; + margin: 0; + width: 180px; + float: left; +} +/* 180px alt */ +.g-tpl-180-alt .g-unit, +.g-unit .g-tpl-180-alt .g-unit, +.g-unit .g-unit .g-tpl-180-alt .g-unit { + display: block; + margin: 0 180px 0 0; + width: auto; + float: none; +} +.g-unit .g-unit .g-tpl-180-alt .g-first, +.g-unit .g-tpl-180-alt .g-first, +.g-tpl-180-alt .g-first { + display: block; + margin: 0; + width: 180px; + float: right; +} + + +/* 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; } +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: 6px; width: 100%; bottom: 0px; left: 0px; + background: transparent url("images/resizable-s2.gif") repeat scroll center top; } +.ui-resizable-e { cursor: e-resize; width: 6px; right: 0px; top: 0px; height: 100%; + background: transparent url("images/resizable-e2.gif") repeat scroll right center; } + +@media print { + + body { + overflow:visible; + } + + #header { + height:60px; + } + + #headerLeft { + padding:0; + } + + #header-tabs, + #headerRight, + #side-nav, + #api-info-block { + display:none; + } + + #body-content { + position:inherit; + } + + #doc-content { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } + + #jd-header { + padding:10px 0; + } + + #jd-content { + padding:15px 0 0; + } + + #footer { + float:none; + margin:2em 0 0; + } + + h4.jd-details-title { + border-bottom:1px solid #666; + } + + pre { + /* these allow lines to break (if there's a white space) */ + overflow: visible; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + } + + h1, h2, h3, h4, h5, h6 { + page-break-after: avoid; + } + + table, img { + page-break-inside: avoid; + } +} diff --git a/build/tools/droiddoc/templates-cmsdk/assets/cid_smart.png b/build/tools/droiddoc/templates-cmsdk/assets/cid_smart.png Binary files differnew file mode 100755 index 0000000..67c1f77 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/cid_smart.png diff --git a/build/tools/droiddoc/templates-cmsdk/assets/css/default.css b/build/tools/droiddoc/templates-cmsdk/assets/css/default.css new file mode 100644 index 0000000..f411d93 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/css/default.css @@ -0,0 +1,7440 @@ +/* color definitions */ +/* 16 column layout */ +/* clearfix idiom */ +/* common mixins */ +/* page layout + top-level styles */ +::selection { + background-color: #0099cc; + color: #fff; } +::-webkit-selection { + background-color: #0099cc; + color: #fff; } +::-moz-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: 65px; /* sticky-header height + 20px gutter */ +} + +#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; } + * 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 { + padding: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 span.tree-list-subtitle.package { + padding-top:15px; + cursor:default; + } + #nav li span.tree-list-subtitle.package:before { + content: ''; + } + #nav li span.tree-list-subtitle.package:after { + content: ''; + } + #nav li ul.tree-list-children.classes { + padding-left:10px; + } + #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; } + +#nav.samples-nav li li li { + font-size:13px; +} +#nav.samples-nav li li li a { + padding-top:3px; + padding-bottom:3px; +} +#nav.samples-nav li li ul > li:last-child { + padding-bottom:3px; +} + +.new, +.new-child { + font-size: .78em; + font-weight: bold; + color: #ff3d3d; + vertical-align:top; + white-space:nowrap; +} + +/* content header */ +.content-header { + height: 30px; + margin:36px 0 23px; /* same as h1 */ + padding:0 0 10px;} /* same as h1 */ +.content-header.just-links { + margin-bottom:0; + padding-bottom:0;} + +.content-header h1 { + margin:0; + padding:0; + width: 700px; +} +.content-header > div:first-child { + height:1px; /* set fixed height for the header div to ensure the + next/prev links align with toc on training classes */ +} + +.content-footer { + border-top: 1px solid #ccc; + margin-top: 10px; + padding-top:10px; + width:100%; } + +.content-footer .col-9 { + margin-left:0; +} +.content-footer .col-4 { + margin-right:0; +} +.content-footer.wrap { + width:940px; +} +.content-footer .plus-container { + margin:5px 0 0; + text-align:right; + float:right; +} + +a.back-link { + text-decoration: none; + text-transform: uppercase; +} + +.content-header .paging-links { + margin-top:-25px; +} +.paging-links { + position: relative; + height:30px; } + .paging-links a { + position: absolute; } + .paging-links a, + .training-nav-top a { + color: #555555; + text-decoration: none; + text-transform: uppercase; } + .paging-links .prev-page-link:before, + .training-nav-top .prev-page-link:before, + a.back-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: 0; } + .next-page-link:after, + .start-class-link:after, + .start-course-link:after, + .next-class-link:after, + .go-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; } + .prev-page-link.inline:before { + content: none; } + .next-page-link.inline:after { + content: none; } + + .content-footer .paging-links .next-page-link { + left:0; + } + + .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; + } + + .paging-links a.start-class-link { + width:100%; + } + + /* 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; + } + + + + /* 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; } } + +h1:target, +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; } + +.framed-nexus4-port-216 { + background: transparent url(../images/styles/device_nexus4_blank_port_432.png) no-repeat +scroll top left; + background-size:240px 465px; + padding: 52px 12px 52px 12px; + overflow: hidden; } + .framed-nexus4-port-216, .framed-nexus4-port-216 video, + .framed-nexus4-port-216 img { + width: 216px; + height: 360px; } + +.framed-nexus5-port-span-5 { + background: transparent url(../images/styles/device_nexus5_blank_port_span5.png) no-repeat + scroll top left; + padding: 52px 33px 69px 31px; + overflow: hidden; +} + +.framed-nexus5-port-span-5, +.framed-nexus5-port-span-5 video, +.framed-nexus5-port-span-5 img { + width: 216px; + height: 384px; +} + +.framed-nexus5-land-span-13 { + background: transparent url(../images/styles/device_nexus5_blank_land_span13.png) no-repeat scroll top left; + padding: 36px 119px 54px 108px; + overflow: hidden; +} + +.framed-nexus5-land-span-13, +.framed-nexus5-land-span-13 video, +.framed-nexus5-land-span-13 img { + width: 533px; + height: 300px; +} + +.framed-nexus5-port-span-5, +.framed-nexus5-port-span-5 video, +.framed-nexus5-port-span-5 img { + width: 216px; + height: 384px; +} + +/* wear device frames */ + +.framed-wear-square { + background: transparent url(../images/styles/device_wear_square.png) no-repeat scroll top left; + background-size: 302px 302px; + height:222px; + width:222px; + padding:40px; + overflow:hidden; +} + +.framed-wear-square-small { + background: transparent url(../images/styles/device_wear_square_small.png) no-repeat scroll top left; + background-size: 169px 200px; + height:147px; + width:147px; + padding:27px 11px; + overflow:hidden; +} + +#jd-content +.framed-wear-square img { + height:222px; + width: 222px; + padding:0; + margin:0; +} + +#jd-content +.framed-wear-square-small img { + height:147px; + width: 147px; + padding:0; + margin:0; +} + + + + + + +/* 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: 34px; + margin: 36px 0 27px; + padding:0 0 10px; + font-weight:300; +} +h1, h2 { + line-height: 30px; +} +h1.short { + margin-right:320px; +} +h1.short { + margin-right:320px; +} +h1.super { + font-size: 37px; +} +h2 { + color:#333; + font-size: 26px; + margin: 32px 0 20px; + padding:0; + font-weight:300; +} +h3 { + color:#333; + font-size: 21px; + font-weight:400; + margin:21px 0 14px 0; +} +h3, h4 { + line-height: 21px; +} +h4 { + font-size: 18px; + margin: 12px 0; + font-weight:500; +} +h5 { + font-size: 14px; +} +h5, h6 { + margin: 5px 0; +} +h6 { + font-size: 12px; +} +hr { /* applied to the bottom of h2 elements */ + height: 1px; + margin: 3px 0 12px; + 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, +dd pre, +dd ul, +dd ol, +dd dl { + margin-top:10px; +} +li p, +li pre, +li ul, +li ol, +li dl { + margin-top:5px; + margin-bottom:5px; +} +dl dd dl:first-child { + margin-top:0; +} +pre strong, pre b, a strong, a b, a code { + color: inherit; +} +pre, code { + color: #060; + font: 13px/1.5 monospace; +} +code { + font-weight:bold; + font: 13px/14px monospace; +} + +legend { + display: none; +} +a:link, a:visited, .link-color { + color: #258aaf; + text-decoration: none; +} +a:focus, a:hover, a:active { + color: #33B5E5; + text-decoration: none; +} +a.white { + color: #fff; + text-decoration:underline; +} +a.white:hover, a.white:active { + color: #ccc !important; +} +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 { + 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 { + margin: 0; + padding: 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; +} +.about a.selected { + color: #9933CC; +} +.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-top { + position:relative; + top:73px; +} + +.training-nav-bottom { + padding:0 0 20px; +} + +#tb-wrapper, +#qv-wrapper { + float:right; + clear:right; + margin:6px 0 0 30px; /* negative top-margin to counter the content-header bottom margin */ + padding:0 0 30px; +} + +#tb-wrapper { + margin:51px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */ +} + +#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, +#qv .download-box { + padding:0 0 0 15px; +} + +#tb .download-box .filename, +#qv .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; + line-height: 16px; +} + +.sidebox * { + font-size:inherit; +} + +.sidebox > *:last-child { + margin-bottom:0; +} + +#tb ol, +#tb ul, +#qv ul { + margin:0 15px 10px 35px; +} + +#tb p { + margin:0 15px 10px; +} + +#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; +} + +/* related resources blocks in checklists */ + +/* related resources sections that have dynamic content */ + + + +h3.rel-resources { +margin:1.25em auto; +} + +/* -------------------------------------------------------------------------- +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: #800; } /* Code string */ +.kwd { color: #008; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #828; } +.atv { color: #800; } /* XML string */ +.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, #swapper, +#nav-tree, #tree-list { + overflow:hidden; + margin-left:0; +} + +#devdoc-nav { + overflow:visible !important; /* To keep the "to top" button visible */ +} + +#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; +} + +/* Uncomment this for preview release watermark +#doc-col { + background: url('../images/preview.png') repeat; +} +*/ + +#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-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; +} + +/* -------------------------------------------------------------------------- +Styles for samples browser +*/ + +#codesample-wrapper { + width:100000px; /* super wide to contain floats, but doesn't cause scroll */ + overflow:visible; +} +pre#codesample-block { + float:left; + overflow:visible; + background:transparent; + border:none; +} +pre#codesample-block a.number { + display:none; +} +pre#codesample-block .code-line:hover { + background:#e7e7e7; +} +pre#codesample-line-numbers { + float:left; + width:2em; + background:transparent; + border:none; + border-right:1px solid #ccc; + padding-left:0; + font-family:monospace; + text-align:right; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: -moz-none; + -ms-user-select: none; + user-select: none; +} +pre#codesample-line-numbers a { + color:#999; +} +pre#codesample-line-numbers.hidden { + display:none; +} +pre#codesample-block span.code-line { + width:100%; + display:inline-block; +} + +/* +Styles for displaying image or video resources in samples browser. +Resources are marked as no-display if they exceed the size limit. +*/ +div#codesample-resource img, div#codesample-resource video { + border: 1px solid #ececec; +} + +div#codesample-resource.noDisplay div { + border: 1px solid #ececec; + width:120px; + margin-bottom:4px; + padding:20px; +} + +div#codesample-resource .noDisplay-message:after { + font-style:italic; + font-size:12px; + content: 'This resource is not available for browsing. To view it, please download the project.'; +} + +/* +Styles for project structure (treeview) page +*/ +.structure-dir { +background-image:url(../../assets/images/folder.png); +background-repeat:no-repeat; +background-position:16px 2px; + margin:.25em 0 0 0; + padding:0 0 0 0; +} + +.structure-toggleme { + margin:0 0 0 3em; + padding:0 0 0 0; + text-decoration:none; +} + +.structure-java{ +background-image:url(../../assets/images/file-java.png); +background-repeat:no-repeat; +background-position:0px 2px; + margin:.3em 0 0 0; + padding:.3em 0 .3em 22px; +} + +.structure-file { +background-image:url(../../assets/images/file-generic.png); +background-repeat:no-repeat; +background-position:0px 2px; + margin:.3em 0 0 0; + padding:.3em 0 .3em 22px; +} + +.structure-xml { +background-image:url(../../assets/images/file-xml.png); +background-repeat:no-repeat; +background-position:0px 2px; + margin:.3em 0 0 0; + padding:.3em 0 .25em 22px; +} + +.structure-img { +background-image:url(../../assets/images/file-image.png); +background-repeat:no-repeat; +background-position:0px 2px; + margin:.3em 0 0 0; + padding:.3em 0 .25em 22px; +} + +.structure-manifest { +background-image:url(../../assets/images/file-manifest.png); +background-repeat:no-repeat; + margin:.0 0 0 1.25em; + padding:0 0 0 22px; + text-decoration:none; +} + +#jd-content .structure-toggle-img { + margin:.5em 0 0 0; +padding-right:2.1em; +} + +.dirInfo { + margin-left:2em; +} + +.structure-dir a { + text-decoration:none; +} + +.structure-manifest a { + text-decoration: none; +} +.structure-file a { + text-decoration: none; +} + +.sampleEmbed { + background-color:rgb(249, 249, 249); +} + +.sampleEmbed ol.lineNumbers { + list-style-type: decimal; + padding-left:1em; +} + +.sampleEmbed ol.lineNumbers li { +border-left:1px solid #ddd; +border-right:1px solid #ddd; +color:gray; +background-color:#f7f7f7; +margin:0 0 0 24px; +padding: 2px 2px 2px 6px; +} + +.sampleEmbed ol.lineNumbers li:hover { +background: #efefef; +} + +.samples-nav li a { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* -------------------------------------------------------------------------- +Styles for raw formatted line numbers (not used with listformatted version) +div.sampleLine div.lineNumber { + display: inline; +} +div.sampleLine div.lineCode { + display: inline; + padding-left:6px; +} +div.sampleLine { + padding:0; + margin:0; +}*/ + +/* -------------------------------------------------------------------------- +Butterbar +*/ +#butterbar-wrapper { + position:absolute; + top:0; + left:0; + width:100%; +} +#butterbar { + width:100%; + margin:0 auto; +} +#butterbar-message { + background-color:rgba(255, 187, 51, .4); + font-size:13px; + padding: 5px 0; + text-align:center; +} +a#butterbar-message { + cursor:pointer; + display:block; +} +a#butterbar-message:hover { + text-decoration:underline; +} + +/* -------------------------------------------------------------------------- +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, .nolist ul, .nolist ol { + list-style:none; + margin-left:0; +} +#tb .nolist { + margin-left:15px; +} + +dl.xml>dt { + text-transform:uppercase; +} +dl.xml dl.attr { + margin-top:0; +} + +pre.classic { + background-color:transparent; + border:none; + padding:0; +} + +p.img-caption { + margin: -10px 0 20px; + font-size:13px; + color:#666; +} + +div.figure, +div.figure-right { + 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 */ +} + +div.figure-left { + float:left; + clear:left; + margin:10px 0 0 0; + padding:0 20px 0 0; + /* width must be defined w/ an inline style matching the image width */ +} + +img.frame { + border:1px solid #DDD; + padding:4px; +} + +p.table-caption { + margin: 0 0 4px 0; + font-size:13px; + color:#666; +} + +p.code-caption { + margin-bottom: 4px; + font: 12px/1.5 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; +} + +.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); +} + +/* notice box for cross links between Design/Develop docs */ +a.notice-developers-video, +a.notice-developers, +a.notice-designers-video, +a.notice-designers { + float:right; + clear:right; + width:238px; + min-height:50px; + margin:0 0 20px 20px; + border:1px solid #ddd; +} +a.notice-developers-video.wide, +a.notice-developers.wide, +a.notice-designers-video.wide, +a.notice-designers.wide { + width:278px; +} +a.notice-developers-video div, +a.notice-developers div, +a.notice-designers-video div, +a.notice-designers div { + min-height:40px; + background:url('../images/styles/notice-developers@2x.png') no-repeat 10px 10px; + background-size:40px 40px; + padding:10px 10px 10px 60px; +} +a.notice-designers div { + background:url('../images/styles/notice-designers@2x.png') no-repeat 10px 10px; + background-size:40px 40px; +} +a.notice-designers-video div { + background:url('../images/styles/notice-designers-video@2x.png') no-repeat 10px 10px; + background-size:40px 40px; +} +a.notice-developers-video div { + background:url('../images/styles/notice-developers-video@2x.png') no-repeat 10px 10px; + background-size:40px 40px; +} +a.notice-developers-video:hover, +a.notice-developers:hover, +a.notice-designers-video:hover, +a.notice-designers:hover { + background:#eee; +} +a.notice-developers-video h3, +a.notice-developers h3, +a.notice-designers-video h3, +a.notice-designers h3 { + font-size:13px; + line-height:18px; + font-weight:bold; + text-transform:uppercase; + color:#000 !important; + margin:0 0 1px; +} +a.notice-developers-video p, +a.notice-developers p, +a.notice-designers-video p, +a.notice-designers p { + margin:0; + line-height:14px; +} +a.notice-developers-video.left, +a.notice-developers.left, +a.notice-designers-video.left, +a.notice-designers.left { + margin-left:0; + float:left; +} + + +/* hide nested list items; companion to hideNestedLists() */ +.hide-nested li ol, +.hide-nested li ul { + display:none; +} + +a.header-toggle { + display:block; + float:right; + text-transform:uppercase; + font-size:.8em !important; + font-weight:normal; + margin-top:2px; +} + + +/* for IDE instruction toggle (Studio/Eclipse/Other) */ +select.ide { + background: transparent; + border: 1px solid #bbb; + border-left: 0; + border-right: 0; + margin: 10px 0; + padding: 10px 0; + color:#666; +} +select.ide, +select.ide option { + font-family: inherit; + font-size:16px; + font-weight:500; +} +/* hide all except studio by default */ +.select-ide.eclipse, +.select-ide.other { + display:none; +} +/* ... unless studio also includes one of the others */ +.select-ide.studio.eclipse, +.select-ide.studio.other { + display:none; +} + + +/* ----------------------------------------------- +good/bad example containers +*/ + +div.example-block { + background-repeat: no-repeat; + background-position:10px 8px; + background-color:#ccc; + padding:4px; + margin:.8em auto 1.5em 2em; + width:260px; + float:right; +} +/* red container */ +.example-block.bad { + background-image: url(/images/example-bad.png); + background-color:#f4cccc; +} +/* green container */ +.example-block.good { + background-image: url(/images/example-good.png); + background-color:#d9ead3; +} +/* container heading div */ +#jd-content .example-block .heading { + font-weight:bold; + margin:6px 0 9px 36px; + padding:6px auto; +} +/* container image (if any) */ +#jd-content .example-block img { + margin:0; + padding:0px; +} + +.example-block table { + margin:0; +} + +/* ----------------------------------------------- +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#langMessage, +div#naMessage { + display:none; + width:555px; + height:0; + margin:0 auto; +} + + +div#langMessage>div, +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#langMessage>div, +* html div#naMessage div { position:absolute; } + +div#naMessage strong { + font-size:1.1em; +} + +div#langMessage .lang { + display:none; +} + +/* -------------------------------------------------------------------------- +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 12px; + margin: 20px 0 12px; + font-size:12px; + padding-bottom:12px; + border-bottom:solid 1px #ccc; +} + +#jd-header h1 { + margin:0; + padding:0 0 6px 0; +} + +/* not sure if this is needed in the ref docs, disabling for now +.jd-descr h2 { + margin:16px 0; +} +*/ + +/* page-top-right container for reference pages (holds +links to summary tables) */ +#api-info-block { + font-size:12px; + margin:20px 0 0; + padding:0 10px 6px; + font-weight:normal; + float:right; + text-align:right; + color:#999; + max-width:80%; + font-size: 12px; + line-height:14px; +} + +#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:12px; + line-height:14px; + 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 */ + +.menu-container { + position:relative; +} +#search_autocomplete { + font-weight:normal; +} + +.search_filtered_wrapper.reference { + width: 193px; + float: right; +} +.search_filtered_wrapper.docs { + width:875px; + float: left; + position:absolute; + top:26px; + right:66px; +} +.suggest-card { + position:relative; + width:170px; + min-height:90px; + padding:5px; + border: solid 1px #C5C5C5; + background: white; + top: 15px; + margin-right:-5px; + -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); +} +.suggest-card.reference { + position:absolute; + z-index:999; + min-width:171px; /* +padding and border makes this match input width */ + min-height:93px; /* add 3px because this has 1 not 4px top border */ + width:auto; + top:41px; + margin:0; +} +.suggest-card.develop { + z-index:997; + border-top: solid 4px #F80; + float:right; +} +.suggest-card.design { + z-index:996; + border-top: solid 4px #33b5e5; + float:right; +} +.suggest-card.distribute { + z-index:995; + border-top: solid 4px #9C0; + float:right; +} +.child-card { + width:100%; +} +.suggest-card.dummy { + width:172px; + float:right; + border:0; + background:transparent; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +ul.search_filtered { + min-width:100%; + list-style: none; + margin: 0 0 5px; + padding: 0; +} +.search_filtered .jd-selected { + background:#efefef; + cursor:pointer; +} +.search_filtered .jd-selected, +.search_filtered .jd-selected a { + color:#09C !important; +} + +.no-display { + display: none; +} + +.search_filtered li.jd-autocomplete { + font-size: 0.81em; + border: none; + margin: 0 0 2px; + padding: 0; + line-height:1.5em; +} + +.search_filtered li a { + padding:0 5px; + color:#222 !important; + display:inline-block; + line-height:12px; +} + +.search_filtered li.header { + font-weight:bold; + color:#444; + border: none; + margin: 8px 0 2px; + padding:1px 5px; + line-height:1.5em; +} +.search_filtered li.header.small { + font-size:0.85em; +} + +.suggest-card.reference +.search_filtered li.header { + color:#aaa; + font-size: 0.81em; +} + +.search_filtered li.header:first-child { + margin: 0 0 2px; +} + +.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; +} + + + + + +/************ STICKY NAV BAR ******************/ + +#header-wrapper { + background: #f9f9f9; + margin: 0 -10px 0 -10px; + padding: 31px 10px 0px 10px; + position: relative; +} +#header-wrapper #nav-x div.wrap { + max-width: 940px; + height: 38px; +} +#header-wrapper #nav-x ul.nav-x li { + margin-right: 31px !important; + margin-top: 5px; + margin-bottom: 0px; + height: 30px; +} +#header-wrapper #nav-x > div.wrap ul.nav-x li.active { + color: #669900; + border-bottom: 3px solid #669900; +} +#header-wrapper #nav-x > div.wrap ul.nav-x li.active a { + color: #669900; +} +#header-wrapper #nav-x > div.wrap ul.nav-x a { + font-size: 14.5px; +} +#header-wrapper .developer-console-btn { + float: right; + background: #fefefe; + border-radius: 4px; + padding: 8px 14px; + box-shadow: 1px 1px 0px #7a7a7a; + font-size: 14px; + margin-top: -6px; + cursor: pointer; + color: #464646; + margin-right: 20px; +} +/* not currently used */ +#header-wrapper .shadow { + width: 1034px; + height: 4px; + position: absolute; + left: 50%; + margin-left: -517px; + bottom: -4px; + background-image: url(../images/header-shadow.png); +} + +#context { + clear: both; + padding-top: 14px; +} +#context .breadcrumb { + float: left; + margin-bottom: 10px; +} +#context .util { + float: right; + margin-right: 20px; +} + +.breadcrumb { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} +.breadcrumb li { + float: left; + padding: 0 20px 0 0; + color: #000; + white-space: nowrap; +} +.breadcrumb li a { + color: #000; +} +.breadcrumb li:after { + content: url(../images/breadcrumb.png); + position: relative; + top: 1px; + left: 10px; + width: 5px; + height: 10px; +} +.breadcrumb li.current { + font-weight: 700; +} +.breadcrumb li.current:after { + display: none; +} + +/* Sticky Nav overrides */ +.sticky-menu { + position: fixed; + width: 940px; + height: 0px; + z-index: 51; + top: 12px; +} +#sticky-header { + display: none; + padding: 0 10px; + position: fixed; + background: #f9f9f9; + top: 0px; + left: 0px; + right: 0px; + height: 45px; + box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.1); + border-bottom: 1px solid #a5c43a; + z-index: 50; +} +#sticky-header.design { + border-bottom: 1px solid #33b5e5; +} +#sticky-header.develop { + border-bottom: 1px solid #F80; +} +#sticky-header.distribute { + border-bottom: 1px solid #9C0; +} +#sticky-header.about { + border-bottom: 1px solid #9933CC; +} +#sticky-header > div { + overflow: hidden; + *zoom: 1; + width: 940px; + margin: 0 auto; + clear: both; + padding-top: 9px; +} +#sticky-header > div .logo { + float: left; + width: 26px; + height: 25px; + background: url(../images/dac_logo.png); + background-image: -webkit-image-set(url(../images/dac_logo.png) 1x, url(../images/dac_logo@2x.png) 2x); + z-index: 52; + position: relative; +} +#sticky-header > div .top { + float: left; + width: 38px; + height: 38px; + position: relative; + background: url(../images/styles/gototop.png); + z-index: 52; +} +#sticky-header > div .breadcrumb { + float: left; + padding: 0 0 0 10px; + border-left: 1px solid #d2d2d2; + line-height: 24px; + font-size: 14px; + position: relative; + top: 0px; + z-index: 52; +} + +/* offset the <a name=""> tags to account for sticky nav */ +body.reference a[name] { + visibility: hidden; + display: block; + position: relative; + top: -56px; +} + + +} + + + + + + + +/*********** PREVIOUSLY dac-styles.css ***************/ + + +#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 { + float:left; +} + +#header .logo { + margin-top: -6px; + margin-left: 0px; + margin-bottom:0px; + width: 160px; + padding-right:10px; +} + + +#header-wrap .logo.landing-logo { + width:220px; + margin:0; + padding:0; + margin-bottom:22px; +} +#header-wrap .logo.landing-logo img { + padding:0 0 0 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:0; + margin-top:-30px; + display:none; + overflow:hidden; +} + +#header-wrap.quicknav #quicknav { + +} + +#quicknav ul { + margin:10px 0; + padding:0; +} + +#quicknav ul li.about { + border-top:1px solid #9933CC; +} + +#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:216px; + +} + +/* 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: -moz-opacity; + -moz-transition-duration: .25s; + -moz-transition-timing-function:ease; + + -o-transition-property: -o-opacity; + -o-transition-duration: .25s; + -o-transition-timing-function:ease; + + transition-property: 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; +} + + +#landing h1 { + margin:17px 0 20px 0 !important; +} + +a.download-sdk { + float:right; + margin:-10px 0; + height:30px; + padding-top:4px; + padding-bottom:0px; +} + +#nav-x { + padding-top: 13px; +} + +#nav-x .wrap { + min-height:32px; +} + +#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; + width:100% !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: 316px; + width: 940px; + position: relative; + overflow:hidden; +} +.slideshow-develop .frame { + width: 940px; + height: 316px; +} +.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; + font-size:24px; +} +.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; +} + + + +/************ DEVELOP TOPIC CONTAINERS ************/ + +.landing-banner, +.landing-docs { + margin:20px 0; +} +.landing-banner > div:first-child, +.landing-docs > div:first-child, +.landing-docs > .col-12 { + margin-left:0; + min-height:280px; +} +.landing-banner.short > div { + min-height:50px; +} +.landing-banner > div:last-child, +.landing-docs > div:last-child, +.landing-docs > .col-12 { + margin-right:0; +} + +.landing-banner > div > *:last-child { + margin-bottom:0; +} +.landing-banner h1 { + margin-top:16px; + padding-bottom:24px; +} +.landing-docs, +.landing-banner { + clear:both; + 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; +} + + + +.next-docs { + border-top:1px solid #ccc; + margin:40px 0 0; + padding:5px 0 0; + clear:left; + overflow:hidden; +} +.next-docs div:first-child { + margin-left:0; +} +.next-docs div:last-child { + margin-right:0; +} + +.next-docs h2 { + font-size:14px; + line-height:21px; + color:#555; + text-transform:uppercase; + border-bottom:none; + margin:0 0 1em; + padding:5px 0 0; +} + + + +/************* 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; +} + +/************ DISTRIBUTE PAGES ******************/ + +.article-detail #body-content { + padding-top: 10px; +} + +/* A container for grid sets with uppercase h3 and rule */ +.dynamic-grid h3 { + font-size:14px; + line-height:21px; + color:#555; + text-transform:uppercase; + border-bottom:1px solid #CCC; + padding:8px 0 0 1px; + margin-bottom:14px; + clear:both; +} + +.top-right-float { + float: right; +} + +.clearfloat { + float: none; + clear: both; +} + +.border-img { + border: 1px solid #CCC; +} + +.center-img { + margin: auto; + text-align: center; +} +.center-img img { + margin-bottom: 15px; +} + +.figure img, .border-img { + margin-bottom: 15px; +} + +/************ RESOURCE CARDS ******************/ + +/* Resource cards, 12, 13, 16-col */ + +/* Basic card-styling with shadow */ +.resource-card { + border-radius: 1px; + box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.12); + background: #fefefe; +} + +/* Styling for background image including tinting and section icons in stacks */ +.card-bg { + display: block; + position: absolute; + vertical-align: top; + width: 100%; + left: 0; + top: 0; + background-size: cover; + background-repeat: no-repeat; + background-position: center; + background-image: url(../images/resource-card-default-android.jpg); +} +.card-bg:after { + content: ""; + display: block; + height: 100%; + width: 100%; + opacity: 1; + background: rgba(0, 0, 0, 0.2); + -webkit-transition: opacity 0.5s; + -moz-transition: opacity 0.5s; + -o-transition: opacity 0.5s; + transition: opacity 0.5s; +} +.static .card-bg:after { + display:none; +} +.card-bg .card-section-icon { + position: absolute; + top: 50%; + width: 100%; + margin-top: -35px; + text-align: center; + padding-top: 65px; + z-index: 100; +} +.card-bg .card-section-icon .icon { + position: absolute; + left: 50%; + margin-left: -28px; + top: 0px; + width: 56px; + height: 56px; + background-repeat: no-repeat; + background-position: 50% 50%; + background-image: url(../images/stack-icon.png); +} +.card-bg .card-section-icon .section { + text-transform: uppercase; + color: white; + font-size: 14px; +} + +.card-info { + position: absolute; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + background: #fefefe; + padding: 4px 12px 6px 12px; +} +.card-info .section { + text-transform: uppercase; + color: #898989; + font-size: 12px; + margin-bottom: 1px; +} +.card-info .title { + color: #363636; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding-bottom: 5px; + margin-bottom: -2px; + font-size: 16px; +} +.card-info .description { + overflow: hidden; +} +.card-info .description .text { + color: #464646; + font: 13px/15px Roboto Condensed; + overflow: hidden; + width:100%; +} +.card-info .description .util { + position: absolute; + right: 5px; + bottom: 70px; /*-2px;*/ + opacity: 0; + -webkit-transition: opacity 0.5s; + -moz-transition: opacity 0.5s; + -o-transition: opacity 0.5s; + transition: opacity 0.5s; +} +.card-info.empty-desc .title { + white-space: normal; + overflow: visible; +} +.card-info.empty-desc .description { + display: none; +} +/* Truncate card summaries at bounding box and + * and apply ellipsis at lower right */ +.ellipsis { + overflow: hidden; + float:right; + line-height: 15px; + width:100%; +} +.resource-card-6x6 .card-info .description .teddddddxt { + float:left; + position:relative; + margin-left:0; +} +.ellipsis:before { + content:""; + float: left; + width: 5px; + height:100%; +} +.ellipsis > *:first-child.text { + float: right; + width: 100% !important; + margin-left: -5px; +} +.ellipsis:after { + content: "\02026"; + height:17px; + padding-bottom:4px; + + box-sizing: content-box; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + + float: right; position: relative; + top: -16px; left: 100%; + width: 4em; margin-left: -4em; + padding-right: 5px; + + background: -webkit-gradient(linear, left top, right top, + from(rgba(255, 255, 255, 0)), to(white), color-stop(65%, white)); + background: -moz-linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white); + background: -o-linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white); + background: -ms-linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white); + background: linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white); +} +.ellipsis:after { + font-style: normal; color: #aaa; + font-size:13px; + text-align: right; +} + +/* Flow Layout */ +.resource-flow-layout { + display: inline-block; +} +.resource-flow-layout .resource-card, .resource-flow-layout .resource-card-stack { + float: left; + position: relative; +} +.resource-flow-layout .resource-card-stack > .resource-card { + margin-right: 0px !important; +} +.resource-flow-layout:after { + content: "."; + display: block; + height: 0; + position:relative; + clear: both; + visibility: hidden; +} +.resource-card:hover { + cursor: pointer; +} +.static .resource-card:hover { + cursor: auto; +} +.resource-card:hover .card-bg:after { + opacity: 0; +} +/* disabled to make way for fade/ellipsis truncation, + and the plusone moves up. +.resource-card:hover .card-info .description .text { + padding-right: 70px; +} */ +.resource-card:hover .card-info .description .util { + opacity: 1; +} + +/* Carousel Layout */ +/* Carousel styles for landing page */ +.resource-carousel-layout { + margin: 20px 0 20px 0; + position: relative; + overflow: hidden; +} +.resource-carousel-layout .slideshow-prev, .resource-carousel-layout .slideshow-next { + display: none; +} +.resource-carousel-layout .pagination { + bottom: 0px; +} +.resource-carousel-layout .frame li { + position: relative; +} +.resource-carousel-layout .frame li .card-bg { + height: 300px; +} +.resource-carousel-layout .frame li .card-info { + padding: 7px 15px 0px 15px; + top: 300px; +} +.resource-carousel-layout .frame li .card-info .section { + font-size: 13px; + margin-bottom: 7px; +} +.resource-carousel-layout .frame li .card-info .title { + font-size: 25px; + margin-bottom: 2px; +} +.resource-carousel-layout .frame li .card-info .description { + font-family: 15px/16px Roboto Condensed, sans-serif; +} +.resource-carousel-layout .frame li .card-info .description .text { + height: 40px; +} +.resource-carousel-layout .frame li .card-info .description .util { + bottom:97px; + right:4px; +} + +/* Stack Layout */ +.resource-stack-layout { + display: inline-block; +} +.resource-stack-layout .resource-card-stack { + float: left; + position: relative; +} +.resource-stack-layout .resource-card { + margin-bottom: 20px; + display: block; + position: relative; +} +.resource-stack-layout .section-card-menu > .card-info .section, .resource-stack-layout .section-card > .card-info .title { + /*text-transform: uppercase;*/ + color: #898989; + font-size: 17px; + line-height: 24px; + margin-bottom: 6px; +} +.resource-stack-layout .section-card { + height: 284px; +} +.resource-stack-layout .section-card > .card-bg { + height: 192px; +} +.resource-stack-layout .section-card > .card-info { + padding: 4px 12px 6px 12px; + top: 192px; +} +.resource-stack-layout .section-card > .card-info .section { + display: none; +} +.resource-stack-layout .section-card > .card-info .title { + font-size: 17px; + border-bottom: 1px solid #959595; + padding-bottom: 0px; +} +.resource-stack-layout .section-card > .card-info .description { + font-size: 13px; + line-height: 15px; +} +.resource-stack-layout .section-card > .card-info .description .text { + height: 30px; +} +.resource-stack-layout .related-card { + height: 90px; +} +.resource-stack-layout .related-card > .card-bg { + left: 0; + top: 0; + width: 90px; + height: 100%; + position: absolute; + display: block; +} +.resource-stack-layout .related-card > .card-info { + left: 90px; + padding: 4px 12px 4px 12px; +} +.resource-stack-layout .related-card > .card-info .section { + font-size: 12px; + margin-bottom: 1px; + display: none; +} +.resource-stack-layout .related-card > .card-info .title { + font-size: 16px; + margin-bottom: -2px; + white-space: normal; + overflow: visible; + text-overflow: ellipsis; +} +.resource-stack-layout .related-card > .card-info .title:after { + content: url(../images/link-out.png); + display: block; +} +.resource-stack-layout .related-card > .card-info .description { + display: none; +} +.resource-stack-layout .section-card-menu { + /* Flexible height */ + display: block; + height: auto; + width: auto; +} +.resource-stack-layout .section-card-menu .card-bg { + height: 155px; + /* Flexible height */ + position: relative; + display: inline-block; + vertical-align: top; +} +.resource-stack-layout .section-card-menu .card-info { + padding: 4px 12px 0px 12px; + /* Flexible height */ + position: relative; + left: auto; + top: auto; + right: auto; + bottom: auto; +} +.resource-stack-layout .section-card-menu .card-info ul { + list-style: none; + margin: 0; +} +.resource-stack-layout .section-card-menu .card-info ul li { + list-style: none; + margin: 0; + padding: 15px 0; + border-top-width: 1px; + border-top-style: solid; + border-top-color: #959595; +} +.resource-stack-layout .section-card-menu .card-info ul li a, .resource-stack-layout .section-card-menu .card-info ul li a:focus, .resource-stack-layout .section-card-menu .card-info ul li a:link, .resource-stack-layout .section-card-menu .card-info ul li a:visited, .resource-stack-layout .section-card-menu .card-info ul li a:active, .resource-stack-layout .section-card-menu .card-info ul li a:hover { + color: #363636 !important; +} +.resource-stack-layout .section-card-menu .card-info ul li:first-child { + border-top: none; +} +.resource-stack-layout .section-card-menu .card-info ul li:hover .title:after { + opacity: 1; + -webkit-transition: opacity 0.5s; + -moz-transition: opacity 0.5s; + -o-transition: opacity 0.5s; + transition: opacity 0.5s; +} +.resource-stack-layout .section-card-menu .card-info ul li:hover .description { + max-height: 30px; + opacity: 1; + -webkit-transition: max-height 0.5s, opacity 1s; + -moz-transition: max-height 0.5s, opacity 1s; + -o-transition: max-height 0.5s, opacity 1s; + transition: max-height 0.5s, opacity 1s; +} +.resource-stack-layout .section-card-menu .card-info .title { + font-size: 16px; + margin-bottom: -2px; + position: relative; +} +.resource-stack-layout .section-card-menu .card-info .title:after { + background: url(../images/stack-arrow-right.png); + content: ''; + opacity: 0; + -webkit-transition: opacity 0.25s; + -moz-transition: opacity 0.25s; + -o-transition: opacity 0.25s; + transition: opacity 0.25s; + position: absolute; + right: 0px; + top: 3px; + width: 10px; + height: 15px; +} +.resource-stack-layout .section-card-menu .card-info .title.more { + text-transform: uppercase; + color: #898989; + display: inline-block; +} +.resource-stack-layout .section-card-menu .card-info .title.more:after { + background: url(../images/stack-arrow-right.png); + content: ''; + display: block; + position: absolute; + right: -20px; + top: 3px; + width: 10px; + height: 15px; +} +.resource-stack-layout .section-card-menu .card-info .description { + max-height: 0px; + opacity: 0; + overflow: hidden; + font-size: 13px; + line-height: 15px; + /* Hover off */ + -webkit-transition: max-height 0.5s, opacity 0.5s; + -moz-transition: max-height 0.5s, opacity 0.5s; + -o-transition: max-height 0.5s, opacity 0.5s; + transition: max-height 0.5s, opacity 0.5s; +} +.resource-stack-layout .section-card-menu .card-info .description .text { + height: 30px; +} +.resource-stack-layout:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} + +/* Generate the flow layout styles for a 3-column 16-col span */ +.resource-flow-layout.col-16 { + margin: 0 -14px 0 0; + width: 954px; +} +.resource-flow-layout.col-16 .resource-card, .resource-flow-layout.col-16 .resource-card-stack { + margin: 0 14px 20px 0; +} +.resource-flow-layout.col-16 .resource-card-row-stack-last { + margin-bottom: 0px !important; +} +.resource-flow-layout.col-16 .resource-card-col-stack-last { + margin-bottom: 0px !important; +} +.resource-flow-layout.col-16 .resource-card-3x6 { + width: 145px; + height: 284px; +} +.resource-flow-layout.col-16 .resource-card-3x12 { + width: 145px; + height: 588px; +} +.resource-flow-layout.col-16 .resource-card-3x18 { + width: 145px; + height: 892px; +} +.resource-flow-layout.col-16 .resource-card-6x6 { + width: 304px; + height: 284px; +} +.resource-flow-layout.col-16 .resource-card-6x12 { + width: 304px; + height: 588px; +} +.resource-flow-layout.col-16 .resource-card-6x18 { + width: 304px; + height: 892px; +} +.resource-flow-layout.col-16 .resource-card-9x6 { + width: 463px; + height: 284px; +} +.resource-flow-layout.col-16 .resource-card-9x12 { + width: 463px; + height: 588px; +} +.resource-flow-layout.col-16 .resource-card-9x18 { + width: 463px; + height: 892px; +} +.resource-flow-layout.col-16 .resource-card-12x6 { + width: 622px; + height: 284px; +} +.resource-flow-layout.col-16 .resource-card-12x12 { + width: 622px; + height: 588px; +} +.resource-flow-layout.col-16 .resource-card-12x18 { + width: 622px; + height: 892px; +} +.resource-flow-layout.col-16 .resource-card-15x6 { + width: 781px; + height: 284px; +} +.resource-flow-layout.col-16 .resource-card-15x12 { + width: 781px; + height: 588px; +} +.resource-flow-layout.col-16 .resource-card-15x18 { + width: 781px; + height: 892px; +} +.resource-flow-layout.col-16 .resource-card-18x6 { + width: 940px; + height: 284px; +} +.resource-flow-layout.col-16 .resource-card-18x12 { + width: 940px; + height: 420px; +} +.resource-flow-layout.col-16 .resource-card-18x18 { + width: 940px; + height: 892px; +} +.resource-flow-layout.col-16 .resource-card-3x2 { + width: 145px; + height: 95px; +} +.resource-flow-layout.col-16 .resource-card-3x2x3 { + width: 145px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-16 .resource-card-3x3 { + width: 145px; + height: 142px; +} +.resource-flow-layout.col-16 .resource-card-3x3x2 { + width: 145px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-16 .resource-card-6x2 { + width: 304px; + height: 95px; +} +.resource-flow-layout.col-16 .resource-card-6x2x3 { + width: 304px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-16 .resource-card-6x3 { + width: 304px; + height: 142px; +} +.resource-flow-layout.col-16 .resource-card-6x3x2 { + width: 304px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-16 .resource-card-9x2 { + width: 463px; + height: 95px; +} +.resource-flow-layout.col-16 .resource-card-9x2x3 { + width: 463px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-16 .resource-card-9x3 { + width: 463px; + height: 142px; +} +.resource-flow-layout.col-16 .resource-card-9x3x2 { + width: 463px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-16 .resource-card-12x2 { + width: 622px; + height: 95px; +} +.resource-flow-layout.col-16 .resource-card-12x2x3 { + width: 622px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-16 .resource-card-12x3 { + width: 622px; + height: 142px; +} +.resource-flow-layout.col-16 .resource-card-12x3x2 { + width: 622px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-16 .resource-card-15x2 { + width: 781px; + height: 95px; +} +.resource-flow-layout.col-16 .resource-card-15x2x3 { + width: 781px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-16 .resource-card-15x3 { + width: 781px; + height: 142px; +} +.resource-flow-layout.col-16 .resource-card-15x3x2 { + width: 781px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-16 .resource-card-18x2 { + width: 940px; + height: 95px; +} +.resource-flow-layout.col-16 .resource-card-18x2x3 { + width: 940px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-16 .resource-card-18x3 { + width: 940px; + height: 142px; +} +.resource-flow-layout.col-16 .resource-card-18x3x2 { + width: 940px; + height: 138px; + margin-bottom: 8px; +} + +/* Generate the flow layout styles for a 3-column 16-col span */ +.resource-flow-layout.col-12 { + margin: 0 -14px 0 0; + width: 714px; +} + +.resource-flow-layout.col-12 .resource-card, .resource-flow-layout.col-12 .resource-card-stack { + margin: 0 14px 20px 0; +} +.resource-flow-layout.col-12 .resource-card-row-stack-last { + margin-bottom: 0px !important; +} +.resource-flow-layout.col-12 .resource-card-col-stack-last { + margin-bottom: 0px !important; +} +.resource-flow-layout.col-12 .resource-card-3x6 { + width: 105px; + height: 284px; +} +.resource-flow-layout.col-12 .resource-card-3x12 { + width: 105px; + height: 588px; +} +.resource-flow-layout.col-12 .resource-card-3x18 { + width: 105px; + height: 892px; +} +.resource-flow-layout.col-12 .resource-card-6x6 { + width: 224px; + height: 284px; +} +.resource-flow-layout.col-12 .resource-card-6x12 { + width: 224px; + height: 588px; +} +.resource-flow-layout.col-12 .resource-card-6x18 { + width: 224px; + height: 892px; +} +.resource-flow-layout.col-12 .resource-card-9x6 { + width: 343px; + height: 284px; +} +.resource-flow-layout.col-12 .resource-card-9x12 { + width: 343px; + height: 588px; +} +.resource-flow-layout.col-12 .resource-card-9x18 { + width: 343px; + height: 892px; +} +.resource-flow-layout.col-12 .resource-card-12x6 { + width: 462px; + height: 284px; +} +.resource-flow-layout.col-12 .resource-card-12x12 { + width: 462px; + height: 588px; +} +.resource-flow-layout.col-12 .resource-card-12x18 { + width: 462px; + height: 892px; +} +.resource-flow-layout.col-12 .resource-card-15x6 { + width: 581px; + height: 284px; +} +.resource-flow-layout.col-12 .resource-card-15x12 { + width: 581px; + height: 588px; +} +.resource-flow-layout.col-12 .resource-card-15x18 { + width: 581px; + height: 892px; +} +.resource-flow-layout.col-12 .resource-card-18x6 { + width: 700px; + height: 284px; +} +.resource-flow-layout.col-12 .resource-card-18x12 { + width: 700px; + height: 420px; +} +.resource-flow-layout.col-12 .resource-card-18x18 { + width: 700px; + height: 892px; +} +.resource-flow-layout.col-12 .resource-card-3x2 { + width: 105px; + height: 95px; +} +.resource-flow-layout.col-12 .resource-card-3x2x3 { + width: 105px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-12 .resource-card-3x3 { + width: 105px; + height: 142px; +} +.resource-flow-layout.col-12 .resource-card-3x3x2 { + width: 105px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-12 .resource-card-6x2 { + width: 224px; + height: 95px; +} +.resource-flow-layout.col-12 .resource-card-6x2x3 { + width: 224px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-12 .resource-card-6x3 { + width: 224px; + height: 142px; +} +.resource-flow-layout.col-12 .resource-card-6x3x2 { + width: 224px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-12 .resource-card-9x2 { + width: 343px; + height: 95px; +} +.resource-flow-layout.col-12 .resource-card-9x2x3 { + width: 343px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-12 .resource-card-9x3 { + width: 343px; + height: 142px; +} +.resource-flow-layout.col-12 .resource-card-9x3x2 { + width: 343px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-12 .resource-card-12x2 { + width: 462px; + height: 95px; +} +.resource-flow-layout.col-12 .resource-card-12x2x3 { + width: 462px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-12 .resource-card-12x3 { + width: 462px; + height: 142px; +} +.resource-flow-layout.col-12 .resource-card-12x3x2 { + width: 462px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-12 .resource-card-15x2 { + width: 581px; + height: 95px; +} +.resource-flow-layout.col-12 .resource-card-15x2x3 { + width: 581px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-12 .resource-card-15x3 { + width: 581px; + height: 142px; +} +.resource-flow-layout.col-12 .resource-card-15x3x2 { + width: 581px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-12 .resource-card-18x2 { + width: 700px; + height: 95px; +} +.resource-flow-layout.col-12 .resource-card-18x2x3 { + width: 700px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-12 .resource-card-18x3 { + width: 700px; + height: 142px; +} +.resource-flow-layout.col-12 .resource-card-18x3x2 { + width: 700px; + height: 138px; + margin-bottom: 8px; +} + +/* Generate the flow layout styles for a 3-column 13-col span */ + +.resource-flow-layout.col-13 { + margin: 0 -14px 0 0; + width: 774px; +} +.resource-flow-layout.col-13 .resource-card, .resource-flow-layout.col-13 .resource-card-stack { + margin: 0 14px 20px 0; +} +.resource-flow-layout.col-13 .resource-card-row-stack-last { + margin-bottom: 0px !important; +} +.resource-flow-layout.col-13 .resource-card-col-stack-last { + margin-bottom: 0px !important; +} +.resource-flow-layout.col-13 .resource-card-3x6 { + width: 115px; + height: 284px; +} +.resource-flow-layout.col-13 .resource-card-3x12 { + width: 115px; + height: 588px; +} +.resource-flow-layout.col-13 .resource-card-3x18 { + width: 115px; + height: 892px; +} +.resource-flow-layout.col-13 .resource-card-6x6 { + width: 244px; + height: 284px; +} +.resource-flow-layout.col-13 .resource-card-6x12 { + width: 244px; + height: 588px; +} +.resource-flow-layout.col-13 .resource-card-6x18 { + width: 244px; + height: 892px; +} +.resource-flow-layout.col-13 .resource-card-9x6 { + width: 373px; + height: 284px; +} +.resource-flow-layout.col-13 .resource-card-9x12 { + width: 373px; + height: 588px; +} +.resource-flow-layout.col-13 .resource-card-9x18 { + width: 373px; + height: 892px; +} +.resource-flow-layout.col-13 .resource-card-12x6 { + width: 502px; + height: 284px; +} +.resource-flow-layout.col-13 .resource-card-12x12 { + width: 502px; + height: 588px; +} +.resource-flow-layout.col-13 .resource-card-12x18 { + width: 502px; + height: 892px; +} +.resource-flow-layout.col-13 .resource-card-15x6 { + width: 631px; + height: 284px; +} +.resource-flow-layout.col-13 .resource-card-15x12 { + width: 631px; + height: 588px; +} +.resource-flow-layout.col-13 .resource-card-15x18 { + width: 631px; + height: 892px; +} +.resource-flow-layout.col-13 .resource-card-18x6 { + width: 760px; + height: 284px; +} +.resource-flow-layout.col-13 .resource-card-18x12 { + width: 760px; + height: 420px; +} +.resource-flow-layout.col-13 .resource-card-18x18 { + width: 760px; + height: 892px; +} +.resource-flow-layout.col-13 .resource-card-3x2 { + width: 115px; + height: 95px; +} +.resource-flow-layout.col-13 .resource-card-3x2x3 { + width: 115px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-13 .resource-card-3x3 { + width: 115px; + height: 142px; +} +.resource-flow-layout.col-13 .resource-card-3x3x2 { + width: 115px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-13 .resource-card-6x2 { + width: 244px; + height: 95px; +} +.resource-flow-layout.col-13 .resource-card-6x2x3 { + width: 244px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-13 .resource-card-6x3 { + width: 244px; + height: 142px; +} +.resource-flow-layout.col-13 .resource-card-6x3x2 { + width: 244px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-13 .resource-card-9x2 { + width: 373px; + height: 95px; +} +.resource-flow-layout.col-13 .resource-card-9x2x3 { + width: 373px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-13 .resource-card-9x3 { + width: 373px; + height: 142px; +} +.resource-flow-layout.col-13 .resource-card-9x3x2 { + width: 373px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-13 .resource-card-12x2 { + width: 502px; + height: 95px; +} +.resource-flow-layout.col-13 .resource-card-12x2x3 { + width: 502px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-13 .resource-card-12x3 { + width: 502px; + height: 142px; +} +.resource-flow-layout.col-13 .resource-card-12x3x2 { + width: 502px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-13 .resource-card-15x2 { + width: 631px; + height: 95px; +} +.resource-flow-layout.col-13 .resource-card-15x2x3 { + width: 631px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-13 .resource-card-15x3 { + width: 631px; + height: 142px; +} +.resource-flow-layout.col-13 .resource-card-15x3x2 { + width: 631px; + height: 138px; + margin-bottom: 8px; +} +.resource-flow-layout.col-13 .resource-card-18x2 { + width: 760px; + height: 95px; +} +.resource-flow-layout.col-13 .resource-card-18x2x3 { + width: 760px; + height: 90px; + margin-bottom: 7px; +} +.resource-flow-layout.col-13 .resource-card-18x3 { + width: 760px; + height: 142px; +} +.resource-flow-layout.col-13 .resource-card-18x3x2 { + width: 760px; + height: 138px; + margin-bottom: 8px; +} + +/* + The following are styles for cards in the flowlayout above, styled by the number of rows they span +*/ +/* Single row items, might be simpler to just apply a class */ +.resource-card-3x6 > .card-bg, .resource-card-6x6 > .card-bg, .resource-card-9x6 > .card-bg, .resource-card-12x6 > .card-bg, .resource-card-15x6 > .card-bg, .resource-card-18x6 > .card-bg { + height: 192px; +} +.resource-card-3x6 > .card-info, .resource-card-6x6 > .card-info, .resource-card-9x6 > .card-info, .resource-card-12x6 > .card-info, .resource-card-15x6 > .card-info, .resource-card-18x6 > .card-info { + padding: 4px 12px 6px 12px; + top: 192px; +} +.resource-card-3x6 > .card-info .section, .resource-card-6x6 > .card-info .section, .resource-card-9x6 > .card-info .section, .resource-card-12x6 > .card-info .section, .resource-card-15x6 > .card-info .section, .resource-card-18x6 > .card-info .section { + font-size: 12px; + margin-bottom: 1px; +} +.resource-card-3x6 > .card-info .title, .resource-card-6x6 > .card-info .title, .resource-card-9x6 > .card-info .title, .resource-card-12x6 > .card-info .title, .resource-card-15x6 > .card-info .title, .resource-card-18x6 > .card-info .title { + font-size: 16px; + margin-bottom: -2px; +} +.resource-card-3x6 > .card-info .description, .resource-card-6x6 > .card-info .description, .resource-card-9x6 > .card-info .description, .resource-card-12x6 > .card-info .description, .resource-card-15x6 > .card-info .description, .resource-card-18x6 > .card-info .description { + font-size: 13px; + line-height: 15px; +} +.resource-card-3x6 > .card-info .description .text, .resource-card-6x6 > .card-info .description .text, .resource-card-9x6 > .card-info .description .text, .resource-card-12x6 > .card-info .description .text, .resource-card-15x6 > .card-info .description .text, .resource-card-18x6 > .card-info .description .text { + height: 30px; +} + +/* Double row items */ +.resource-card-3x12 > .card-bg, .resource-card-6x12 > .card-bg, .resource-card-9x12 > .card-bg, .resource-card-12x12 > .card-bg, .resource-card-15x12 > .card-bg, .resource-card-18x12 > .card-bg { + height: 320px; +} +.resource-card-3x12 > .card-info, .resource-card-6x12 > .card-info, .resource-card-9x12 > .card-info, .resource-card-12x12 > .card-info, .resource-card-15x12 > .card-info, .resource-card-18x12 > .card-info { + padding: 4px 12px 6px 12px; + top: 320px; +} +.resource-card-3x12 > .card-info .section, .resource-card-6x12 > .card-info .section, .resource-card-9x12 > .card-info .section, .resource-card-12x12 > .card-info .section, .resource-card-15x12 > .card-info .section, .resource-card-18x12 > .card-info .section { + font-size: 12px; + margin-bottom: 1px; +} +.resource-card-3x12 > .card-info .title, .resource-card-6x12 > .card-info .title, .resource-card-9x12 > .card-info .title, .resource-card-12x12 > .card-info .title, .resource-card-15x12 > .card-info .title, .resource-card-18x12 > .card-info .title { + font-size: 16px; + margin-bottom: -2px; + white-space: normal; +} +.resource-card-3x12 > .card-info .description, .resource-card-6x12 > .card-info .description, .resource-card-9x12 > .card-info .description, .resource-card-12x12 > .card-info .description, .resource-card-15x12 > .card-info .description, .resource-card-18x12 > .card-info .description { + font-size: 13px; + line-height: 15px; +} + +/* 1/3 row items */ +.resource-card-3x2 > .card-bg, .resource-card-6x2 > .card-bg, .resource-card-9x2 > .card-bg, .resource-card-12x2 > .card-bg, .resource-card-15x2 > .card-bg, .resource-card-18x2 > .card-bg { + left: 0; + top: 0; + width: 90px; + height: 100%; + position: absolute; + display: block; +} +.resource-card-3x2 > .card-info, .resource-card-6x2 > .card-info, .resource-card-9x2 > .card-info, .resource-card-12x2 > .card-info, .resource-card-15x2 > .card-info, .resource-card-18x2 > .card-info { + left: 90px; + padding: 4px 12px 4px 12px; + height: 80px; + overflow: hidden; +} +.resource-card-3x2 > .card-info .section, .resource-card-6x2 > .card-info .section, .resource-card-6x3 > .card-info .section, .resource-card-9x2 > .card-info .section, .resource-card-12x2 > .card-info .section, .resource-card-15x2 > .card-info .section, .resource-card-18x2 > .card-info .section { + font-size: 12px; + margin-bottom: 1px; + /* display: none; */ +} +.resource-card-3x2 > .card-info .title, .resource-card-6x2 > .card-info .title, .resource-card-9x2 > .card-info .title, .resource-card-12x2 > .card-info .title, .resource-card-15x2 > .card-info .title, .resource-card-18x2 > .card-info .title { + font-size: 16px; + margin-bottom: -2px; + white-space: normal; + overflow: visible; + text-overflow: ellipsis; +} +.resource-card-3x2 > .card-info .title:after, .resource-card-6x2 > .card-info .title:after, .resource-card-9x2 > .card-info .title:after, .resource-card-12x2 > .card-info .title:after, .resource-card-15x2 > .card-info .title:after, .resource-card-18x2 > .card-info .title:after { + /* content: url(../images/link-out.png); */ + display: block; +} +.resource-card-3x2 > .card-info .description, .resource-card-6x2 > .card-info .description, .resource-card-9x2 > .card-info .description, .resource-card-12x2 > .card-info .description, .resource-card-15x2 > .card-info .description, .resource-card-18x2 > .card-info .description { + display: none; +} + + +/* Override to show the description instead of the content section */ +.no-section .resource-card-3x2 > .card-info .section, +.no-section .resource-card-6x2 > .card-info .section { + display: none; +} +.no-section .resource-card-3x2 > .card-info .description, +.no-section .resource-card-6x2 > .card-info .description { + display: block; +} + +/* 1/2 row items */ +.resource-card-3x3 > .card-bg, .resource-card-6x3 > .card-bg, .resource-card-9x3 > .card-bg, .resource-card-12x3 > .card-bg, .resource-card-15x3 > .card-bg, .resource-card-18x3 > .card-bg { + left: 0; + top: 0; + width: 90px; + height: 100%; + position: absolute; + display: block; +} +.resource-card-3x3 > .card-info, .resource-card-6x3 > .card-info, .resource-card-9x3 > .card-info, .resource-card-12x3 > .card-info, .resource-card-15x3 > .card-info, .resource-card-18x3 > .card-info { + left: 90px; + padding: 4px 12px 0px 12px; +} +.resource-card-3x3 > .card-info .section, .resource-card-6x3 > .card-info .section, .resource-card-9x3 > .card-info .section, .resource-card-12x3 > .card-info .section, .resource-card-15x3 > .card-info .section, .resource-card-18x3 > .card-info .section { + font-size: 12px; + margin-bottom: 1px; + display: none; +} +.resource-card-3x3 > .card-info .title, .resource-card-6x3 > .card-info .title, .resource-card-9x3 > .card-info .title, .resource-card-12x3 > .card-info .title, .resource-card-15x3 > .card-info .title, .resource-card-18x3 > .card-info .title { + font-size: 16px; + margin-bottom: -2px; + white-space: normal; + overflow: visible; +} +.resource-card-3x3 > .card-info .description .text, .resource-card-6x3 > .card-info .description .text, .resource-card-9x3 > .card-info .description .text, .resource-card-12x3 > .card-info .description .text, .resource-card-15x3 > .card-info .description .text, .resource-card-18x3 > .card-info .description .text { + font-size: 12px; + line-height: 15px; + padding-right: 0px !important; + height: 80px; +} +.resource-card-3x3 > .card-info .description .util, .resource-card-6x3 > .card-info .description .util, .resource-card-9x3 > .card-info .description .util, .resource-card-12x3 > .card-info .description .util, .resource-card-15x3 > .card-info .description .util, .resource-card-18x3 > .card-info .description .util { + display: none; +} +/* placement of plusone */ +.resource-card-6x12 > .card-info .description .util, .resource-card-9x12 > .card-info .description .util, .resource-card-12x12 > .card-info .description .util, .resource-card-15x12 > .card-info .description .util { + bottom:2px; +} +.resource-card-18x12 > .card-info .description .util { + bottom:2px; +} +/* Overrides for col-16 6x6 cards linking to local content on landing pages. + Suppresses "section" and puts the title above a hairline rule. */ +.landing .card-info .section, .resource-flow-layout.col-16.landing .resource-card-9x6 .card-info .section { + display:none; +} +.landing .card-info .title { + color: #898989; + font-size: 17px; + line-height: 24px; + margin-bottom: 6px; + border-bottom: 1px solid #959595; + padding-bottom: 0px; +} +.landing .card-info .description { + font-size: 13px; + line-height: 15px; +} +.landing .card-info .description .text { +height:30px; +} +.landing .resource-card-6x6 > .card-info .description .util, .landing .resource-card-9x6 > .card-info .description .util { + bottom:2px; +} +/* + Generate a resource stack layout for a 3 column widget spanning 16 grid cols +*/ +.resource-stack-layout.col-16 { + margin: 0 -14px 0 0; + width: 954px; +} +.resource-stack-layout.col-16 .resource-card-stack { + margin: 0 14px 0 0; + width: 304px; +} + +/* Example of card menu tinting */ +.resource-widget[data-section=distribute\/tools] .section-card-menu +.card-bg:after { + background: rgba(126, 55, 148, 0.4) !important; +} +.resource-widget[data-section=distribute\/tools] .section-card-menu +.card-section-icon .icon { + background-color: #7e3794 !important; +} +.resource-widget[data-section=distribute\/tools] .section-card-menu +.card-info ul li { + border-top-color: #7e3794 !important; +} + +/* tinting for stacks */ + +div.jd-descr > .resource-widget[data-section=distribute\/tools] +.section-card-menu .card-info ul li { + border-top-color: #7e3794 !important; +} + + + +/** + * UTILITIES + */ + + +.border-box { + box-sizing: border-box; +} + +.vertical-center-outer { + display: table; + height: 100%; + width: 100%; +} + +.vertical-center-inner { + display: table-cell; + vertical-align: middle; +} + +/** + * TYPE STYLES + */ + +.landing-h1 { + font-weight: 100; + font-size: 60px; + line-height: 78px; + text-align: center; + letter-spacing: -1px; +} + +.landing-pre-h1 { + font-weight: 400; + font-size: 28px; + color: #93B73F; + line-height: 36px; + text-align: center; + letter-spacing: -1px; + text-transform: uppercase; + +} + +.landing-h1.hero { + text-align: left; +} + +.landing-h2 { + font-weight: 300; + font-size: 42px; + line-height: 64px; + text-align: center; +} + +.landing-subhead { + color: #999999; + font-size: 20px; + line-height: 28px; + font-weight:300; + text-align: center; +} +.landing-subhead.hero { + text-align: left; + color: white; +} + +.landing-hero-description { + text-align: left; + margin: 1em 0; +} + +.landing-hero-description p { + font-weight: 300; + margin: 0; + font-size: 18px; + line-height: 24px; +} + +.landing-body .landing-small { + font-size: 14px; + line-height: 19px; +} + +.landing-body.landing-align-center { + text-align: center; +} + +.landing-align-left { + text-align: left; +} + +/** + * LAYOUT + */ + +#body-content, +.fullpage, +#jd-content, +.jd-descr, +.landing-body-content { + height: 100%; +} + +.landing-section { + padding: 80px 10px 80px; + width: 100%; + margin-left: -10px; + text-rendering: optimizeLegibility; +} + +#extending-android-to-wearables { + padding-top: 30px; +} + +.landing-short-section { + padding: 40px 10px 28px; +} + +.landing-gray-background { + background-color: #e9e9e9; +} + +.landing-white-background { + background-color: white; +} + +.landing-red-background { + color: white; + background-color: hsl(8, 70%, 54%); +} + +.landing-subhead-red { + color: hsl(8, 71%, 84%); + text-align: left; +} + +.landing-subhead-red p { + margin-top: 20px; +} + +.landing-hero-container { + height: 100%; +} + + +.preview-hero { + height: calc(100% - 110px); + min-height: 504px; + margin-top: -5px; + padding-top: 0; + padding-bottom: 0; + background-image: url(../../preview/images/hero.jpg); + background-size: cover; + background-position: right center; + color: white; + position: relative; + overflow: hidden; +} + +.wear-hero { + height: calc(100% - 110px); + min-height: 504px; + margin-top: -5px; + padding-top: 0; + padding-bottom: 0; + background-image: url(../../wear/images/hero.jpg); + background-size: cover; + background-position: top center; + color: white; + position: relative; + overflow: hidden; +} + +.tv-hero { + height: calc(100% - 110px); + min-height: 504px; + margin-top: -5px; + padding-top: 0; + padding-bottom: 0; + background-image: url(../../tv/images/hero.jpg); + background-size: cover; + background-position: right center; + color: white; + position: relative; + overflow: hidden; +} + +.auto-hero { + height: calc(100% - 110px); + min-height: 504px; + margin-top: -5px; + padding-top: 0; + padding-bottom: 0; + background-image: url(../../auto/images/hero.jpg); + background-size: cover; + background-position: right center; + color: white; + position: relative; + overflow: hidden; +} + +.landing-hero-scrim { + background: black; + opacity: .2; + position: absolute; + width: 100%; + height: 100%; + margin-left: -10px; +} + +.landing-hero-wrap { + margin: 0 auto; + width: 940px; + clear: both; + height: 100%; + position: relative; +} + +.landing-section-header { + margin-bottom: 40px; +} + +.landing-hero-wrap .landing-section-header { + margin-bottom: 16px; +} + +.landing-body { + font-size: 18px; + line-height: 24px; +} + +.landing-button { + white-space: nowrap; + display: inline-block; + padding: 16px 32px; + font-size: 18px; + font-weight: 500; + line-height: 24px; + cursor: pointer; + color: white; + -webkit-user-select: none; + -moz-user-select: none; + -o-user-select: none; + user-select: none; + -webkit-transition: .2s background-color ease-in-out; + -moz-transition: .2s background-color ease-in-out; + -o-transition: .2s background-color ease-in-out; + transition: .2s background-color ease-in-out; +} + +.landing-primary { + background-color: hsl(8, 70%, 44%); + color: #f8f8f8; +} + +.landing-button.landing-primary:hover { + background-color: hsl(8, 70%, 36%); +} + +.landing-button.landing-primary:active { + background-color: hsl(8, 70%, 30%); +} + +.landing-button.landing-secondary { + background-color: #2faddb; +} + +.landing-button.landing-secondary:hover { + background-color: #09c; +} + +.landing-button.landing-secondary:active { + background-color: #3990ab; +} + +a.landing-button, +a.landing-button:hover, +a.landing-button:visited { + color: white !important; +} + +.landing-video-link { + white-space: nowrap; + display: inline-block; + padding: 16px 32px 16px 82px; + font-size: 18px; + font-weight: 400; + line-height: 24px; + cursor: pointer; + color: hsla(0, 0%, 100%, .8); + -webkit-user-select: none; + -moz-user-select: none; + -o-user-select: none; + user-select: none; + -webkit-transition: .2s color ease-in-out; + -moz-transition: .2s color ease-in-out; + -o-transition: .2s color ease-in-out; + transition: .2s color ease-in-out; +} + +.landing-video-link:before { + height: 64px; + width: 64px; + display: inline-block; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAFuklEQVR42u2dXWgcVRSAV9LWtBBTTZVWUhNqEQtq1QeroDRKFRFsROqTYPuo+JCiIoJKFC0USqlUfCiowRcfrBgVUUElefAPkW5T8aeaGn9aRbFsjP0x2cx8PuRMvFxmdjeb2Z17Z8+B85DsZPbO+eaec3/OPSkABdXsVI2gABSAqgJQAKoKQAGoKgAFoKoAFICqAlAAqgpAAai6DqDRAiwDeoFtwB7gPaAInABKwKToCWAMeB/YDdwJrAWWNLh9+QMAXABsBQ4A3wFTwAxQBmaBAAhjNJDPy3L938BXwAvArUCHAkh+kCXAVcA+YBw4bRg7MngtkgTlDPA98CywHmhTAP8/xCbgVeAvMZZpwDQllN7xB/AysKGlAQAXAvuBkzW85UVgCBgENlfQQbmuWAXELPAnsAvoaikAQBtwh/j3coLhS2LIfqCzzu/plL8fkvvFgZiR4L2lHrfkHQBgpQTFUwmGnwC212v0KjC2y/3jQPwDPA+05xYAcBHwubx1YZzhC02QBBBRbxgBzssdAOBy4JgRZE0ZTPuNr7FHDCbEhqNAd24AAN0yUbID7QSwsZChABut3hANXY8Bq70HIMb/Ocb4w81+66v0hmGrN0QQ1ngLQJYRvpWHMWWo4KDIaMnuCcVKgdlZAGL8t2J8vpPGrwChDLyWBMFlAA8D0z4ZvwKEs8D93gCQEc9Jy/jFgkdizaRDGUSs8wXAu1bQLQE9ngHosWbPAXDQeQAypT9rBd3+gociyxi2K9riLABZUj5iuZ6RgsciM2OzFxw2A7JrAO6VwGtKTwpG+Anoy9AVmb3gDHCPcwCAFcChRox6jPu9CazMeFQUAKNRL3AJwE2yopjq228BQPZ/d2bcCyaBTa4BeNGa8Q6naIA4GQWubiKEYWvBbp8zAGQt5VfL/fQ3GEAkTzXDLVkjokA2k5a7AuA2GaLNj/tTfvhq0pQgbcwLQtlQusYVALtlzSR191MjADNI9zbJDZWBR10BMGr5/4GMADQ0SAMDlht62xUAxy0AmzMEEMnhtIO0ZF2YAH5wITd0hQw/5wE04M1bjDyXZpC2hqMlYGnWAHqBf40APOEYgChI35VSWyasWfGqrAH0WVkOIw4CSC1IG2tDoSy7XJE1gPs8ArDoIG0BmJGk30wBDHgGYFFBOgbAtqwB7GxxAHerC8rOBU0Dt2gQzjYIb8gawDor+6HVhqFdrkzEwhabiAVOTMSkUb+06FLEUVfWgj5q0cW4g64AeNo66ZLlcnTDNmesBN4y8KArAG6QU42ttCEzBVzpCoAO4EfLDeV5SzIEvgHaXdqUP2BlQud1Ux55zj2uZUX02cPRnKalRLmu17qYmPWF5YbymJgVAh8Ay5wCII3ZEZOYm6fURGT2u9X43Mnk3CDHybmfmRVYXExPv9nKEcpLejqSC3SjdY2TBzTesHqB7wc0onTEV2KucxLApXKkJy9HlAI5anuJFwCkYQ/EuCJfD+mdBnYkXOssgHY53un7MdVZ4CVgqVcADAhjMafkfTioHc14P04yvvMApIEXy5F/+7S8y6UKolPyR4BVVf7Wi2IdawwIPhTrmAW+rmZ8bwBIQ7vloXwoVzNWS6UUrwAYy9YfOlqwKZDkgneA5Qu4l3cly84F9sqGhislywLmaozuYoGFXr0DII1ukxP1hxJ6QzR7HqLxRfumZaRzXZ3f4XXZyi7gCeB3kqsnzs+kSb9s5XHgMeD8RTxDLgq3rmeuYuFvNYCoR8wqujNi+L3UWBcu9wAMt3QZ8LiMlk5RuU50teq6kcEDgTolveIRYHUQBOek1O5cFu/ukLz7/ZJgNSm+OirebWpgaPS7slxfAr4EngGuX8jopqUBxGzyrAVuB54EXgc+lV4yLhO8cfn5E+ZqUD8kBu9sQvv0Hzj4rmoEBaAAVBWAAlBVAApAVQEoAFUFoABUFYACUFUACkC1CfofXVRJocowZVYAAAAASUVORK5CYII=); + background-size: contain; + position: absolute; + content: ""; + opacity: .7; + margin-top: -19px; + margin-left: -64px; + -webkit-transition: .2s opacity ease-in-out; + -moz-transition: .2s opacity ease-in-out; + -o-transition: .2s opacity ease-in-out; + transition: .2s opacity ease-in-out; +} + +.landing-video-link:hover { + color: hsla(0, 0%, 100%, 1); +} + +.landing-video-link:hover:before { + opacity: 1; +} + +.landing-social-image { + float: left; + margin-right: 14px; + height: 64px; + width: 64px; +} + +.landing-social-copy { + padding-left: 78px; +} + +.landing-scroll-down-affordance { + position: absolute; + bottom: 0; + width: 100%; + text-align: center; + z-index: 10; +} + +.landing-down-arrow { + padding: 24px; + display: inline-block; + opacity: .5; + -webkit-transition: .2s opacity ease-in-out; + -moz-transition: .2s opacity ease-in-out; + -o-transition: .2s opacity ease-in-out; + transition: .2s opacity ease-in-out; + + -webkit-animation-name: pulse-opacity; + -webkit-animation-duration: 4s; +} + +.landing-down-arrow:hover { + opacity: 1; +} + +.landing-down-arrow img { + height: 28px; + width: 28px; + margin: 0 auto; + display: block; +} + +.landing-divider { + display: inline-block; + height: 2px; + background-color: white; + position: relative; + margin: 10px 0; +} + +/* 3 CLOLUMN LAYOUT */ + +.landing-breakout { + margin-top: 40px; + margin-bottom: 40px; +} + +.landing-breakout img { + margin-bottom: 20px; +} + +.landing-partners img { + margin-bottom: 20px; +} + +.landing-breakout p { + padding: 0 23px; +} + +.landing-breakout.landing-partners img { + margin-bottom: 20px; +} + +.col-3-wide { + display: inline; + float: left; + margin-left: 10px; + margin-right: 10px; +} + +.col-3-wide { + width: 302px; +} + +/** + * ANIMATION + */ + +@-webkit-keyframes pulse-opacity { + 0% { + opacity: .5; + } + 20% { + opacity: .5; + } + 40% { + opacity: 1; + } + 60% { + opacity: .5; + } + 80% { + opacity: 1; + } + 100% { + opacity: .5; + } +} + + + +/** + * VIDEO + */ + +#video-container { + display:none; + position:fixed; + top:0; + left:0; + width:100%; + height:100%; + background-color:rgba(0,0,0,0.8); + z-index:9999; +} + +#video-frame { + width:940px; + height:100%; + margin:72px auto; + display:none; + position:relative; +} + +.video-close { + cursor: pointer; + position: absolute; + right: -49px; + top: -49px; + pointer-events: all; +} + +#icon-video-close { + background-image: url("../images/close-white.png"); + background-image: -webkit-image-set(url(../images/close-white.png) 1x, url(../images/close-white_2x.png) 2x); + background-repeat: no-repeat; + background-position: 0 0; + background-size: 36px 36px; + height: 36px; + width: 36px; + display:block; +} + +#icon-video-close:hover { + background-image: url("../images/close-grey.png"); + background-image: -webkit-image-set(url(../images/close-grey.png) 1x, url(../images/close-grey_2x.png) 2x); +} + +/* Preload the hover images */ +a.video-shadowbox-button.white:after { + display:none; + content:url("../images/close-grey.png") url("../images/close-grey_2x.png"); +} + +a.video-shadowbox-button.white { + background-image: url("../images/play-circle-white.png"); + background-image: -webkit-image-set(url(../images/play-circle-white.png) 1x, url(../images/play-circle-white_2x.png) 2x); + background-size: 36px 36px; + background-repeat: no-repeat; + background-position: right; + padding: 16px 42px 16px 8px; + font-size: 18px; + font-weight: 500; + line-height: 24px; + color: #fff; + text-decoration:none; +} + +a.video-shadowbox-button.white:hover { + color:#bababa !important; + background-image: url("../images/play-circle-grey.png"); + background-image: -webkit-image-set(url(../images/play-circle-grey.png) 1x, url(../images/play-circle-grey_2x.png) 2x); +} + +/* Preload the hover images */ +a.video-shadowbox-button.white:after { + display:none; + content:url("../images/play-circle-grey.png") url("../images/play-circle-grey_2x.png"); +} + +/****************** +Styles for d.a.c/index: +*******************/ + + + +/* Generic full screen carousel styling to be used across pages. */ +.fullscreen-carousel { + margin: 0 -10px; + width: 100%; + overflow: hidden; + position: relative; +} + +.fullscreen-carousel-content { + width: 100%; + height: 100%; + position: relative; + display: table; /* For vertical centering */ +} + +.fullscreen-carousel .vcenter { + display: table-cell; + vertical-align: middle; + position: relative; +} + +.fullscreen-carousel .vcenter > div { + margin: 10px auto; +} + +/* Styles for the full-bleed hero image type. */ +.fullscreen-carousel .hero, .fullscreen-carousel .hero h1 { + color: #fff; +} + +.fullscreen-carousel .hero h1 { + font-weight: 300; + font-size: 60px; + line-height: 68px; + letter-spacing: -1px; + margin-top: 0; +} + +.fullscreen-carousel .hero p { + font-weight: 300; + font-size: 18px; + line-height: 24px; + -webkit-font-smoothing: antialiased; +} + +.fullscreen-carousel .hero .hero-bg { + background-size: cover; + width: 100%; + height: 100%; + position: absolute; + left: 0px; + top: 0px; +} + + +/* Full screen carousel styling for the resource flow layout type of content */ +.fullscreen-carousel .resource-flow-layout:after { + height: 0; /* Dont know why this is set at 10 in default.css */ +} + +.fullscreen-carousel .resource-flow-layout { + margin-bottom: 20px; +} + + + +/* Generic Tab carousel styling to be used across multiple pages. */ + +.tab-carousel .tab-nav { + list-style: none; + position: relative; + text-align: center; +} + +.tab-carousel .tab-nav li { + display: inline-block; + font-size: 22px; + font-weight: 400; + line-height: 50px; + list-style: none; + margin: 0; + padding: 0 25px; + position: relative; +} + +.tab-carousel .tab-nav li a, +.tab-carousel .tab-nav li a:hover { + color: #333 !important; + padding: 10px 10px 13px 10px; + position: relative; + z-index: 1000; +} + +.tab-carousel .tab-nav li:after { + background: #ddd; + bottom: 0; + content: ''; + height: 4px; + left: 0; + position: absolute; + width: 100%; + z-index: 0; +} + +.tab-carousel .tab-nav .highlight { + position: absolute; + height: 4px; + width: 100px; + bottom: 0; + background: #33b5e5; +} + +.tab-carousel .tab-carousel-content { + position: relative; + overflow: hidden; + white-space: nowrap; +} + +.tab-carousel .tab-carousel-content [data-tab] { + display: inline-block; + white-space: normal; +} + + + +/* + Resource styling for the tab carousel. The tab carousel contains either + a 3 column layout of resources or a single full-width resource. The + latter has the 18x12 class applied to it and can be styled differently + that way. +*/ + +.tab-carousel .resource .image { + width: 100%; + height: 250px; + background-repeat: no-repeat; + background-size: contain; + background-position: 50% 50%; +} + +.tab-carousel .resource .info .title { + font-size: 18px; + line-height: 24px; +} + +.tab-carousel .resource .info .summary, +.tab-carousel .resource .info .cta { + line-height: 24px; + font-size: 16px; +} + +.tab-carousel .resource-card-18x12 { + position: relative; + padding-left: 450px; + box-sizing: border-box; + display: table-cell; + vertical-align: middle; +} + +.tab-carousel .resource-card-18x12 .image { + position: absolute; + width: 420px; + height: 100%; + left: 0; + top: 0; +} + +.tab-carousel .resource-card-18x12 .info { + display: inline-block; +} + +.tab-carousel .resource-card-18x12 .info .title { + margin-bottom: 26px; +} + + + + + +/* + Styles for the entity link used in the actions bar and in the cta of + the resources that appear in the tab carousel. +*/ +.actions-bar a:after, +.resource .cta:after { + content: '›'; + font-weight: 400; + font-size: 22px; + left: 5px; + line-height: 1; + position: relative; + top: 1px; + transition: left 190ms ease-out; +} + +.actions-bar a:hover:after, +.resource .cta:hover:after { + left: 10px; +} + + + + +/* + Styles for the actions bar. +*/ +.actions-bar { + background: #9acd00; + margin: 0 -10px; + text-align: center; +} + +.actions-bar .actions { + padding: 30px 0 30px; + text-align: justify; + font-size: 0.1px; + line-height: 0.1px; + margin: 0 10px 0 0; +} + +.actions-bar .actions:after { + content: ''; + width: 100%; + display: inline-block; +} + +.actions-bar .actions > div { + display: inline-block; +} + +.actions-bar a { + font-size: 21px; + line-height: 27px; + color: #fff; + font-weight: 300; + -webkit-font-smoothing: antialiased; +} + +.actions-bar a:after { + top: 0px; + font-size: 22px; +} + +.actions-bar a:hover { + color: #fff !important; +} + + + + + +/* + Specific styles for new home page layout of the carousels. +*/ + +/* Big blue button */ +a.home-new-cta-btn, +.home-new-carousel-1 .resource-card-18x6 .cta { + white-space: nowrap; + display: inline-block; + padding: 14px 32px; + font-size: 18px; + font-weight: 500; + line-height: 24px; + cursor: pointer; + background: #33b5e6; + border-radius: 4px; + margin-top: 20px; + color: #fff; + transition: 0.2s background-color ease-in-out; +} + +.home-new-carousel-1 .resource-card-18x6 .cta:after { + display: none; /* Hide the entity for this button */ +} + +a.home-new-cta-btn:hover, +.home-new-carousel-1 .resource-card-18x6 .cta:hover { + color: #fff !important; + background: #2d9fca; +} + +.home-new-carousel-1 .resource-card-18x6 .cta { + position: absolute; + bottom: 20px; + left: 16px; +} + +/* Fullscreen carousel. */ +.home-new-carousel-1 { + max-height: 700px; /* Set max height so doesn't get too long */ +} + +.home-new-carousel-1 .fullscreen-carousel-content { + min-height: 450px; /* Set min height for all content */ +} + +.home-new-carousel-1 .hero { + background: #000; +} + +.home-new-carousel-1 .hero-bg { + background-image: url(/home-new/images/hero.jpg); + background-position: right center; + opacity: 0.85; +} + +/* + Styling for special top card of full screen layout resource layout. + We need to specifically style the 18x6 card to adjust its size and layout, + since it's not a standard card, not sure if this is unique to the home page + layout or should be namespaced within the fullscreen-carousel container. +*/ +.home-new-carousel-1 .resource-flow-layout.col-16 .resource-card-18x6 { + height: 320px; + background-color:#F9F9F9; + border-radius: 0px; + box-shadow: 0px 0px 0px rgba(0, 0, 0, 0); + +} + +.home-new-carousel-1 .resource-card-18x6 .card-bg { + width: 636px; + height: 100%; +} + +.home-new-carousel-1 .resource-card-18x6 .card-info { + right: 0px; + left: 636px; + height: 100%; + top: 0px; + padding: 15px 22px; +} + +.home-new-carousel-1 .resource-card-18x6 .card-info .util { + display: none; +} + +.home-new-carousel-1 .resource-card-18x6 .card-info .title { + font-size: 20px; + font-weight: 500; + margin-top: 15px; + margin-bottom: 15px; +} + +.home-new-carousel-1 .resource-card-18x6 .card-info .text { + font-size: 15px; + line-height: 21px; +} + + +/* Tabbed carousel. */ +.home-new-carousel-2 { + margin: 35px auto 100px auto; +} + +.home-new-carousel-2 h1 { + font-size: 47px; + font-weight: 100; + line-height: 54px; + text-align: center; +} + +.annotation-message { + display: block; + font-style: italic; + color: #F80; +} + + + +/* Helpouts widget */ +.resource-card-6x2.helpouts-card { + width: 255px; + height: 40px; + position:absolute; + z-index:999; + top:-8px; + right:1px; +} + +.resource-card-6x2.helpouts-card > .card-info { + left:35px; + height:35px; + padding:4px 8px 4px 0; +} + +.resource-card-6x2.helpouts-card > .card-info .helpouts-description { + display:block; + overflow:visible; + font-size:12px; + line-height:12px; + text-align:right; + color:#666; +} + +.helpouts-description .link-color { + text-transform: uppercase; +} + +.resource-card-6x2 > .card-bg.helpouts-card-bg { + width:35px; + height:35px; + margin:2px 0 0 0; + background-image: url(../images/styles/helpouts-logo-35_2x.png); + background-image: -webkit-image-set(url(../images/styles/helpouts-logo-35.png) 1x, url(../images/styles/helpouts-logo-35_2x.png) 2x); +} + +.resource-card-6x2 > .card-bg.helpouts-card-bg:after { + display:none; +} diff --git a/build/tools/droiddoc/templates-cmsdk/assets/css/fullscreen.css b/build/tools/droiddoc/templates-cmsdk/assets/css/fullscreen.css new file mode 100644 index 0000000..7912e34 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/css/fullscreen.css @@ -0,0 +1,208 @@ + +/* ============================================================================= + 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%; +} + +#header-wrapper #nav-x div.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 */ +} + +#sticky-header { + padding: 0 20px; +} + +#sticky-header > div { + width: 100%; +} + +.sticky-menu { + width:100%; + left:-20px; +} + +.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/build/tools/droiddoc/templates-cmsdk/assets/customizations.css b/build/tools/droiddoc/templates-cmsdk/assets/customizations.css new file mode 100755 index 0000000..61cb3cc --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/customizations.css @@ -0,0 +1,14 @@ +#masthead-title { + color: #373332; + text-decoration: none; + font-weight: bold; + margin-left: 5px; +} + +#headerLeft a { + text-decoration: none; +} + +#header { + border-bottom: 4px solid rgb(1, 125, 187); +} diff --git a/build/tools/droiddoc/templates-cmsdk/assets/design/design.js b/build/tools/droiddoc/templates-cmsdk/assets/design/design.js new file mode 100644 index 0000000..3ba8486 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/design/design.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/build/tools/droiddoc/templates-cmsdk/assets/docs.js b/build/tools/droiddoc/templates-cmsdk/assets/docs.js new file mode 100644 index 0000000..3ab4caf --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/docs.js @@ -0,0 +1,4339 @@ +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 mPagePath; // initialized in ready() function + +var basePath = getBaseUri(location.pathname); +var SITE_ROOT = toRoot + basePath.substring(1,basePath.indexOf("/",1)); +var GOOGLE_DATA; // combined data for google service apis, used for search suggest + +// Ensure that all ajax getScript() requests allow caching +$.ajaxSetup({ + cache: true +}); + +/****** ON LOAD SET UP STUFF *********/ + +$(document).ready(function() { + + // show lang dialog if the URL includes /intl/ + //if (location.pathname.substring(0,6) == "/intl/") { + // var lang = location.pathname.split('/')[2]; + // if (lang != getLangPref()) { + // $("#langMessage a.yes").attr("onclick","changeLangPref('" + lang + // + "', true); $('#langMessage').hide(); return false;"); + // $("#langMessage .lang." + lang).show(); + // $("#langMessage").show(); + // } + //} + + // load json file for JD doc search suggestions + $.getScript(toRoot + 'jd_lists_unified.js'); + // load json file for Android API search suggestions + $.getScript(toRoot + 'reference/lists.js'); + + // setup keyboard listener for search shortcut + $('body').keyup(function(event) { + if (event.which == 191) { + $('#search_autocomplete').focus(); + } + }); + + // 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 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); + hideResults(); + }); + + // 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'; + } + } + + // Need a copy of the pagePath before it gets changed in the next block; + // it's needed to perform proper tab highlighting in offline docs (see rootDir below) + var pagePathOriginal = pagePath; + 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 + } + + // Highlight the header tabs... + // highlight Design tab + if ($("body").hasClass("design")) { + $("#header li.design a").addClass("selected"); + $("#sticky-header").addClass("design"); + + // highlight About tabs + } else if ($("body").hasClass("about")) { + var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1)); + if (rootDir == "about") { + $("#nav-x li.about a").addClass("selected"); + } else if (rootDir == "wear") { + $("#nav-x li.wear a").addClass("selected"); + } else if (rootDir == "tv") { + $("#nav-x li.tv a").addClass("selected"); + } else if (rootDir == "auto") { + $("#nav-x li.auto a").addClass("selected"); + } + // highlight Develop tab + } else if ($("body").hasClass("develop") || $("body").hasClass("google")) { + $("#header li.develop a").addClass("selected"); + $("#sticky-header").addClass("develop"); + // In Develop docs, also highlight appropriate sub-tab + var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1)); + if (rootDir == "training") { + $("#nav-x li.training a").addClass("selected"); + } else if (rootDir == "guide") { + $("#nav-x li.guide a").addClass("selected"); + } else if (rootDir == "reference") { + // If the root is reference, but page is also part of Google Services, select Google + if ($("body").hasClass("google")) { + $("#nav-x li.google a").addClass("selected"); + } else { + $("#nav-x li.reference a").addClass("selected"); + } + } else if ((rootDir == "tools") || (rootDir == "sdk")) { + $("#nav-x li.tools a").addClass("selected"); + } else if ($("body").hasClass("google")) { + $("#nav-x li.google a").addClass("selected"); + } else if ($("body").hasClass("samples")) { + $("#nav-x li.samples a").addClass("selected"); + } + + // highlight Distribute tab + } else if ($("body").hasClass("distribute")) { + $("#header li.distribute a").addClass("selected"); + $("#sticky-header").addClass("distribute"); + + var baseFrag = pagePathOriginal.indexOf('/', 1) + 1; + var secondFrag = pagePathOriginal.substring(baseFrag, pagePathOriginal.indexOf('/', baseFrag)); + if (secondFrag == "users") { + $("#nav-x li.users a").addClass("selected"); + } else if (secondFrag == "engage") { + $("#nav-x li.engage a").addClass("selected"); + } else if (secondFrag == "monetize") { + $("#nav-x li.monetize a").addClass("selected"); + } else if (secondFrag == "analyze") { + $("#nav-x li.analyze a").addClass("selected"); + } else if (secondFrag == "tools") { + $("#nav-x li.disttools a").addClass("selected"); + } else if (secondFrag == "stories") { + $("#nav-x li.stories a").addClass("selected"); + } else if (secondFrag == "essentials") { + $("#nav-x li.essentials a").addClass("selected"); + } else if (secondFrag == "googleplay") { + $("#nav-x li.googleplay a").addClass("selected"); + } + } else if ($("body").hasClass("about")) { + $("#sticky-header").addClass("about"); + } + + // set global variable so we can highlight the sidenav a bit later (such as for google reference) + // and highlight the sidenav + mPagePath = pagePath; + highlightSidenav(); + buildBreadcrumbs(); + + // set up prev/next links if they exist + var $selNavLink = $('#nav').find('a[href="' + pagePath + '"]'); + var $selListItem; + if ($selNavLink.length) { + $selListItem = $selNavLink.closest('li'); + + // 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') || crossBoundaries) { + // 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 isCrossingBoundary = false; + + if ($selListItem.hasClass('nav-section') && $selListItem.children('div.empty').length == 0) { + // 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 == 0) { + 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').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 ($nextLink.length == 0) { + // if that doesn't work, we're at the end of the list, so disable NEXT link + $('.next-page-link').attr('href','').addClass("disabled") + .click(function() { return false; }); + // and completely hide the one in the footer + $('.content-footer .next-page-link').hide(); + } + } + } + } + + 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; }); + // and completely hide the one in the footer + $('.content-footer .next-page-link').hide(); + if ($nextLink.length) { + $('.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"); + // for the footer link, also add the next page title + $('.content-footer .next-page-link').append(": " + $nextLink.html()); + } + + 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"); + } + } + + } + + + + // 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'); + + // create an array for all the class descriptions + var $classDescriptions = new Array($classLinks.length); + var lang = getLangPref(); + $classLinks.each(function(index) { + var langDescr = $(this).attr(lang + "-description"); + if (typeof langDescr !== 'undefined' && langDescr !== false) { + // if there's a class description in the selected language, use that + $classDescriptions[index] = langDescr; + } else { + // otherwise, use the default english description + $classDescriptions[index] = $(this).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">' + $classDescriptions[index] + '</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" ' + + ' width="64" height="64" 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" ' + + ' width="64" height="64" 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 + initExpandableNavItems("#nav"); + + + $(".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 (sticky) { + if ((stylesheet.attr("disabled") == "disabled") || stylesheet.length == 0) { + updateSideNavPosition(); + } else { + updateSidenavFullscreenWidth(); + } + } + resizeNav(); + }); + + + var navBarLeftPos; + if ($('#devdoc-nav').length) { + setNavBarLeftPos(); + } + + + // 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); + } + } + + // Resize once loading is finished + resizeNav(); + // Check if there's an anchor that we need to scroll into view. + // A delay is needed, because some browsers do not immediately scroll down to the anchor + window.setTimeout(offsetScrollForSticky, 100); + + /* 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_"; + } + + + /* setup shadowbox for any videos that want it */ + var $videoLinks = $("a.video-shadowbox-button, a.notice-developers-video"); + if ($videoLinks.length) { + // if there's at least one, add the shadowbox HTML to the body + $('body').prepend( +'<div id="video-container">'+ + '<div id="video-frame">'+ + '<div class="video-close">'+ + '<span id="icon-video-close" onclick="closeVideo()"> </span>'+ + '</div>'+ + '<div id="youTubePlayer"></div>'+ + '</div>'+ +'</div>'); + + // loads the IFrame Player API code asynchronously. + $.getScript("https://www.youtube.com/iframe_api"); + + $videoLinks.each(function() { + var videoId = $(this).attr('href').split('?v=')[1]; + $(this).click(function(event) { + event.preventDefault(); + startYouTubePlayer(videoId); + }); + }); + } +}); +// END of the onload event + + +var youTubePlayer; +function onYouTubeIframeAPIReady() { +} + +/* Returns the height the shadowbox video should be. It's based on the current + height of the "video-frame" element, which is 100% height for the window. + Then minus the margin so the video isn't actually the full window height. */ +function getVideoHeight() { + var frameHeight = $("#video-frame").height(); + var marginTop = $("#video-frame").css('margin-top').split('px')[0]; + return frameHeight - (marginTop * 2); +} + +var mPlayerPaused = false; + +function startYouTubePlayer(videoId) { + $("#video-container").show(); + $("#video-frame").show(); + mPlayerPaused = false; + + // compute the size of the player so it's centered in window + var maxWidth = 940; // the width of the web site content + var videoAspect = .5625; // based on 1280x720 resolution + var maxHeight = maxWidth * videoAspect; + var videoHeight = getVideoHeight(); + var videoWidth = videoHeight / videoAspect; + if (videoWidth > maxWidth) { + videoWidth = maxWidth; + videoHeight = maxHeight; + } + $("#video-frame").css('width', videoWidth); + + // check if we've already created this player + if (youTubePlayer == null) { + // check if there's a start time specified + var idAndHash = videoId.split("#"); + var startTime = 0; + if (idAndHash.length > 1) { + startTime = idAndHash[1].split("t=")[1] != undefined ? idAndHash[1].split("t=")[1] : 0; + } + // enable localized player + var lang = getLangPref(); + var captionsOn = lang == 'en' ? 0 : 1; + + youTubePlayer = new YT.Player('youTubePlayer', { + height: videoHeight, + width: videoWidth, + videoId: idAndHash[0], + playerVars: {start: startTime, hl: lang, cc_load_policy: captionsOn}, + events: { + 'onReady': onPlayerReady, + 'onStateChange': onPlayerStateChange + } + }); + } else { + // reset the size in case the user adjusted the window since last play + youTubePlayer.setSize(videoWidth, videoHeight); + // if a video different from the one already playing was requested, cue it up + if (videoId != youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0]) { + youTubePlayer.cueVideoById(videoId); + } + youTubePlayer.playVideo(); + } +} + +function onPlayerReady(event) { + event.target.playVideo(); + mPlayerPaused = false; +} + +function closeVideo() { + try { + youTubePlayer.pauseVideo(); + } catch(e) { + } + $("#video-container").fadeOut(200); +} + +/* Track youtube playback for analytics */ +function onPlayerStateChange(event) { + // Video starts, send the video ID + if (event.data == YT.PlayerState.PLAYING) { + if (mPlayerPaused) { + ga('send', 'event', 'Videos', 'Resume', + youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0]); + } else { + // track the start playing event so we know from which page the video was selected + ga('send', 'event', 'Videos', 'Start: ' + + youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0], + 'on: ' + document.location.href); + } + mPlayerPaused = false; + } + // Video paused, send video ID and video elapsed time + if (event.data == YT.PlayerState.PAUSED) { + ga('send', 'event', 'Videos', 'Paused', + youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0], + youTubePlayer.getCurrentTime()); + mPlayerPaused = true; + } + // Video finished, send video ID and video elapsed time + if (event.data == YT.PlayerState.ENDED) { + ga('send', 'event', 'Videos', 'Finished', + youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0], + youTubePlayer.getCurrentTime()); + mPlayerPaused = true; + } +} + + + +function initExpandableNavItems(rootTag) { + $(rootTag + ' li.nav-section .nav-section-header').click(function() { + var section = $(this).closest('li.nav-section'); + if (section.hasClass('expanded')) { + /* hide me and descendants */ + section.find('ul').slideUp(250, function() { + // remove 'expanded' class from my section and any children + section.closest('li').removeClass('expanded'); + $('li.nav-section', section).removeClass('expanded'); + resizeNav(); + }); + } else { + /* show me */ + // first hide all other siblings + var $others = $('li.nav-section.expanded', $(this).closest('ul')).not('.sticky'); + $others.removeClass('expanded').children('ul').slideUp(250); + + // now expand me + section.closest('li').addClass('expanded'); + section.children('ul').slideDown(250, function() { + resizeNav(); + }); + } + }); + + // Stop expand/collapse behavior when clicking on nav section links + // (since we're navigating away from the page) + // This selector captures the first instance of <a>, but not those with "#" as the href. + $('.nav-section-header').find('a:eq(0)').not('a[href="#"]').click(function(evt) { + window.location.href = $(this).attr('href'); + return false; + }); +} + + +/** Create the list of breadcrumb links in the sticky header */ +function buildBreadcrumbs() { + var $breadcrumbUl = $("#sticky-header ul.breadcrumb"); + // Add the secondary horizontal nav item, if provided + var $selectedSecondNav = $("div#nav-x ul.nav-x a.selected").clone().removeClass("selected"); + if ($selectedSecondNav.length) { + $breadcrumbUl.prepend($("<li>").append($selectedSecondNav)) + } + // Add the primary horizontal nav + var $selectedFirstNav = $("div#header-wrap ul.nav-x a.selected").clone().removeClass("selected"); + // If there's no header nav item, use the logo link and title from alt text + if ($selectedFirstNav.length < 1) { + $selectedFirstNav = $("<a>") + .attr('href', $("div#header .logo a").attr('href')) + .text($("div#header .logo img").attr('alt')); + } + $breadcrumbUl.prepend($("<li>").append($selectedFirstNav)); +} + + + +/** Highlight the current page in sidenav, expanding children as appropriate */ +function highlightSidenav() { + // if something is already highlighted, undo it. This is for dynamic navigation (Samples index) + if ($("ul#nav li.selected").length) { + unHighlightSidenav(); + } + // look for URL in sidenav, including the hash + var $selNavLink = $('#nav').find('a[href="' + mPagePath + location.hash + '"]'); + + // If the selNavLink is still empty, look for it without the hash + if ($selNavLink.length == 0) { + $selNavLink = $('#nav').find('a[href="' + mPagePath + '"]'); + } + + var $selListItem; + if ($selNavLink.length) { + // Find this page's <li> in sidenav and set selected + $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(); + }); + } +} + +function unHighlightSidenav() { + $("ul#nav li.selected").removeClass("selected"); + $('ul#nav li.nav-section.expanded').removeClass('expanded').children('ul').hide(); +} + +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); + 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; +} + + +$(document).ready(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-wrapper').outerHeight(); + var headerVisible = scrollTop < stickyTop; + + // 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 - 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); +} + + + +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) { + // If no selected item found, exit + return; + } + // get the selected item's offset from its container nav by measuring the item's offset + // relative to the document then subtract the container nav's offset relative to the document + var selectedOffset = $selected.offset().top - $nav.offset().top; + if (selectedOffset > $nav.height() * .8) { // multiply nav height by .8 so we move up the item + // if it's more than 80% down the nav + // scroll the item up by an amount equal to 80% the container nav's height + api.scrollTo(0, selectedOffset - ($nav.height() * .8), false); + } + } +} + + + + + + +/* 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) { + if (val==undefined) return; + section = section == null ? "_" : "_"+section+"_"; + var age = 2*365*24*60*60; // set max-age to 2 years + var cookieValue = cookie_namespace + section + cookie + "=" + val + + "; max-age=" + age +"; path=/"; + document.cookie = cookieValue; +} + +/* ######### END COOKIES! ########## */ + + +var sticky = false; +var stickyTop; +var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll +/* Sets the vertical scoll position at which the sticky bar should appear. + This method is called to reset the position when search results appear or hide */ +function setStickyTop() { + stickyTop = $('#header-wrapper').outerHeight() - $('#sticky-header').outerHeight(); +} + +/* + * Displays sticky nav bar on pages when dac header scrolls out of view + */ +$(window).scroll(function(event) { + + setStickyTop(); + var hiding = false; + var $stickyEl = $('#sticky-header'); + var $menuEl = $('.menu-container'); + // Exit if there's no sidenav + if ($('#side-nav').length == 0) return; + // Exit if the mouse 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 + if ($(event.target).nodeName == "DIV") { + return; + } + + var top = $(window).scrollTop(); + // we set the navbar fixed when the scroll position is beyond the height of the site header... + var shouldBeSticky = top >= stickyTop; + // ... 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()) { + shouldBeSticky = false; + } + // Account for horizontal scroll + var scrollLeft = $(window).scrollLeft(); + // When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match + if (sticky && (scrollLeft != prevScrollLeft)) { + updateSideNavPosition(); + prevScrollLeft = scrollLeft; + } + + // Don't continue if the header is sufficently far away + // (to avoid intensive resizing that slows scrolling) + if (sticky == shouldBeSticky) { + return; + } + + // If sticky header visible and position is now near top, hide sticky + if (sticky && !shouldBeSticky) { + sticky = false; + hiding = true; + // make the sidenav static again + $('#devdoc-nav') + .removeClass('fixed') + .css({'width':'auto','margin':''}) + .prependTo('#side-nav'); + // delay hide the sticky + $menuEl.removeClass('sticky-menu'); + $stickyEl.fadeOut(250); + hiding = false; + + // update the sidenaav position for side scrolling + updateSideNavPosition(); + } else if (!sticky && shouldBeSticky) { + sticky = true; + $stickyEl.fadeIn(10); + $menuEl.addClass('sticky-menu'); + + // make the sidenav fixed + var width = $('#devdoc-nav').width(); + $('#devdoc-nav') + .addClass('fixed') + .css({'width':width+'px'}) + .prependTo('#body-content'); + + // update the sidenaav position for side scrolling + updateSideNavPosition(); + + } else if (hiding && top < 15) { + $menuEl.removeClass('sticky-menu'); + $stickyEl.hide(); + hiding = false; + } + resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance +}); + +/* + * Manages secion card states and nav resize to conclude loading + */ +(function() { + $(document).ready(function() { + + // Stack hover states + $('.section-card-menu').each(function(index, el) { + var height = $(el).height(); + $(el).css({height:height+'px', position:'relative'}); + var $cardInfo = $(el).find('.card-info'); + + $cardInfo.css({position: 'absolute', bottom:'0px', left:'0px', right:'0px', overflow:'visible'}); + }); + + }); + +})(); + + + + + + + + + + + + + + +/* MISC LIBRARY FUNCTIONS */ + + + + + +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"); + }); +} + + + +function hideNestedItems(list, toggle) { + $list = $(list); + // hide nested lists + if($list.hasClass('showing')) { + $("li ol", $list).hide('fast'); + $list.removeClass('showing'); + // show nested lists + } else { + $("li ol", $list).show('fast'); + $list.addClass('showing'); + } + $(".more,.less",$(toggle)).toggle(); +} + + +/* Call this to add listeners to a <select> element for Studio/Eclipse/Other docs */ +function setupIdeDocToggle() { + $( "select.ide" ).change(function() { + var selected = $(this).find("option:selected").attr("value"); + $(".select-ide").hide(); + $(".select-ide."+selected).show(); + + $("select.ide").val(selected); + }); +} + + + + + + + + + + + + + + + + + + + + + + + + +/* 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); + } + writeCookie("nav", nav_pref, "reference"); + + $("#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) { + writeCookie("pref_lang", lang, null); + + // ####### 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 + 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).closest(".toggle-content"); + var toggleMe = $(".toggle-content-toggleme:eq(0)",div); + if (div.hasClass("closed")) { // if it's closed, open it + toggleMe.slideDown(); + $(".toggle-content-text:eq(0)", obj).toggle(); + div.removeClass("closed").addClass("open"); + $(".toggle-content-img:eq(0)", 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:eq(0)", obj).toggle(); + div.removeClass("open").addClass("closed"); + div.find(".toggle-content").removeClass("open").addClass("closed") + .find(".toggle-content-toggleme").hide(); + $(".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; // the index position of currently highlighted suggestion +var gSelectedColumn = -1; // which column of suggestion lists is currently focused + +var gMatches = new Array(); +var gLastText = ""; +var gInitialized = false; +var ROW_COUNT_FRAMEWORK = 20; // max number of results in list +var gListLength = 0; + + +var gGoogleMatches = new Array(); +var ROW_COUNT_GOOGLE = 15; // max number of results in list +var gGoogleListLength = 0; + +var gDocsMatches = new Array(); +var ROW_COUNT_DOCS = 100; // max number of results in list +var gDocsListLength = 0; + +function onSuggestionClick(link) { + // When user clicks a suggested document, track it + ga('send', 'event', 'Suggestion Click', 'clicked: ' + $(link).attr('href'), + 'query: ' + $("#search_autocomplete").val().toLowerCase()); +} + +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 set_item_values_jd(toroot, $li, match) +{ + var $link = $('a',$li); + $link.html(match.title); + $link.attr('href',toroot + match.url); +} + +function new_suggestion($list) { + var $li = $("<li class='jd-autocomplete'></li>"); + $list.append($li); + + $li.mousedown(function() { + window.location = this.firstChild.getAttribute("href"); + }); + $li.mouseover(function() { + $('.search_filtered_wrapper li').removeClass('jd-selected'); + $(this).addClass('jd-selected'); + gSelectedColumn = $(".search_filtered:visible").index($(this).closest('.search_filtered')); + gSelectedIndex = $("li", $(".search_filtered:visible")[gSelectedColumn]).index(this); + }); + $li.append("<a onclick='onSuggestionClick(this)'></a>"); + $li.attr('class','show-item'); + return $li; +} + +function sync_selection_table(toroot) +{ + var $li; //list item jquery object + var i; //list item iterator + + // if there are NO results at all, hide all columns + if (!(gMatches.length > 0) && !(gGoogleMatches.length > 0) && !(gDocsMatches.length > 0)) { + $('.suggest-card').hide(300); + return; + } + + // if there are api results + if ((gMatches.length > 0) || (gGoogleMatches.length > 0)) { + // reveal suggestion list + $('.suggest-card.dummy').show(); + $('.suggest-card.reference').show(); + var listIndex = 0; // list index position + + // reset the lists + $(".search_filtered_wrapper.reference li").remove(); + + // ########### ANDROID RESULTS ############# + if (gMatches.length > 0) { + + // determine android results to show + gListLength = gMatches.length < ROW_COUNT_FRAMEWORK ? + gMatches.length : ROW_COUNT_FRAMEWORK; + for (i=0; i<gListLength; i++) { + var $li = new_suggestion($(".suggest-card.reference ul")); + set_item_values(toroot, $li, gMatches[i]); + set_item_selected($li, i == gSelectedIndex); + } + } + + // ########### GOOGLE RESULTS ############# + if (gGoogleMatches.length > 0) { + // show header for list + $(".suggest-card.reference ul").append("<li class='header'>in Google Services:</li>"); + + // determine google results to show + gGoogleListLength = gGoogleMatches.length < ROW_COUNT_GOOGLE ? gGoogleMatches.length : ROW_COUNT_GOOGLE; + for (i=0; i<gGoogleListLength; i++) { + var $li = new_suggestion($(".suggest-card.reference ul")); + set_item_values(toroot, $li, gGoogleMatches[i]); + set_item_selected($li, i == gSelectedIndex); + } + } + } else { + $('.suggest-card.reference').hide(); + $('.suggest-card.dummy').hide(); + } + + // ########### JD DOC RESULTS ############# + if (gDocsMatches.length > 0) { + // reset the lists + $(".search_filtered_wrapper.docs li").remove(); + + // determine google results to show + // NOTE: The order of the conditions below for the sugg.type MUST BE SPECIFIC: + // The order must match the reverse order that each section appears as a card in + // the suggestion UI... this may be only for the "develop" grouped items though. + gDocsListLength = gDocsMatches.length < ROW_COUNT_DOCS ? gDocsMatches.length : ROW_COUNT_DOCS; + for (i=0; i<gDocsListLength; i++) { + var sugg = gDocsMatches[i]; + var $li; + if (sugg.type == "design") { + $li = new_suggestion($(".suggest-card.design ul")); + } else + if (sugg.type == "distribute") { + $li = new_suggestion($(".suggest-card.distribute ul")); + } else + if (sugg.type == "samples") { + $li = new_suggestion($(".suggest-card.develop .child-card.samples")); + } else + if (sugg.type == "training") { + $li = new_suggestion($(".suggest-card.develop .child-card.training")); + } else + if (sugg.type == "about"||"guide"||"tools"||"google") { + $li = new_suggestion($(".suggest-card.develop .child-card.guides")); + } else { + continue; + } + + set_item_values_jd(toroot, $li, sugg); + set_item_selected($li, i == gSelectedIndex); + } + + // add heading and show or hide card + if ($(".suggest-card.design li").length > 0) { + $(".suggest-card.design ul").prepend("<li class='header'>Design:</li>"); + $(".suggest-card.design").show(300); + } else { + $('.suggest-card.design').hide(300); + } + if ($(".suggest-card.distribute li").length > 0) { + $(".suggest-card.distribute ul").prepend("<li class='header'>Distribute:</li>"); + $(".suggest-card.distribute").show(300); + } else { + $('.suggest-card.distribute').hide(300); + } + if ($(".child-card.guides li").length > 0) { + $(".child-card.guides").prepend("<li class='header'>Guides:</li>"); + $(".child-card.guides li").appendTo(".suggest-card.develop ul"); + } + if ($(".child-card.training li").length > 0) { + $(".child-card.training").prepend("<li class='header'>Training:</li>"); + $(".child-card.training li").appendTo(".suggest-card.develop ul"); + } + if ($(".child-card.samples li").length > 0) { + $(".child-card.samples").prepend("<li class='header'>Samples:</li>"); + $(".child-card.samples li").appendTo(".suggest-card.develop ul"); + } + + if ($(".suggest-card.develop li").length > 0) { + $(".suggest-card.develop").show(300); + } else { + $('.suggest-card.develop').hide(300); + } + + } else { + $('.search_filtered_wrapper.docs .suggest-card:not(.dummy)').hide(300); + } +} + +/** Called by the search input's onkeydown and onkeyup events. + * Handles navigation with keyboard arrows, Enter key to invoke search, + * otherwise invokes search suggestions on key-up event. + * @param e The JS event + * @param kd True if the event is key-down + * @param toroot A string for the site's root path + * @returns True if the event should bubble up + */ +function search_changed(e, kd, toroot) +{ + var currentLang = getLangPref(); + var search = document.getElementById("search_autocomplete"); + var text = search.value.replace(/(^ +)|( +$)/g, ''); + // get the ul hosting the currently selected item + gSelectedColumn = gSelectedColumn >= 0 ? gSelectedColumn : 0; + var $columns = $(".search_filtered_wrapper").find(".search_filtered:visible"); + var $selectedUl = $columns[gSelectedColumn]; + + // show/hide the close button + if (text != '') { + $(".search .close").removeClass("hide"); + } else { + $(".search .close").addClass("hide"); + } + // 27 = esc + if (e.keyCode == 27) { + // close all search results + if (kd) $('.search .close').trigger('click'); + return true; + } + // 13 = enter + else if (e.keyCode == 13) { + if (gSelectedIndex < 0) { + $('.suggest-card').hide(); + if ($("#searchResults").is(":hidden") && (search.value != "")) { + // if results aren't showing (and text not empty), return true to allow search to execute + $('body,html').animate({scrollTop:0}, '500', 'swing'); + 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) { + // click the link corresponding to selected item + $("a",$("li",$selectedUl)[gSelectedIndex]).get()[0].click(); + return false; + } + } + // If Google results are showing, return true to allow ajax search to execute + else if ($("#searchResults").is(":visible")) { + // Also, if search_results is scrolled out of view, scroll to top to make results visible + if ((sticky ) && (search.value != "")) { + $('body,html').animate({scrollTop:0}, '500', 'swing'); + } + return true; + } + // 38 UP ARROW + else if (kd && (e.keyCode == 38)) { + // if the next item is a header, skip it + if ($($("li", $selectedUl)[gSelectedIndex-1]).hasClass("header")) { + gSelectedIndex--; + } + if (gSelectedIndex >= 0) { + $('li', $selectedUl).removeClass('jd-selected'); + gSelectedIndex--; + $('li:nth-child('+(gSelectedIndex+1)+')', $selectedUl).addClass('jd-selected'); + // If user reaches top, reset selected column + if (gSelectedIndex < 0) { + gSelectedColumn = -1; + } + } + return false; + } + // 40 DOWN ARROW + else if (kd && (e.keyCode == 40)) { + // if the next item is a header, skip it + if ($($("li", $selectedUl)[gSelectedIndex+1]).hasClass("header")) { + gSelectedIndex++; + } + if ((gSelectedIndex < $("li", $selectedUl).length-1) || + ($($("li", $selectedUl)[gSelectedIndex+1]).hasClass("header"))) { + $('li', $selectedUl).removeClass('jd-selected'); + gSelectedIndex++; + $('li:nth-child('+(gSelectedIndex+1)+')', $selectedUl).addClass('jd-selected'); + } + return false; + } + // Consider left/right arrow navigation + // NOTE: Order of suggest columns are reverse order (index position 0 is on right) + else if (kd && $columns.length > 1 && gSelectedColumn >= 0) { + // 37 LEFT ARROW + // go left only if current column is not left-most column (last column) + if (e.keyCode == 37 && gSelectedColumn < $columns.length - 1) { + $('li', $selectedUl).removeClass('jd-selected'); + gSelectedColumn++; + $selectedUl = $columns[gSelectedColumn]; + // keep or reset the selected item to last item as appropriate + gSelectedIndex = gSelectedIndex > + $("li", $selectedUl).length-1 ? + $("li", $selectedUl).length-1 : gSelectedIndex; + // if the corresponding item is a header, move down + if ($($("li", $selectedUl)[gSelectedIndex]).hasClass("header")) { + gSelectedIndex++; + } + // set item selected + $('li:nth-child('+(gSelectedIndex+1)+')', $selectedUl).addClass('jd-selected'); + return false; + } + // 39 RIGHT ARROW + // go right only if current column is not the right-most column (first column) + else if (e.keyCode == 39 && gSelectedColumn > 0) { + $('li', $selectedUl).removeClass('jd-selected'); + gSelectedColumn--; + $selectedUl = $columns[gSelectedColumn]; + // keep or reset the selected item to last item as appropriate + gSelectedIndex = gSelectedIndex > + $("li", $selectedUl).length-1 ? + $("li", $selectedUl).length-1 : gSelectedIndex; + // if the corresponding item is a header, move down + if ($($("li", $selectedUl)[gSelectedIndex]).hasClass("header")) { + gSelectedIndex++; + } + // set item selected + $('li:nth-child('+(gSelectedIndex+1)+')', $selectedUl).addClass('jd-selected'); + return false; + } + } + + // if key-up event and not arrow down/up/left/right, + // read the search query and add suggestions to gMatches + else if (!kd && (e.keyCode != 40) + && (e.keyCode != 38) + && (e.keyCode != 37) + && (e.keyCode != 39)) { + gSelectedIndex = -1; + gMatches = new Array(); + matchedCount = 0; + gGoogleMatches = new Array(); + matchedCountGoogle = 0; + gDocsMatches = new Array(); + matchedCountDocs = 0; + + // Search for Android matches + 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_api_results(text, gMatches); + for (var i=0; i<gMatches.length; i++) { + var s = gMatches[i]; + } + + + // Search for Google matches + for (var i=0; i<GOOGLE_DATA.length; i++) { + var s = GOOGLE_DATA[i]; + if (text.length != 0 && + s.label.toLowerCase().indexOf(text.toLowerCase()) != -1) { + gGoogleMatches[matchedCountGoogle] = s; + matchedCountGoogle++; + } + } + rank_autocomplete_api_results(text, gGoogleMatches); + for (var i=0; i<gGoogleMatches.length; i++) { + var s = gGoogleMatches[i]; + } + + highlight_autocomplete_result_labels(text); + + + + // Search for matching JD docs + if (text.length >= 2) { + // Regex to match only the beginning of a word + var textRegex = new RegExp("\\b" + text.toLowerCase(), "g"); + + + // Search for Training classes + for (var i=0; i<TRAINING_RESOURCES.length; i++) { + // current search comparison, with counters for tag and title, + // used later to improve ranking + var s = TRAINING_RESOURCES[i]; + s.matched_tag = 0; + s.matched_title = 0; + var matched = false; + + // Check if query matches any tags; work backwards toward 1 to assist ranking + for (var j = s.keywords.length - 1; j >= 0; j--) { + // it matches a tag + if (s.keywords[j].toLowerCase().match(textRegex)) { + matched = true; + s.matched_tag = j + 1; // add 1 to index position + } + } + // Don't consider doc title for lessons (only for class landing pages), + // unless the lesson has a tag that already matches + if ((s.lang == currentLang) && + (!(s.type == "training" && s.url.indexOf("index.html") == -1) || matched)) { + // it matches the doc title + if (s.title.toLowerCase().match(textRegex)) { + matched = true; + s.matched_title = 1; + } + } + if (matched) { + gDocsMatches[matchedCountDocs] = s; + matchedCountDocs++; + } + } + + + // Search for API Guides + for (var i=0; i<GUIDE_RESOURCES.length; i++) { + // current search comparison, with counters for tag and title, + // used later to improve ranking + var s = GUIDE_RESOURCES[i]; + s.matched_tag = 0; + s.matched_title = 0; + var matched = false; + + // Check if query matches any tags; work backwards toward 1 to assist ranking + for (var j = s.keywords.length - 1; j >= 0; j--) { + // it matches a tag + if (s.keywords[j].toLowerCase().match(textRegex)) { + matched = true; + s.matched_tag = j + 1; // add 1 to index position + } + } + // Check if query matches the doc title, but only for current language + if (s.lang == currentLang) { + // if query matches the doc title + if (s.title.toLowerCase().match(textRegex)) { + matched = true; + s.matched_title = 1; + } + } + if (matched) { + gDocsMatches[matchedCountDocs] = s; + matchedCountDocs++; + } + } + + + // Search for Tools Guides + for (var i=0; i<TOOLS_RESOURCES.length; i++) { + // current search comparison, with counters for tag and title, + // used later to improve ranking + var s = TOOLS_RESOURCES[i]; + s.matched_tag = 0; + s.matched_title = 0; + var matched = false; + + // Check if query matches any tags; work backwards toward 1 to assist ranking + for (var j = s.keywords.length - 1; j >= 0; j--) { + // it matches a tag + if (s.keywords[j].toLowerCase().match(textRegex)) { + matched = true; + s.matched_tag = j + 1; // add 1 to index position + } + } + // Check if query matches the doc title, but only for current language + if (s.lang == currentLang) { + // if query matches the doc title + if (s.title.toLowerCase().match(textRegex)) { + matched = true; + s.matched_title = 1; + } + } + if (matched) { + gDocsMatches[matchedCountDocs] = s; + matchedCountDocs++; + } + } + + + // Search for About docs + for (var i=0; i<ABOUT_RESOURCES.length; i++) { + // current search comparison, with counters for tag and title, + // used later to improve ranking + var s = ABOUT_RESOURCES[i]; + s.matched_tag = 0; + s.matched_title = 0; + var matched = false; + + // Check if query matches any tags; work backwards toward 1 to assist ranking + for (var j = s.keywords.length - 1; j >= 0; j--) { + // it matches a tag + if (s.keywords[j].toLowerCase().match(textRegex)) { + matched = true; + s.matched_tag = j + 1; // add 1 to index position + } + } + // Check if query matches the doc title, but only for current language + if (s.lang == currentLang) { + // if query matches the doc title + if (s.title.toLowerCase().match(textRegex)) { + matched = true; + s.matched_title = 1; + } + } + if (matched) { + gDocsMatches[matchedCountDocs] = s; + matchedCountDocs++; + } + } + + + // Search for Design guides + for (var i=0; i<DESIGN_RESOURCES.length; i++) { + // current search comparison, with counters for tag and title, + // used later to improve ranking + var s = DESIGN_RESOURCES[i]; + s.matched_tag = 0; + s.matched_title = 0; + var matched = false; + + // Check if query matches any tags; work backwards toward 1 to assist ranking + for (var j = s.keywords.length - 1; j >= 0; j--) { + // it matches a tag + if (s.keywords[j].toLowerCase().match(textRegex)) { + matched = true; + s.matched_tag = j + 1; // add 1 to index position + } + } + // Check if query matches the doc title, but only for current language + if (s.lang == currentLang) { + // if query matches the doc title + if (s.title.toLowerCase().match(textRegex)) { + matched = true; + s.matched_title = 1; + } + } + if (matched) { + gDocsMatches[matchedCountDocs] = s; + matchedCountDocs++; + } + } + + + // Search for Distribute guides + for (var i=0; i<DISTRIBUTE_RESOURCES.length; i++) { + // current search comparison, with counters for tag and title, + // used later to improve ranking + var s = DISTRIBUTE_RESOURCES[i]; + s.matched_tag = 0; + s.matched_title = 0; + var matched = false; + + // Check if query matches any tags; work backwards toward 1 to assist ranking + for (var j = s.keywords.length - 1; j >= 0; j--) { + // it matches a tag + if (s.keywords[j].toLowerCase().match(textRegex)) { + matched = true; + s.matched_tag = j + 1; // add 1 to index position + } + } + // Check if query matches the doc title, but only for current language + if (s.lang == currentLang) { + // if query matches the doc title + if (s.title.toLowerCase().match(textRegex)) { + matched = true; + s.matched_title = 1; + } + } + if (matched) { + gDocsMatches[matchedCountDocs] = s; + matchedCountDocs++; + } + } + + + // Search for Google guides + for (var i=0; i<GOOGLE_RESOURCES.length; i++) { + // current search comparison, with counters for tag and title, + // used later to improve ranking + var s = GOOGLE_RESOURCES[i]; + s.matched_tag = 0; + s.matched_title = 0; + var matched = false; + + // Check if query matches any tags; work backwards toward 1 to assist ranking + for (var j = s.keywords.length - 1; j >= 0; j--) { + // it matches a tag + if (s.keywords[j].toLowerCase().match(textRegex)) { + matched = true; + s.matched_tag = j + 1; // add 1 to index position + } + } + // Check if query matches the doc title, but only for current language + if (s.lang == currentLang) { + // if query matches the doc title + if (s.title.toLowerCase().match(textRegex)) { + matched = true; + s.matched_title = 1; + } + } + if (matched) { + gDocsMatches[matchedCountDocs] = s; + matchedCountDocs++; + } + } + + + // Search for Samples + for (var i=0; i<SAMPLES_RESOURCES.length; i++) { + // current search comparison, with counters for tag and title, + // used later to improve ranking + var s = SAMPLES_RESOURCES[i]; + s.matched_tag = 0; + s.matched_title = 0; + var matched = false; + // Check if query matches any tags; work backwards toward 1 to assist ranking + for (var j = s.keywords.length - 1; j >= 0; j--) { + // it matches a tag + if (s.keywords[j].toLowerCase().match(textRegex)) { + matched = true; + s.matched_tag = j + 1; // add 1 to index position + } + } + // Check if query matches the doc title, but only for current language + if (s.lang == currentLang) { + // if query matches the doc title.t + if (s.title.toLowerCase().match(textRegex)) { + matched = true; + s.matched_title = 1; + } + } + if (matched) { + gDocsMatches[matchedCountDocs] = s; + matchedCountDocs++; + } + } + + // Rank/sort all the matched pages + rank_autocomplete_doc_results(text, gDocsMatches); + } + + // draw the suggestions + sync_selection_table(toroot); + return true; // allow the event to bubble up to the search api + } +} + +/* Order the jd doc result list based on match quality */ +function rank_autocomplete_doc_results(query, matches) { + query = query || ''; + if (!matches || !matches.length) + return; + + var _resultScoreFn = function(match) { + var score = 1.0; + + // if the query matched a tag + if (match.matched_tag > 0) { + // multiply score by factor relative to position in tags list (max of 3) + score *= 3 / match.matched_tag; + + // if it also matched the title + if (match.matched_title > 0) { + score *= 2; + } + } else if (match.matched_title > 0) { + score *= 3; + } + + return score; + }; + + for (var i=0; i<matches.length; i++) { + matches[i].__resultScore = _resultScoreFn(matches[i]); + } + + matches.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; + }); +} + +/* Order the result list based on match quality */ +function rank_autocomplete_api_results(query, matches) { + query = query || ''; + if (!matches || !matches.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<matches.length; i++) { + // if the API is deprecated, default score is 0; otherwise, perform scoring + if (matches[i].deprecated == "true") { + matches[i].__resultScore = 0; + } else { + matches[i].__resultScore = _resultScoreFn(matches[i]); + } + } + + matches.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; + }); +} + +/* Add emphasis to part of string that matches query */ +function highlight_autocomplete_result_labels(query) { + query = query || ''; + if ((!gMatches || !gMatches.length) && (!gGoogleMatches || !gGoogleMatches.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>'); + } + for (var i=0; i<gGoogleMatches.length; i++) { + gGoogleMatches[i].__hilabel = gGoogleMatches[i].label.replace( + queryRE, '<b>$1</b>'); + } +} + +function search_focus_changed(obj, focused) +{ + if (!focused) { + if(obj.value == ""){ + $(".search .close").addClass("hide"); + } + $(".suggest-card").hide(); + } +} + +function submit_search() { + var query = document.getElementById('search_autocomplete').value; + location.hash = 'q=' + query; + loadSearchResults(); + $("#searchResults").slideDown('slow', setStickyTop); + return false; +} + + +function hideResults() { + $("#searchResults").slideUp('fast', setStickyTop); + $(".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) {}); + + // forcefully regain key-up event control (previously jacked by search api) + $("#search_autocomplete").keyup(function(event) { + return search_changed(event, false, toRoot); + }); + + return false; +} + + + +/* ########################################################## */ +/* ################ CUSTOM SEARCH ENGINE ################## */ +/* ########################################################## */ + +var searchControl; +google.load('search', '1', {"callback" : function() { + searchControl = new google.search.SearchControl(); + } }); + +function loadSearchResults() { + document.getElementById("search_autocomplete").style.color = "#000"; + + 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; + }); + + // once search results load, set up click listeners + searchControl.setSearchCompleteCallback(this, function(control, searcher, query) { + addResultClickListeners(); + }); + + // 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', setStickyTop); + $(".search .close").removeClass("hide"); + loadSearchResults(); + } +}, true); + +/* Adjust the scroll position to account for sticky header, only if the hash matches an id. + This does not handle <a name=""> tags. Some CSS fixes those, but only for reference docs. */ +function offsetScrollForSticky() { + // Ignore if there's no search bar (some special pages have no header) + if ($("#search-container").length < 1) return; + + var hash = escape(location.hash.substr(1)); + var $matchingElement = $("#"+hash); + // Sanity check that there's an element with that ID on the page + if ($matchingElement.length) { + // If the position of the target element is near the top of the page (<20px, where we expect it + // to be because we need to move it down 60px to become in view), then move it down 60px + if (Math.abs($matchingElement.offset().top - $(window).scrollTop()) < 20) { + $(window).scrollTop($(window).scrollTop() - 60); + } + } +} + +// when an event on the browser history occurs (back, forward, load) requery hash and do search +$(window).hashchange( function(){ + // Ignore if there's no search bar (some special pages have no header) + if ($("#search-container").length < 1) return; + + // If the hash isn't a search query or there's an error in the query, + // then adjust the scroll position to account for sticky header, then exit. + if ((location.hash.indexOf("q=") == -1) || (query == "undefined")) { + // If the results pane is open, close it. + if (!$("#searchResults").is(":hidden")) { + hideResults(); + } + offsetScrollForSticky(); + return; + } + + // Otherwise, we have a search to do + var query = decodeURI(getQuery(location.hash)); + searchControl.execute(query); + $('#searchResults').slideDown('slow', setStickyTop); + $("#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); +} + +// add analytics tracking events to each result link +function addResultClickListeners() { + $("#searchResults a.gs-title").each(function(index, link) { + // When user clicks enter for Google search results, track it + $(link).click(function() { + ga('send', 'event', 'Google Click', 'clicked: ' + $(this).attr('href'), + 'query: ' + $("#search_autocomplete").val().toLowerCase()); + }); + }); +} + + +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,"<") + .replace(/>/g,">"); +} + + + + + + + +/* ######################################################## */ +/* ################# JAVADOC REFERENCE ################### */ +/* ######################################################## */ + +/* Initialize some droiddoc stuff, but only if we're in the reference */ +if (location.pathname.indexOf("/reference") == 0) { + if(!(location.pathname.indexOf("/reference-gms/packages.html") == 0) + && !(location.pathname.indexOf("/reference-gcm/packages.html") == 0) + && !(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 (!sticky) 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 (!sticky) 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"); + + writeCookie(API_LEVEL_COOKIE, selectedLevel, null); + + 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. To reveal, change the target API level " + + "above the left navigation."); + } + 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) { + // load json file for navtree data + $.getScript(toRoot + 'navtree_data.js', function(data, textStatus, jqxhr) { + // when the file is loaded, initialize the tree + if(jqxhr.status === 200) { + 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]); + } +} + + + + + + +/****** NEW version of script to build google and sample navs dynamically ******/ +// TODO: update Google reference docs to tolerate this new implementation + +var NODE_NAME = 0; +var NODE_HREF = 1; +var NODE_GROUP = 2; +var NODE_TAGS = 3; +var NODE_CHILDREN = 4; + +function init_google_navtree2(navtree_id, data) +{ + var $containerUl = $("#"+navtree_id); + for (var i in data) { + var node_data = data[i]; + $containerUl.append(new_google_node2(node_data)); + } + + // Make all third-generation list items 'sticky' to prevent them from collapsing + $containerUl.find('li li li.nav-section').addClass('sticky'); + + initExpandableNavItems("#"+navtree_id); +} + +function new_google_node2(node_data) +{ + var linkText = node_data[NODE_NAME]; + if(linkText.match("^"+"com.google.android")=="com.google.android"){ + linkText = linkText.substr(19, linkText.length); + } + var $li = $('<li>'); + var $a; + if (node_data[NODE_HREF] != null) { + $a = $('<a href="' + toRoot + node_data[NODE_HREF] + '" title="' + linkText + '" >' + + linkText + '</a>'); + } else { + $a = $('<a href="#" onclick="return false;" title="' + linkText + '" >' + + linkText + '/</a>'); + } + var $childUl = $('<ul>'); + if (node_data[NODE_CHILDREN] != null) { + $li.addClass("nav-section"); + $a = $('<div class="nav-section-header">').append($a); + if (node_data[NODE_HREF] == null) $a.addClass('empty'); + + for (var i in node_data[NODE_CHILDREN]) { + var child_node_data = node_data[NODE_CHILDREN][i]; + $childUl.append(new_google_node2(child_node_data)); + } + $li.append($childUl); + } + $li.prepend($a); + + return $li; +} + + + + + + + + + + + +function showGoogleRefTree() { + init_default_google_navtree(toRoot); + init_default_gcm_navtree(toRoot); +} + +function init_default_google_navtree(toroot) { + // load json file for navtree data + $.getScript(toRoot + 'gms_navtree_data.js', function(data, textStatus, jqxhr) { + // when the file is loaded, initialize the tree + if(jqxhr.status === 200) { + init_google_navtree("gms-tree-list", toroot, GMS_NAVTREE_DATA); + highlightSidenav(); + resizeNav(); + } + }); +} + +function init_default_gcm_navtree(toroot) { + // load json file for navtree data + $.getScript(toRoot + 'gcm_navtree_data.js', function(data, textStatus, jqxhr) { + // when the file is loaded, initialize the tree + if(jqxhr.status === 200) { + init_google_navtree("gcm-tree-list", toroot, GCM_NAVTREE_DATA); + highlightSidenav(); + resizeNav(); + } + }); +} + +function showSamplesRefTree() { + init_default_samples_navtree(toRoot); +} + +function init_default_samples_navtree(toroot) { + // load json file for navtree data + $.getScript(toRoot + 'samples_navtree_data.js', function(data, textStatus, jqxhr) { + // when the file is loaded, initialize the tree + if(jqxhr.status === 200) { + // hack to remove the "about the samples" link then put it back in + // after we nuke the list to remove the dummy static list of samples + var $firstLi = $("#nav.samples-nav > li:first-child").clone(); + $("#nav.samples-nav").empty(); + $("#nav.samples-nav").append($firstLi); + + init_google_navtree2("nav.samples-nav", SAMPLES_NAVTREE_DATA); + highlightSidenav(); + resizeNav(); + if ($("#jd-content #samples").length) { + showSamples(); + } + } + }); +} + +/* 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(); + } +}); + + + + + + +/* On-demand functions */ + +/** Move sample code line numbers out of PRE block and into non-copyable column */ +function initCodeLineNumbers() { + var numbers = $("#codesample-block a.number"); + if (numbers.length) { + $("#codesample-line-numbers").removeClass("hidden").append(numbers); + } + + $(document).ready(function() { + // select entire line when clicked + $("span.code-line").click(function() { + if (!shifted) { + selectText(this); + } + }); + // invoke line link on double click + $(".code-line").dblclick(function() { + document.location.hash = $(this).attr('id'); + }); + // highlight the line when hovering on the number + $("#codesample-line-numbers a.number").mouseover(function() { + var id = $(this).attr('href'); + $(id).css('background','#e7e7e7'); + }); + $("#codesample-line-numbers a.number").mouseout(function() { + var id = $(this).attr('href'); + $(id).css('background','none'); + }); + }); +} + +// create SHIFT key binder to avoid the selectText method when selecting multiple lines +var shifted = false; +$(document).bind('keyup keydown', function(e){shifted = e.shiftKey; return true;} ); + +// courtesy of jasonedelman.com +function selectText(element) { + var doc = document + , range, selection + ; + if (doc.body.createTextRange) { //ms + range = doc.body.createTextRange(); + range.moveToElementText(element); + range.select(); + } else if (window.getSelection) { //all others + selection = window.getSelection(); + range = doc.createRange(); + range.selectNodeContents(element); + selection.removeAllRanges(); + selection.addRange(range); + } +} + + + + +/** Display links and other information about samples that match the + group specified by the URL */ +function showSamples() { + var group = $("#samples").attr('class'); + $("#samples").html("<p>Here are some samples for <b>" + group + "</b> apps:</p>"); + + var $ul = $("<ul>"); + $selectedLi = $("#nav li.selected"); + + $selectedLi.children("ul").children("li").each(function() { + var $li = $("<li>").append($(this).find("a").first().clone()); + $ul.append($li); + }); + + $("#samples").append($ul); + +} + + + +/* ########################################################## */ +/* ################### RESOURCE CARDS ##################### */ +/* ########################################################## */ + +/** Handle resource queries, collections, and grids (sections). Requires + jd_tag_helpers.js and the *_unified_data.js to be loaded. */ + +(function() { + // Prevent the same resource from being loaded more than once per page. + var addedPageResources = {}; + + $(document).ready(function() { + $('.resource-widget').each(function() { + initResourceWidget(this); + }); + + /* Pass the line height to ellipsisfade() to adjust the height of the + text container to show the max number of lines possible, without + showing lines that are cut off. This works with the css ellipsis + classes to fade last text line and apply an ellipsis char. */ + + //card text currently uses 15px line height. + var lineHeight = 15; + $('.card-info .text').ellipsisfade(lineHeight); + }); + + /* + Three types of resource layouts: + Flow - Uses a fixed row-height flow using float left style. + Carousel - Single card slideshow all same dimension absolute. + Stack - Uses fixed columns and flexible element height. + */ + function initResourceWidget(widget) { + var $widget = $(widget); + var isFlow = $widget.hasClass('resource-flow-layout'), + isCarousel = $widget.hasClass('resource-carousel-layout'), + isStack = $widget.hasClass('resource-stack-layout'); + + // find size of widget by pulling out its class name + var sizeCols = 1; + var m = $widget.get(0).className.match(/\bcol-(\d+)\b/); + if (m) { + sizeCols = parseInt(m[1], 10); + } + + var opts = { + cardSizes: ($widget.data('cardsizes') || '').split(','), + maxResults: parseInt($widget.data('maxresults') || '100', 10), + itemsPerPage: $widget.data('itemsperpage'), + sortOrder: $widget.data('sortorder'), + query: $widget.data('query'), + section: $widget.data('section'), + sizeCols: sizeCols, + /* Added by LFL 6/6/14 */ + resourceStyle: $widget.data('resourcestyle') || 'card', + stackSort: $widget.data('stacksort') || 'true' + }; + + // run the search for the set of resources to show + + var resources = buildResourceList(opts); + + if (isFlow) { + drawResourcesFlowWidget($widget, opts, resources); + } else if (isCarousel) { + drawResourcesCarouselWidget($widget, opts, resources); + } else if (isStack) { + /* Looks like this got removed and is not used, so repurposing for the + homepage style layout. + Modified by LFL 6/6/14 + */ + //var sections = buildSectionList(opts); + opts['numStacks'] = $widget.data('numstacks'); + drawResourcesStackWidget($widget, opts, resources/*, sections*/); + } + } + + /* Initializes a Resource Carousel Widget */ + function drawResourcesCarouselWidget($widget, opts, resources) { + $widget.empty(); + var plusone = true; //always show plusone on carousel + + $widget.addClass('resource-card slideshow-container') + .append($('<a>').addClass('slideshow-prev').text('Prev')) + .append($('<a>').addClass('slideshow-next').text('Next')); + + var css = { 'width': $widget.width() + 'px', + 'height': $widget.height() + 'px' }; + + var $ul = $('<ul>'); + + for (var i = 0; i < resources.length; ++i) { + var $card = $('<a>') + .attr('href', cleanUrl(resources[i].url)) + .decorateResourceCard(resources[i],plusone); + + $('<li>').css(css) + .append($card) + .appendTo($ul); + } + + $('<div>').addClass('frame') + .append($ul) + .appendTo($widget); + + $widget.dacSlideshow({ + auto: true, + btnPrev: '.slideshow-prev', + btnNext: '.slideshow-next' + }); + }; + + /* Initializes a Resource Card Stack Widget (column-based layout) + Modified by LFL 6/6/14 + */ + function drawResourcesStackWidget($widget, opts, resources, sections) { + // Don't empty widget, grab all items inside since they will be the first + // items stacked, followed by the resource query + var plusone = true; //by default show plusone on section cards + var cards = $widget.find('.resource-card').detach().toArray(); + var numStacks = opts.numStacks || 1; + var $stacks = []; + var urlString; + + for (var i = 0; i < numStacks; ++i) { + $stacks[i] = $('<div>').addClass('resource-card-stack') + .appendTo($widget); + } + + var sectionResources = []; + + // Extract any subsections that are actually resource cards + if (sections) { + for (var i = 0; i < sections.length; ++i) { + if (!sections[i].sections || !sections[i].sections.length) { + // Render it as a resource card + sectionResources.push( + $('<a>') + .addClass('resource-card section-card') + .attr('href', cleanUrl(sections[i].resource.url)) + .decorateResourceCard(sections[i].resource,plusone)[0] + ); + + } else { + cards.push( + $('<div>') + .addClass('resource-card section-card-menu') + .decorateResourceSection(sections[i],plusone)[0] + ); + } + } + } + + cards = cards.concat(sectionResources); + + for (var i = 0; i < resources.length; ++i) { + var $card = createResourceElement(resources[i], opts); + + if (opts.resourceStyle.indexOf('related') > -1) { + $card.addClass('related-card'); + } + + cards.push($card[0]); + } + + if (opts.stackSort != 'false') { + for (var i = 0; i < cards.length; ++i) { + // Find the stack with the shortest height, but give preference to + // left to right order. + var minHeight = $stacks[0].height(); + var minIndex = 0; + + for (var j = 1; j < numStacks; ++j) { + var height = $stacks[j].height(); + if (height < minHeight - 45) { + minHeight = height; + minIndex = j; + } + } + + $stacks[minIndex].append($(cards[i])); + } + } + + }; + + /* + Create a resource card using the given resource object and a list of html + configured options. Returns a jquery object containing the element. + */ + function createResourceElement(resource, opts, plusone) { + var $el; + + // The difference here is that generic cards are not entirely clickable + // so its a div instead of an a tag, also the generic one is not given + // the resource-card class so it appears with a transparent background + // and can be styled in whatever way the css setup. + if (opts.resourceStyle == 'generic') { + $el = $('<div>') + .addClass('resource') + .attr('href', cleanUrl(resource.url)) + .decorateResource(resource, opts); + } else { + var cls = 'resource resource-card'; + + $el = $('<a>') + .addClass(cls) + .attr('href', cleanUrl(resource.url)) + .decorateResourceCard(resource, plusone); + } + + return $el; + } + + /* Initializes a flow widget, see distribute.scss for generating accompanying css */ + function drawResourcesFlowWidget($widget, opts, resources) { + $widget.empty(); + var cardSizes = opts.cardSizes || ['6x6']; + var i = 0, j = 0; + var plusone = true; // by default show plusone on resource cards + + while (i < resources.length) { + var cardSize = cardSizes[j++ % cardSizes.length]; + cardSize = cardSize.replace(/^\s+|\s+$/,''); + // Some card sizes do not get a plusone button, such as where space is constrained + // or for cards commonly embedded in docs (to improve overall page speed). + plusone = !((cardSize == "6x2") || (cardSize == "6x3") || + (cardSize == "9x2") || (cardSize == "9x3") || + (cardSize == "12x2") || (cardSize == "12x3")); + + // A stack has a third dimension which is the number of stacked items + var isStack = cardSize.match(/(\d+)x(\d+)x(\d+)/); + var stackCount = 0; + var $stackDiv = null; + + if (isStack) { + // Create a stack container which should have the dimensions defined + // by the product of the items inside. + $stackDiv = $('<div>').addClass('resource-card-stack resource-card-' + isStack[1] + + 'x' + isStack[2] * isStack[3]) .appendTo($widget); + } + + // Build each stack item or just a single item + do { + var resource = resources[i]; + + var $card = createResourceElement(resources[i], opts, plusone); + + $card.addClass('resource-card-' + cardSize + + ' resource-card-' + resource.type); + + if (isStack) { + $card.addClass('resource-card-' + isStack[1] + 'x' + isStack[2]); + if (++stackCount == parseInt(isStack[3])) { + $card.addClass('resource-card-row-stack-last'); + stackCount = 0; + } + } else { + stackCount = 0; + } + + $card.appendTo($stackDiv || $widget); + + } while (++i < resources.length && stackCount > 0); + } + } + + /* Build a site map of resources using a section as a root. */ + function buildSectionList(opts) { + if (opts.section && SECTION_BY_ID[opts.section]) { + return SECTION_BY_ID[opts.section].sections || []; + } + return []; + } + + function buildResourceList(opts) { + var maxResults = opts.maxResults || 100; + + var query = opts.query || ''; + var expressions = parseResourceQuery(query); + var addedResourceIndices = {}; + var results = []; + + for (var i = 0; i < expressions.length; i++) { + var clauses = expressions[i]; + + // build initial set of resources from first clause + var firstClause = clauses[0]; + var resources = []; + switch (firstClause.attr) { + case 'type': + resources = ALL_RESOURCES_BY_TYPE[firstClause.value]; + break; + case 'lang': + resources = ALL_RESOURCES_BY_LANG[firstClause.value]; + break; + case 'tag': + resources = ALL_RESOURCES_BY_TAG[firstClause.value]; + break; + case 'collection': + var urls = RESOURCE_COLLECTIONS[firstClause.value].resources || []; + resources = urls.map(function(url){ return ALL_RESOURCES_BY_URL[url]; }); + break; + case 'section': + var urls = SITE_MAP[firstClause.value].sections || []; + resources = urls.map(function(url){ return ALL_RESOURCES_BY_URL[url]; }); + break; + } + // console.log(firstClause.attr + ':' + firstClause.value); + resources = resources || []; + + // use additional clauses to filter corpus + if (clauses.length > 1) { + var otherClauses = clauses.slice(1); + resources = resources.filter(getResourceMatchesClausesFilter(otherClauses)); + } + + // filter out resources already added + if (i > 1) { + resources = resources.filter(getResourceNotAlreadyAddedFilter(addedResourceIndices)); + } + + // add to list of already added indices + for (var j = 0; j < resources.length; j++) { + // console.log(resources[j].title); + addedResourceIndices[resources[j].index] = 1; + } + + // concat to final results list + results = results.concat(resources); + } + + if (opts.sortOrder && results.length) { + var attr = opts.sortOrder; + + if (opts.sortOrder == 'random') { + var i = results.length, j, temp; + while (--i) { + j = Math.floor(Math.random() * (i + 1)); + temp = results[i]; + results[i] = results[j]; + results[j] = temp; + } + } else { + var desc = attr.charAt(0) == '-'; + if (desc) { + attr = attr.substring(1); + } + results = results.sort(function(x,y) { + return (desc ? -1 : 1) * (parseInt(x[attr], 10) - parseInt(y[attr], 10)); + }); + } + } + + results = results.filter(getResourceNotAlreadyAddedFilter(addedPageResources)); + results = results.slice(0, maxResults); + + for (var j = 0; j < results.length; ++j) { + addedPageResources[results[j].index] = 1; + } + + return results; + } + + + function getResourceNotAlreadyAddedFilter(addedResourceIndices) { + return function(resource) { + return !addedResourceIndices[resource.index]; + }; + } + + + function getResourceMatchesClausesFilter(clauses) { + return function(resource) { + return doesResourceMatchClauses(resource, clauses); + }; + } + + + function doesResourceMatchClauses(resource, clauses) { + for (var i = 0; i < clauses.length; i++) { + var map; + switch (clauses[i].attr) { + case 'type': + map = IS_RESOURCE_OF_TYPE[clauses[i].value]; + break; + case 'lang': + map = IS_RESOURCE_IN_LANG[clauses[i].value]; + break; + case 'tag': + map = IS_RESOURCE_TAGGED[clauses[i].value]; + break; + } + + if (!map || (!!clauses[i].negative ? map[resource.index] : !map[resource.index])) { + return clauses[i].negative; + } + } + return true; + } + + function cleanUrl(url) + { + if (url && url.indexOf('//') === -1) { + url = toRoot + url; + } + + return url; + } + + + function parseResourceQuery(query) { + // Parse query into array of expressions (expression e.g. 'tag:foo + type:video') + var expressions = []; + var expressionStrs = query.split(',') || []; + for (var i = 0; i < expressionStrs.length; i++) { + var expr = expressionStrs[i] || ''; + + // Break expression into clauses (clause e.g. 'tag:foo') + var clauses = []; + var clauseStrs = expr.split(/(?=[\+\-])/); + for (var j = 0; j < clauseStrs.length; j++) { + var clauseStr = clauseStrs[j] || ''; + + // Get attribute and value from clause (e.g. attribute='tag', value='foo') + var parts = clauseStr.split(':'); + var clause = {}; + + clause.attr = parts[0].replace(/^\s+|\s+$/g,''); + if (clause.attr) { + if (clause.attr.charAt(0) == '+') { + clause.attr = clause.attr.substring(1); + } else if (clause.attr.charAt(0) == '-') { + clause.negative = true; + clause.attr = clause.attr.substring(1); + } + } + + if (parts.length > 1) { + clause.value = parts[1].replace(/^\s+|\s+$/g,''); + } + + clauses.push(clause); + } + + if (!clauses.length) { + continue; + } + + expressions.push(clauses); + } + + return expressions; + } +})(); + +(function($) { + + /* + Utility method for creating dom for the description area of a card. + Used in decorateResourceCard and decorateResource. + */ + function buildResourceCardDescription(resource, plusone) { + var $description = $('<div>').addClass('description ellipsis'); + + $description.append($('<div>').addClass('text').html(resource.summary)); + + if (resource.cta) { + $description.append($('<a>').addClass('cta').html(resource.cta)); + } + + if (plusone) { + var plusurl = resource.url.indexOf("//") > -1 ? resource.url : + "//developer.android.com/" + resource.url; + + $description.append($('<div>').addClass('util') + .append($('<div>').addClass('g-plusone') + .attr('data-size', 'small') + .attr('data-align', 'right') + .attr('data-href', plusurl))); + } + + return $description; + } + + + /* Simple jquery function to create dom for a standard resource card */ + $.fn.decorateResourceCard = function(resource,plusone) { + var section = resource.group || resource.type; + var imgUrl = resource.image || + 'assets/images/resource-card-default-android.jpg'; + + if (imgUrl.indexOf('//') === -1) { + imgUrl = toRoot + imgUrl; + } + + $('<div>').addClass('card-bg') + .css('background-image', 'url(' + (imgUrl || toRoot + + 'assets/images/resource-card-default-android.jpg') + ')') + .appendTo(this); + + $('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : '')) + .append($('<div>').addClass('section').text(section)) + .append($('<div>').addClass('title').html(resource.title)) + .append(buildResourceCardDescription(resource, plusone)) + .appendTo(this); + + return this; + }; + + /* Simple jquery function to create dom for a resource section card (menu) */ + $.fn.decorateResourceSection = function(section,plusone) { + var resource = section.resource; + //keep url clean for matching and offline mode handling + var urlPrefix = resource.image.indexOf("//") > -1 ? "" : toRoot; + var $base = $('<a>') + .addClass('card-bg') + .attr('href', resource.url) + .append($('<div>').addClass('card-section-icon') + .append($('<div>').addClass('icon')) + .append($('<div>').addClass('section').html(resource.title))) + .appendTo(this); + + var $cardInfo = $('<div>').addClass('card-info').appendTo(this); + + if (section.sections && section.sections.length) { + // Recurse the section sub-tree to find a resource image. + var stack = [section]; + + while (stack.length) { + if (stack[0].resource.image) { + $base.css('background-image', 'url(' + urlPrefix + stack[0].resource.image + ')'); + break; + } + + if (stack[0].sections) { + stack = stack.concat(stack[0].sections); + } + + stack.shift(); + } + + var $ul = $('<ul>') + .appendTo($cardInfo); + + var max = section.sections.length > 3 ? 3 : section.sections.length; + + for (var i = 0; i < max; ++i) { + + var subResource = section.sections[i]; + if (!plusone) { + $('<li>') + .append($('<a>').attr('href', subResource.url) + .append($('<div>').addClass('title').html(subResource.title)) + .append($('<div>').addClass('description ellipsis') + .append($('<div>').addClass('text').html(subResource.summary)) + .append($('<div>').addClass('util')))) + .appendTo($ul); + } else { + $('<li>') + .append($('<a>').attr('href', subResource.url) + .append($('<div>').addClass('title').html(subResource.title)) + .append($('<div>').addClass('description ellipsis') + .append($('<div>').addClass('text').html(subResource.summary)) + .append($('<div>').addClass('util') + .append($('<div>').addClass('g-plusone') + .attr('data-size', 'small') + .attr('data-align', 'right') + .attr('data-href', resource.url))))) + .appendTo($ul); + } + } + + // Add a more row + if (max < section.sections.length) { + $('<li>') + .append($('<a>').attr('href', resource.url) + .append($('<div>') + .addClass('title') + .text('More'))) + .appendTo($ul); + } + } else { + // No sub-resources, just render description? + } + + return this; + }; + + + + + /* Render other types of resource styles that are not cards. */ + $.fn.decorateResource = function(resource, opts) { + var imgUrl = resource.image || + 'assets/images/resource-card-default-android.jpg'; + var linkUrl = resource.url; + + if (imgUrl.indexOf('//') === -1) { + imgUrl = toRoot + imgUrl; + } + + if (linkUrl && linkUrl.indexOf('//') === -1) { + linkUrl = toRoot + linkUrl; + } + + $(this).append( + $('<div>').addClass('image') + .css('background-image', 'url(' + imgUrl + ')'), + $('<div>').addClass('info').append( + $('<h4>').addClass('title').html(resource.title), + $('<p>').addClass('summary').html(resource.summary), + $('<a>').attr('href', linkUrl).addClass('cta').html('Learn More') + ) + ); + + return this; + }; +})(jQuery); + + +/* Calculate the vertical area remaining */ +(function($) { + $.fn.ellipsisfade= function(lineHeight) { + this.each(function() { + // get element text + var $this = $(this); + var remainingHeight = $this.parent().parent().height(); + $this.parent().siblings().each(function () + { + if ($(this).is(":visible")) { + var h = $(this).height(); + remainingHeight = remainingHeight - h; + } + }); + + adjustedRemainingHeight = ((remainingHeight)/lineHeight>>0)*lineHeight + $this.parent().css({'height': adjustedRemainingHeight}); + $this.css({'height': "auto"}); + }); + + return this; + }; +}) (jQuery); + +/* + Fullscreen Carousel + + The following allows for an area at the top of the page that takes over the + entire browser height except for its top offset and an optional bottom + padding specified as a data attribute. + + HTML: + + <div class="fullscreen-carousel"> + <div class="fullscreen-carousel-content"> + <!-- content here --> + </div> + <div class="fullscreen-carousel-content"> + <!-- content here --> + </div> + + etc ... + + </div> + + Control over how the carousel takes over the screen can mostly be defined in + a css file. Setting min-height on the .fullscreen-carousel-content elements + will prevent them from shrinking to far vertically when the browser is very + short, and setting max-height on the .fullscreen-carousel itself will prevent + the area from becoming to long in the case that the browser is stretched very + tall. + + There is limited functionality for having multiple sections since that request + was removed, but it is possible to add .next-arrow and .prev-arrow elements to + scroll between multiple content areas. +*/ + +(function() { + $(document).ready(function() { + $('.fullscreen-carousel').each(function() { + initWidget(this); + }); + }); + + function initWidget(widget) { + var $widget = $(widget); + + var topOffset = $widget.offset().top; + var padBottom = parseInt($widget.data('paddingbottom')) || 0; + var maxHeight = 0; + var minHeight = 0; + var $content = $widget.find('.fullscreen-carousel-content'); + var $nextArrow = $widget.find('.next-arrow'); + var $prevArrow = $widget.find('.prev-arrow'); + var $curSection = $($content[0]); + + if ($content.length <= 1) { + $nextArrow.hide(); + $prevArrow.hide(); + } else { + $nextArrow.click(function() { + var index = ($content.index($curSection) + 1); + $curSection.hide(); + $curSection = $($content[index >= $content.length ? 0 : index]); + $curSection.show(); + }); + + $prevArrow.click(function() { + var index = ($content.index($curSection) - 1); + $curSection.hide(); + $curSection = $($content[index < 0 ? $content.length - 1 : 0]); + $curSection.show(); + }); + } + + // Just hide all content sections except first. + $content.each(function(index) { + if ($(this).height() > minHeight) minHeight = $(this).height(); + $(this).css({position: 'absolute', display: index > 0 ? 'none' : ''}); + }); + + // Register for changes to window size, and trigger. + $(window).resize(resizeWidget); + resizeWidget(); + + function resizeWidget() { + var height = $(window).height() - topOffset - padBottom; + $widget.width($(window).width()); + $widget.height(height < minHeight ? minHeight : + (maxHeight && height > maxHeight ? maxHeight : height)); + } + } +})(); + + + + + +/* + Tab Carousel + + The following allows tab widgets to be installed via the html below. Each + tab content section should have a data-tab attribute matching one of the + nav items'. Also each tab content section should have a width matching the + tab carousel. + + HTML: + + <div class="tab-carousel"> + <ul class="tab-nav"> + <li><a href="#" data-tab="handsets">Handsets</a> + <li><a href="#" data-tab="wearable">Wearable</a> + <li><a href="#" data-tab="tv">TV</a> + </ul> + + <div class="tab-carousel-content"> + <div data-tab="handsets"> + <!--Full width content here--> + </div> + + <div data-tab="wearable"> + <!--Full width content here--> + </div> + + <div data-tab="tv"> + <!--Full width content here--> + </div> + </div> + </div> + +*/ +(function() { + $(document).ready(function() { + $('.tab-carousel').each(function() { + initWidget(this); + }); + }); + + function initWidget(widget) { + var $widget = $(widget); + var $nav = $widget.find('.tab-nav'); + var $anchors = $nav.find('[data-tab]'); + var $li = $nav.find('li'); + var $contentContainer = $widget.find('.tab-carousel-content'); + var $tabs = $contentContainer.find('[data-tab]'); + var $curTab = $($tabs[0]); // Current tab is first tab. + var width = $widget.width(); + + // Setup nav interactivity. + $anchors.click(function(evt) { + evt.preventDefault(); + var query = '[data-tab=' + $(this).data('tab') + ']'; + transitionWidget($tabs.filter(query)); + }); + + // Add highlight for navigation on first item. + var $highlight = $('<div>').addClass('highlight') + .css({left:$li.position().left + 'px', width:$li.outerWidth() + 'px'}) + .appendTo($nav); + + // Store height since we will change contents to absolute. + $contentContainer.height($contentContainer.height()); + + // Absolutely position tabs so they're ready for transition. + $tabs.each(function(index) { + $(this).css({position: 'absolute', left: index > 0 ? width + 'px' : '0'}); + }); + + function transitionWidget($toTab) { + if (!$curTab.is($toTab)) { + var curIndex = $tabs.index($curTab[0]); + var toIndex = $tabs.index($toTab[0]); + var dir = toIndex > curIndex ? 1 : -1; + + // Animate content sections. + $toTab.css({left:(width * dir) + 'px'}); + $curTab.animate({left:(width * -dir) + 'px'}); + $toTab.animate({left:'0'}); + + // Animate navigation highlight. + $highlight.animate({left:$($li[toIndex]).position().left + 'px', + width:$($li[toIndex]).outerWidth() + 'px'}) + + // Store new current section. + $curTab = $toTab; + } + } + } +})(); diff --git a/build/tools/droiddoc/templates-cmsdk/assets/favicon.ico b/build/tools/droiddoc/templates-cmsdk/assets/favicon.ico Binary files differnew file mode 100755 index 0000000..f9afe75 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/favicon.ico diff --git a/build/tools/droiddoc/templates-cmsdk/assets/fullscreen.png b/build/tools/droiddoc/templates-cmsdk/assets/fullscreen.png Binary files differnew file mode 100644 index 0000000..01f971c --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/fullscreen.png diff --git a/build/tools/droiddoc/templates-cmsdk/assets/images/fullscreen.png b/build/tools/droiddoc/templates-cmsdk/assets/images/fullscreen.png Binary files differnew file mode 100644 index 0000000..01f971c --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/assets/images/fullscreen.png diff --git a/build/tools/droiddoc/templates-cmsdk/class.cs b/build/tools/droiddoc/templates-cmsdk/class.cs new file mode 100644 index 0000000..7aa99f9 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/class.cs @@ -0,0 +1,679 @@ +<?cs include:"doctype.cs" ?> +<?cs include:"macros.cs" ?> +<?cs include:"macros_override.cs" ?> +<html<?cs if:devsite ?> devsite<?cs /if ?>> +<?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 + if:reference ?> reference<?cs + /if ?><?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 ?>| <?cs /if ?><a href="#lattrs">XML Attrs</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:inhattrs ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#inhattrs">Inherited XML Attrs</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:subcount(class.enumConstants) ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#enumconstants">Enums</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:subcount(class.constants) ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#constants">Constants</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:inhconstants ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#inhconstants">Inherited Constants</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:subcount(class.fields) ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#lfields">Fields</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:inhfields ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#inhfields">Inherited Fields</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:subcount(class.ctors.public) ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#pubctors">Ctors</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:subcount(class.ctors.protected) ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#proctors">Protected Ctors</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:subcount(class.methods.public) ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#pubmethods">Methods</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:subcount(class.methods.protected) ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#promethods">Protected Methods</a> + <?cs set:linkcount = #1 ?> +<?cs /if ?> +<?cs if:inhmethods ?> + <?cs if:linkcount ?>| <?cs /if ?><a href="#inhmethods">Inherited Methods</a> +<?cs /if ?> +| <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 ?> +<?cs call:show_annotations_list(class) ?> + +</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"> <?cs if:(subcount(class.inheritance)-colspan) == i ?> ↳<?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) ?> + <?cs call:show_annotations_list(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) ?> + <?cs call:show_annotations_list(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) ?> + <?cs call:show_annotations_list(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) ?> + <?cs call:show_annotations_list(attr) ?> + </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) ?> + <?cs call:show_annotations_list(cl) ?> + </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) ?> </td> + <td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, cl.included) ?> </td> + <td class="jd-descrcol" width="100%"> + <?cs call:short_descr(field) ?> + <?cs call:show_annotations_list(field) ?> + </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:show_annotations_list(field) ?> + <?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:show_annotations_list(method) ?> + <?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:show_annotations_list(attr) ?> + <?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/build/tools/droiddoc/templates-cmsdk/classes.cs b/build/tools/droiddoc/templates-cmsdk/classes.cs new file mode 100644 index 0000000..476e7d2 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/classes.cs @@ -0,0 +1,53 @@ +<?cs include:"doctype.cs" ?> +<?cs include:"macros.cs" ?> +<?cs include:"macros_override.cs" ?> +<html<?cs if:devsite ?> devsite<?cs /if ?>> +<?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 + if:reference ?> reference<?cs + /if ?><?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 CyanogenMod Platform 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> <?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) ?> + <?cs call:show_annotations_list(cl) ?> + </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> diff --git a/build/tools/droiddoc/templates-cmsdk/components/masthead.cs b/build/tools/droiddoc/templates-cmsdk/components/masthead.cs new file mode 100755 index 0000000..ac71bcf --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/components/masthead.cs @@ -0,0 +1,10 @@ +<?cs def:custom_masthead() ?> + <div id="header"> + <div id="headerLeft"> + <a href="<?cs var:toroot ?>reference/packages.html" tabindex="-1"><img + src="<?cs var:toroot ?>assets/cid_smart.png" alt="CID" width="50" height="50"/> + <span id="masthead-title">CyanogenMod Platform SDK</span></a> + </div> + </div><!-- header --><?cs +/def ?> + diff --git a/build/tools/droiddoc/templates-cmsdk/customizations.cs b/build/tools/droiddoc/templates-cmsdk/customizations.cs new file mode 100644 index 0000000..dd00392 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/customizations.cs @@ -0,0 +1,516 @@ +<?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"> + +<?cs + include:"../../../../frameworks/base/docs/html/sdk/sdk_toc.cs" ?> + + + </div> + </div> <!-- end side-nav --> +<?cs /def ?><?cs + +def:no_nav() ?> + <div class="wrap clearfix" id="body-content"> +<?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"> +<?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"> + + +<?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:googleplay_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"> +<?cs include:"../../../../frameworks/base/docs/html/distribute/googleplay/googleplay_toc.cs" ?> + </div> + </div> <!-- end side-nav --> + <script> + $(document).ready(function() { + scrollIntoView("devdoc-nav"); + }); + </script> +<?cs /def ?><?cs + +def:essentials_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"> +<?cs include:"../../../../frameworks/base/docs/html/distribute/essentials/essentials_toc.cs" ?> + </div> + </div> <!-- end side-nav --> + <script> + $(document).ready(function() { + scrollIntoView("devdoc-nav"); + }); + </script> +<?cs /def ?><?cs + +def:users_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"> +<?cs include:"../../../../frameworks/base/docs/html/distribute/users/users_toc.cs" ?> + </div> + </div> <!-- end side-nav --> + <script> + $(document).ready(function() { + scrollIntoView("devdoc-nav"); + }); + </script> +<?cs /def ?><?cs + +def:engage_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"> +<?cs include:"../../../../frameworks/base/docs/html/distribute/engage/engage_toc.cs" ?> + </div> + </div> <!-- end side-nav --> + <script> + $(document).ready(function() { + scrollIntoView("devdoc-nav"); + }); + </script> +<?cs /def ?><?cs + +def:analyze_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"> +<?cs include:"../../../../frameworks/base/docs/html/distribute/analyze/analyze_toc.cs" ?> + </div> + </div> <!-- end side-nav --> + <script> + $(document).ready(function() { + scrollIntoView("devdoc-nav"); + }); + </script> +<?cs /def ?><?cs + +def:monetize_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"> +<?cs include:"../../../../frameworks/base/docs/html/distribute/monetize/monetize_toc.cs" ?> + </div> + </div> <!-- end side-nav --> + <script> + $(document).ready(function() { + scrollIntoView("devdoc-nav"); + }); + </script> +<?cs /def ?><?cs + +def:disttools_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"> +<?cs include:"../../../../frameworks/base/docs/html/distribute/tools/disttools_toc.cs" ?> + </div> + </div> <!-- end side-nav --> + <script> + $(document).ready(function() { + scrollIntoView("devdoc-nav"); + }); + </script> +<?cs /def ?><?cs + +def:stories_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"> +<?cs include:"../../../../frameworks/base/docs/html/distribute/stories/stories_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"> + +<?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"> + + +<?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"> + +<?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:samples_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"> + +<?cs + include:"../../../../frameworks/base/docs/html/samples/samples_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"> + +<?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"> + +<?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:wear_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"> + +<?cs + include:"../../../../frameworks/base/docs/html/wear/wear_toc.cs" ?> + + + </div> + </div> <!-- end side-nav --> + <script> + $(document).ready(function() { + scrollIntoView("devdoc-nav"); + }); + </script> +<?cs /def ?> + +<?cs +def:preview_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"> + <?cs + include:"../../../../frameworks/base/docs/html/preview/preview_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"> + <div id="api-nav-header"> + <div id="api-level-toggle"> + <label for="apiLevelCheckbox" class="disabled" + title="Select your target API level to dim unavailable APIs">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">CyanogenMod 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("Annotations", class.package.annotations) ?> + <?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("Annotations", package.annotations) ?> + <?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:nonavpage ?><?cs + call:no_nav() ?><?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:samples ?><?cs + call:samples_nav() ?><?cs + elif:distribute ?><?cs + if:googleplay ?><?cs + call:googleplay_nav() ?><?cs + elif:essentials ?><?cs + call:essentials_nav() ?><?cs + elif:users ?><?cs + call:users_nav() ?><?cs + elif:engage ?><?cs + call:engage_nav() ?><?cs + elif:monetize ?><?cs + call:monetize_nav() ?><?cs + elif:analyze ?><?cs + call:analyze_nav() ?><?cs + elif:disttools ?><?cs + call:disttools_nav() ?><?cs + elif:stories ?><?cs + call:stories_nav() ?><?cs + /if ?><?cs + elif:about ?><?cs + call:about_nav() ?><?cs + elif:distribute ?><?cs + call:distribute_nav() ?><?cs + elif:wear ?><?cs + call:wear_nav() ?><?cs + elif:preview ?><?cs + call:preview_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> | + <a href="<?cs var:toroot ?>legal.html">Legal</a> | + <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 && !reference.gcm && !reference.gms ?> + Android <?cs var:sdk.version ?> r<?cs var:sdk.rel.id ?> — <?cs + /if ?> +<script src="<?cs var:toroot ?>timestamp.js" type="text/javascript"></script> +<script>document.write(BUILD_TIMESTAMP)</script> +<?cs /def ?> + diff --git a/build/tools/droiddoc/templates-cmsdk/head_tag.cs b/build/tools/droiddoc/templates-cmsdk/head_tag.cs new file mode 100644 index 0000000..9f79f54 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/head_tag.cs @@ -0,0 +1,86 @@ +<head> +<?cs + ####### If building devsite, add some meta data needed for when generating the top nav ######### ?> +<?cs + if:devsite ?><?cs + if:guide||develop||training||reference||tools||sdk||google||samples + ?><meta name="top_category" value="develop" /><?cs + elif:google + ?><meta name="top_category" value="google" /><?cs + elif:reference && !(reference.gms || reference.gcm) + ?><meta name="top_category" value="css-fullscreen" /><?cs + /if ?> + <?cs + /if +?><?cs + # END if/else devsite ?> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta name="viewport" content="width=<?cs + if:page.viewport_width ?><?cs + var:page.viewport_width ?><?cs + else ?>device-width<?cs /if ?>" /> +<?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+Condensed"> +<link rel="stylesheet" href="<?cs +if:android.whichdoc != 'online' ?>http:<?cs +/if ?>//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold" + title="roboto"> +<link href="<?cs var:toroot ?>assets/css/default.css?v=5" rel="stylesheet" type="text/css"> + +<?cs if:reference && !(reference.gms || reference.gcm || preview) ?> +<!-- 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> +<?cs +if:devsite + ?><script src="<?cs var:toroot ?>_static/js/android_3p-bundle.js" type="text/javascript"></script><?cs +else + ?><script src="<?cs var:toroot ?>assets/js/android_3p-bundle.js" type="text/javascript"></script><?cs +/if ?><?cs + if:page.customHeadTag ?> +<?cs var:page.customHeadTag ?><?cs + /if ?> +<script type="text/javascript"> + var toRoot = "<?cs var:toroot ?>"; + var metaTags = [<?cs var:meta.tags ?>]; + var devsite = <?cs if:devsite ?>true<?cs else ?>false<?cs /if ?>; +</script> +<script src="<?cs var:toroot ?>assets/js/docs.js?v=3" type="text/javascript"></script> + +<?cs if:helpoutsWidget ?> +<script type="text/javascript" src="https://helpouts.google.com/ps/res/embed.js" defer async + data-helpouts-embed data-helpouts-vertical="programming" + data-helpouts-tags="<?cs var:page.tags ?>" data-helpouts-prefix="android" + data-helpouts-standalone="true"></script> +<?cs /if ?> + +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + + ga('create', 'UA-5831155-1', 'android.com'); + ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker); + ga('send', 'pageview'); + ga('universal.send', 'pageview'); // Send page view for new tracker. +</script> + +</head> diff --git a/build/tools/droiddoc/templates-cmsdk/macros_override.cs b/build/tools/droiddoc/templates-cmsdk/macros_override.cs new file mode 100644 index 0000000..0a94598 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/macros_override.cs @@ -0,0 +1,36 @@ +<?cs # Create a comma separated list of annotations on obj that were in showAnnotations in Doclava ?> +<?cs # pre is an HTML string to start the list, post is an HTML string to close the list ?> +<?cs # for example call:show_annotations_list(cl, "<td>Annotations: ", "</td>") ?> +<?cs # if obj has nothing on obj.showAnnotations, nothing will be output ?> +<?cs def:show_annotations_list(obj) ?> + <?cs each:anno = obj.showAnnotations ?> + <?cs if:first(anno) ?> + <span class='annotation-message'> + Included in documentation by the annotations: + <?cs /if ?> + @<?cs var:anno.type.label ?> + <?cs if:last(anno) == 0 ?> + , + <?cs /if ?> + <?cs if:last(anno)?> + </span> + <?cs /if ?> + <?cs /each ?> +<?cs /def ?> + +<?cs # Override default class_link_table to display annotations ?> +<?cs def:class_link_table(classes) ?> + <?cs set:count = #1 ?> + <table class="jd-sumtable-expando"> + <?cs each:cl=classes ?> + <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.type.since ?>" > + <td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td> + <td class="jd-descrcol" width="100%"> + <?cs call:short_descr(cl) ?> + <?cs call:show_annotations_list(cl) ?> + </td> + </tr> + <?cs set:count = count + #1 ?> + <?cs /each ?> + </table> +<?cs /def ?>
\ No newline at end of file diff --git a/build/tools/droiddoc/templates-cmsdk/package.cs b/build/tools/droiddoc/templates-cmsdk/package.cs new file mode 100644 index 0000000..2225565 --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/package.cs @@ -0,0 +1,65 @@ +<?cs include:"doctype.cs" ?> +<?cs include:"macros.cs" ?> +<?cs include:"macros_override.cs" ?> +<html<?cs if:devsite ?> devsite<?cs /if ?>> +<?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 + if:reference ?> reference<?cs + /if ?><?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("Annotations", package.annotations) ?> +<?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/build/tools/droiddoc/templates-cmsdk/packages.cs b/build/tools/droiddoc/templates-cmsdk/packages.cs new file mode 100644 index 0000000..5056d3a --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/packages.cs @@ -0,0 +1,45 @@ +<?cs include:"doctype.cs" ?> +<?cs include:"macros.cs" ?> +<html<?cs if:devsite ?> devsite<?cs /if ?>> +<?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 + if:reference ?> reference<?cs + /if ?><?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/build/tools/droiddoc/templates-cmsdk/timestamp.cs b/build/tools/droiddoc/templates-cmsdk/timestamp.cs new file mode 100644 index 0000000..4bf502a --- /dev/null +++ b/build/tools/droiddoc/templates-cmsdk/timestamp.cs @@ -0,0 +1 @@ +var BUILD_TIMESTAMP = "<?cs var:page.now ?>"; |