am 7db3e8a5: am 9890fe24: am c3921656: Add templates support for dynamic content and sticky nav bar.
* commit '7db3e8a518ee51ba1a511948de71675e3457ff13': Add templates support for dynamic content and sticky nav bar.
This commit is contained in:
commit
8fdd4a0b56
File diff suppressed because it is too large
Load Diff
|
@ -170,7 +170,7 @@ body {
|
|||
max-width: 100%;
|
||||
}
|
||||
|
||||
#nav-x .wrap,
|
||||
#header-wrapper #nav-x div.wrap,
|
||||
#searchResults.wrap {
|
||||
max-width:100%;
|
||||
}
|
||||
|
@ -184,9 +184,17 @@ body {
|
|||
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 {
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 164 B |
Binary file not shown.
After Width: | Height: | Size: 202 B |
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
After Width: | Height: | Size: 198 B |
|
@ -167,10 +167,12 @@ $(document).ready(function() {
|
|||
// highlight Design tab
|
||||
if ($("body").hasClass("design")) {
|
||||
$("#header li.design a").addClass("selected");
|
||||
$("#sticky-header").addClass("design");
|
||||
|
||||
// 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") {
|
||||
|
@ -195,12 +197,34 @@ $(document).ready(function() {
|
|||
// 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 == "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 + '"]');
|
||||
|
@ -385,70 +409,6 @@ false; // navigate across topic boundaries only in design docs
|
|||
});
|
||||
|
||||
|
||||
// Set up fixed navbar
|
||||
var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll
|
||||
$(window).scroll(function(event) {
|
||||
if ($('#side-nav').length == 0) return;
|
||||
if (event.target.nodeName == "DIV") {
|
||||
// Dump scroll event if the target is a DIV, because that means the event is coming
|
||||
// from a scrollable div and so there's no need to make adjustments to our layout
|
||||
return;
|
||||
}
|
||||
var scrollTop = $(window).scrollTop();
|
||||
var headerHeight = $('#header').outerHeight();
|
||||
var subheaderHeight = $('#nav-x').outerHeight();
|
||||
var searchResultHeight = $('#searchResults').is(":visible") ?
|
||||
$('#searchResults').outerHeight() : 0;
|
||||
var totalHeaderHeight = headerHeight + subheaderHeight + searchResultHeight;
|
||||
// we set the navbar fixed when the scroll position is beyond the height of the site header...
|
||||
var navBarShouldBeFixed = scrollTop > totalHeaderHeight;
|
||||
// ... except if the document content is shorter than the sidenav height.
|
||||
// (this is necessary to avoid crazy behavior on OSX Lion due to overscroll bouncing)
|
||||
if ($("#doc-col").height() < $("#side-nav").height()) {
|
||||
navBarShouldBeFixed = false;
|
||||
}
|
||||
|
||||
var scrollLeft = $(window).scrollLeft();
|
||||
// When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match
|
||||
if (navBarIsFixed && (scrollLeft != prevScrollLeft)) {
|
||||
updateSideNavPosition();
|
||||
prevScrollLeft = scrollLeft;
|
||||
}
|
||||
|
||||
// Don't continue if the header is sufficently far away
|
||||
// (to avoid intensive resizing that slows scrolling)
|
||||
if (navBarIsFixed && navBarShouldBeFixed) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (navBarIsFixed != navBarShouldBeFixed) {
|
||||
if (navBarShouldBeFixed) {
|
||||
// make it fixed
|
||||
var width = $('#devdoc-nav').width();
|
||||
$('#devdoc-nav')
|
||||
.addClass('fixed')
|
||||
.css({'width':width+'px'})
|
||||
.prependTo('#body-content');
|
||||
// add neato "back to top" button
|
||||
$('#devdoc-nav a.totop').css({'display':'block','width':$("#nav").innerWidth()+'px'});
|
||||
|
||||
// update the sidenaav position for side scrolling
|
||||
updateSideNavPosition();
|
||||
} else {
|
||||
// make it static again
|
||||
$('#devdoc-nav')
|
||||
.removeClass('fixed')
|
||||
.css({'width':'auto','margin':''})
|
||||
.prependTo('#side-nav');
|
||||
$('#devdoc-nav a.totop').hide();
|
||||
}
|
||||
navBarIsFixed = navBarShouldBeFixed;
|
||||
}
|
||||
|
||||
resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance
|
||||
});
|
||||
|
||||
|
||||
var navBarLeftPos;
|
||||
if ($('#devdoc-nav').length) {
|
||||
setNavBarLeftPos();
|
||||
|
@ -593,6 +553,28 @@ function initExpandableNavItems(rootTag) {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
/** 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)
|
||||
|
@ -705,9 +687,8 @@ function resizeNav(delay) {
|
|||
// Then figure out based on scroll position whether the header is visible
|
||||
var windowHeight = $window.height();
|
||||
var scrollTop = $window.scrollTop();
|
||||
var headerHeight = $('#header').outerHeight();
|
||||
var subheaderHeight = $('#nav-x').outerHeight();
|
||||
var headerVisible = (scrollTop < (headerHeight + subheaderHeight));
|
||||
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.
|
||||
|
@ -717,7 +698,7 @@ function resizeNav(delay) {
|
|||
// Depending on whether the header is visible, set the side nav's height.
|
||||
if (headerVisible) {
|
||||
// The sidenav height grows as the header goes off screen
|
||||
navHeight = windowHeight - (headerHeight + subheaderHeight - scrollTop) - topMargin;
|
||||
navHeight = windowHeight - (headerHeight - scrollTop) - topMargin;
|
||||
} else {
|
||||
// Once header is off screen, the nav height is almost full window height
|
||||
navHeight = windowHeight - topMargin;
|
||||
|
@ -905,8 +886,115 @@ function writeCookie(cookie, val, section, expiration) {
|
|||
|
||||
|
||||
|
||||
var stickyTop;
|
||||
/* 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
|
||||
*/
|
||||
(function() {
|
||||
$(document).ready(function() {
|
||||
|
||||
setStickyTop();
|
||||
var sticky = false;
|
||||
var hiding = false;
|
||||
var $stickyEl = $('#sticky-header');
|
||||
var $menuEl = $('.menu-container');
|
||||
|
||||
var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll
|
||||
|
||||
$(window).scroll(function() {
|
||||
// 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;
|
||||
}
|
||||
|
||||
// Don't continue if the header is sufficently far away
|
||||
// (to avoid intensive resizing that slows scrolling)
|
||||
if (sticky && shouldBeSticky) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Account for horizontal scroll
|
||||
var scrollLeft = $(window).scrollLeft();
|
||||
// When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match
|
||||
if (navBarIsFixed && (scrollLeft != prevScrollLeft)) {
|
||||
updateSideNavPosition();
|
||||
prevScrollLeft = scrollLeft;
|
||||
}
|
||||
|
||||
// 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
|
||||
});
|
||||
|
||||
// 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'});
|
||||
});
|
||||
|
||||
resizeNav(); // must resize once loading is finished
|
||||
});
|
||||
|
||||
})();
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1724,6 +1812,7 @@ function search_changed(e, kd, toroot)
|
|||
$('.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
|
||||
|
@ -2278,13 +2367,13 @@ function submit_search() {
|
|||
var query = document.getElementById('search_autocomplete').value;
|
||||
location.hash = 'q=' + query;
|
||||
loadSearchResults();
|
||||
$("#searchResults").slideDown('slow');
|
||||
$("#searchResults").slideDown('slow', setStickyTop);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function hideResults() {
|
||||
$("#searchResults").slideUp();
|
||||
$("#searchResults").slideUp('fast', setStickyTop);
|
||||
$(".search .close").addClass("hide");
|
||||
location.hash = '';
|
||||
|
||||
|
@ -2401,7 +2490,7 @@ google.setOnLoadCallback(function(){
|
|||
return;
|
||||
} else {
|
||||
// first time loading search results for this page
|
||||
$('#searchResults').slideDown('slow');
|
||||
$('#searchResults').slideDown('slow', setStickyTop);
|
||||
$(".search .close").removeClass("hide");
|
||||
loadSearchResults();
|
||||
}
|
||||
|
@ -2409,19 +2498,22 @@ google.setOnLoadCallback(function(){
|
|||
|
||||
// when an event on the browser history occurs (back, forward, load) requery hash and do search
|
||||
$(window).hashchange( function(){
|
||||
// Exit if the hash isn't a search query or there's an error in the query
|
||||
// If 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();
|
||||
}
|
||||
// Adjust the scroll position to account for sticky header
|
||||
$(window).scrollTop($(window).scrollTop() - 60);
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise, we have a search to do
|
||||
var query = decodeURI(getQuery(location.hash));
|
||||
searchControl.execute(query);
|
||||
$('#searchResults').slideDown('slow');
|
||||
$('#searchResults').slideDown('slow', setStickyTop);
|
||||
$("#search_autocomplete").focus();
|
||||
$(".search .close").removeClass("hide");
|
||||
|
||||
|
@ -3233,3 +3325,560 @@ function showSamples() {
|
|||
$("#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
|
||||
};
|
||||
|
||||
// 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) {
|
||||
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) {
|
||||
//keep url clean for matching and offline mode handling
|
||||
var urlPrefix = resources[i].url.indexOf("//") > -1 ? "" : toRoot;
|
||||
var $card = $('<a>')
|
||||
.attr('href', urlPrefix + 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) */
|
||||
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
|
||||
for (var i = 0; i < sections.length; ++i) {
|
||||
if (!sections[i].sections || !sections[i].sections.length) {
|
||||
//keep url clean for matching and offline mode handling
|
||||
urlPrefix = sections[i].url.indexOf("//") > -1 ? "" : toRoot;
|
||||
// Render it as a resource card
|
||||
|
||||
sectionResources.push(
|
||||
$('<a>')
|
||||
.addClass('resource-card section-card')
|
||||
.attr('href', urlPrefix + 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) {
|
||||
//keep url clean for matching and offline mode handling
|
||||
urlPrefix = resources[i].url.indexOf("//") > -1 ? "" : toRoot;
|
||||
var $card = $('<a>')
|
||||
.addClass('resource-card related-card')
|
||||
.attr('href', urlPrefix + resources[i].url)
|
||||
.decorateResourceCard(resources[i],plusone);
|
||||
|
||||
cards.push($card[0]);
|
||||
}
|
||||
|
||||
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]));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/* 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+$/,'');
|
||||
console.log("cardsize is " + cardSize);
|
||||
// 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];
|
||||
//keep url clean for matching and offline mode handling
|
||||
urlPrefix = resource.url.indexOf("//") > -1 ? "" : toRoot;
|
||||
var $card = $('<a>')
|
||||
.addClass('resource-card resource-card-' + cardSize + ' resource-card-' + resource.type)
|
||||
.attr('href', urlPrefix + resource.url);
|
||||
|
||||
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.decorateResourceCard(resource,plusone)
|
||||
.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 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($) {
|
||||
/* Simple jquery function to create dom for a standard resource card */
|
||||
$.fn.decorateResourceCard = function(resource,plusone) {
|
||||
var section = resource.group || resource.type;
|
||||
var imgUrl;
|
||||
if (resource.image) {
|
||||
//keep url clean for matching and offline mode handling
|
||||
var urlPrefix = resource.image.indexOf("//") > -1 ? "" : toRoot;
|
||||
imgUrl = urlPrefix + resource.image;
|
||||
}
|
||||
//add linkout logic here. check url or type, assign a class, map to css :after
|
||||
$('<div>')
|
||||
.addClass('card-bg')
|
||||
.css('background-image', 'url(' + (imgUrl || toRoot + 'assets/images/resource-card-default-android.jpg') + ')')
|
||||
.appendTo(this);
|
||||
if (!plusone) {
|
||||
$('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : ''))
|
||||
.append($('<div>').addClass('section').text(section))
|
||||
.append($('<div>').addClass('title').html(resource.title))
|
||||
.append($('<div>').addClass('description ellipsis')
|
||||
.append($('<div>').addClass('text').html(resource.summary))
|
||||
.append($('<div>').addClass('util')))
|
||||
.appendTo(this);
|
||||
} else {
|
||||
$('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : ''))
|
||||
.append($('<div>').addClass('section').text(section))
|
||||
.append($('<div>').addClass('title').html(resource.title))
|
||||
.append($('<div>').addClass('description ellipsis')
|
||||
.append($('<div>').addClass('text').html(resource.summary))
|
||||
.append($('<div>').addClass('util')
|
||||
.append($('<div>').addClass('g-plusone')
|
||||
.attr('data-size', 'small')
|
||||
.attr('data-align', 'right')
|
||||
.attr('data-href', resource.url))))
|
||||
.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;
|
||||
};
|
||||
})(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 ()
|
||||
{
|
||||
var h = $(this).height();
|
||||
remainingHeight = remainingHeight - h;
|
||||
});
|
||||
|
||||
adjustedRemainingHeight = ((remainingHeight)/lineHeight>>0)*lineHeight
|
||||
$this.parent().css({'height': adjustedRemainingHeight});
|
||||
$this.css({'height': "auto"});
|
||||
});
|
||||
|
||||
return this;
|
||||
};
|
||||
}) (jQuery);
|
||||
|
|
|
@ -3,228 +3,129 @@
|
|||
<?cs call:wear_masthead() ?>
|
||||
<?cs else ?>
|
||||
<a name="top"></a>
|
||||
<?cs if:!devsite ?><?cs # leave out the global header for devsite; it's in devsite template ?>
|
||||
<!-- Header -->
|
||||
<?cs if:!devsite ?><?cs # leave out the global header for devsite; it is in devsite template ?>
|
||||
<!-- Header -->
|
||||
<div id="header-wrapper">
|
||||
<div id="header">
|
||||
<div class="wrap" id="header-wrap">
|
||||
<div class="col-3 logo">
|
||||
<div class="wrap" id="header-wrap">
|
||||
<div class="col-3 logo">
|
||||
<a href="<?cs var:toroot ?>index.html">
|
||||
<img src="<?cs var:toroot ?>assets/images/dac_logo.png"
|
||||
srcset="<?cs var:toroot ?>assets/images/dac_logo@2x.png 2x"
|
||||
width="123" height="25" alt="Android Developers" />
|
||||
</a>
|
||||
<div class="btn-quicknav" id="btn-quicknav">
|
||||
<a href="#" class="arrow-inactive">Quicknav</a>
|
||||
<a href="#" class="arrow-active">Quicknav</a>
|
||||
<a href="#" class="arrow-inactive">Quicknav</a>
|
||||
<a href="#" class="arrow-active">Quicknav</a>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="nav-x col-9">
|
||||
<li class="design">
|
||||
<a href="<?cs var:toroot ?>design/index.html"
|
||||
zh-tw-lang="設計"
|
||||
zh-cn-lang="设计"
|
||||
ru-lang="Проектирование"
|
||||
ko-lang="디자인"
|
||||
ja-lang="設計"
|
||||
es-lang="Diseñar"
|
||||
>Design</a></li>
|
||||
<li class="develop"><a href="<?cs var:toroot ?>develop/index.html"
|
||||
zh-tw-lang="開發"
|
||||
zh-cn-lang="开发"
|
||||
ru-lang="Разработка"
|
||||
ko-lang="개발"
|
||||
ja-lang="開発"
|
||||
es-lang="Desarrollar"
|
||||
>Develop</a></li>
|
||||
<li class="distribute last"><a href="<?cs var:toroot ?>distribute/index.html"
|
||||
zh-tw-lang="發佈"
|
||||
zh-cn-lang="分发"
|
||||
ru-lang="Распространение"
|
||||
ko-lang="배포"
|
||||
ja-lang="配布"
|
||||
es-lang="Distribuir"
|
||||
>Distribute</a></li>
|
||||
</ul>
|
||||
|
||||
<!-- New Search -->
|
||||
<div class="menu-container">
|
||||
<div class="moremenu">
|
||||
<div id="more-btn"></div>
|
||||
</div>
|
||||
<div class="morehover" id="moremenu">
|
||||
<div class="top"></div>
|
||||
<div class="mid">
|
||||
<div class="header">Links</div>
|
||||
<ul>
|
||||
<li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li>
|
||||
<li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
|
||||
<li><a href="<?cs var:toroot ?>about/index.html">About Android</a></li>
|
||||
</ul>
|
||||
<div class="header">Android Sites</div>
|
||||
<ul>
|
||||
<li><a href="http://www.android.com">Android.com</a></li>
|
||||
<li class="active"><a>Android Developers</a></li>
|
||||
<li><a href="http://source.android.com">Android Open Source Project</a></li>
|
||||
</ul>
|
||||
|
||||
<?cs # Include language switcher only in online docs ?>
|
||||
<?cs if:android.whichdoc == "online" ?>
|
||||
<div class="header">Language</div>
|
||||
<div id="language" class="locales">
|
||||
<select name="language" onChange="changeLangPref(this.value, true)">
|
||||
<option value="en">English</option>
|
||||
<option value="es">Español</option>
|
||||
<option value="ja">日本語</option>
|
||||
<option value="ko">한국어</option>
|
||||
<option value="ru">Русский</option>
|
||||
<option value="zh-cn">中文 (中国)</option>
|
||||
<option value="zh-tw">中文 (台灣)</option>
|
||||
</select>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
loadLangPref();
|
||||
//-->
|
||||
</script>
|
||||
<?cs /if ?>
|
||||
<?cs # End of lang switcher ?>
|
||||
|
||||
|
||||
<br class="clearfix" />
|
||||
</div>
|
||||
<div class="bottom"></div>
|
||||
</div>
|
||||
<div class="search" id="search-container">
|
||||
<div class="search-inner">
|
||||
<div id="search-btn"></div>
|
||||
<div class="left"></div>
|
||||
<form onsubmit="return submit_search()">
|
||||
<input id="search_autocomplete" type="text" value="" autocomplete="off" name="q"
|
||||
onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)"
|
||||
onkeydown="return search_changed(event, true, '<?cs var:toroot ?>')"
|
||||
onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
||||
</form>
|
||||
<div class="right"></div>
|
||||
<a class="close hide">close</a>
|
||||
<div class="left"></div>
|
||||
<div class="right"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search_filtered_wrapper reference">
|
||||
<div class="suggest-card reference no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search_filtered_wrapper docs">
|
||||
<div class="suggest-card dummy no-display"> </div>
|
||||
<div class="suggest-card develop no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
<div class="child-card guides no-display">
|
||||
</div>
|
||||
<div class="child-card training no-display">
|
||||
</div>
|
||||
<div class="child-card samples no-display">
|
||||
</div>
|
||||
</div>
|
||||
<div class="suggest-card design no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="suggest-card distribute no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /New Search>
|
||||
|
||||
|
||||
<!-- Expanded quicknav -->
|
||||
<div id="quicknav" class="col-9">
|
||||
<ul>
|
||||
<li class="design">
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>design/index.html">Get Started</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/style/index.html">Style</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/patterns/index.html">Patterns</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/building-blocks/index.html">Building Blocks</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/downloads/index.html">Downloads</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/videos/index.html">Videos</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="develop">
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>training/index.html"
|
||||
zh-tw-lang="訓練課程"
|
||||
zh-cn-lang="培训"
|
||||
ru-lang="Курсы"
|
||||
ko-lang="교육"
|
||||
ja-lang="トレーニング"
|
||||
es-lang="Capacitación"
|
||||
>Training</a></li>
|
||||
<li><a href="<?cs var:toroot ?>guide/index.html"
|
||||
zh-tw-lang="API 指南"
|
||||
zh-cn-lang="API 指南"
|
||||
ru-lang="Руководства по API"
|
||||
ko-lang="API 가이드"
|
||||
ja-lang="API ガイド"
|
||||
es-lang="Guías de la API"
|
||||
>API Guides</a></li>
|
||||
<li><a href="<?cs var:toroot ?>reference/packages.html"
|
||||
zh-tw-lang="參考資源"
|
||||
zh-cn-lang="参考"
|
||||
ru-lang="Справочник"
|
||||
ko-lang="참조문서"
|
||||
ja-lang="リファレンス"
|
||||
es-lang="Referencia"
|
||||
>Reference</a></li>
|
||||
<li><a href="<?cs var:toroot ?>tools/index.html"
|
||||
zh-tw-lang="相關工具"
|
||||
zh-cn-lang="工具"
|
||||
ru-lang="Инструменты"
|
||||
ko-lang="도구"
|
||||
ja-lang="ツール"
|
||||
es-lang="Herramientas"
|
||||
>Tools</a>
|
||||
<ul><li><a href="<?cs var:toroot ?>sdk/index.html">Get the SDK</a></li></ul>
|
||||
</li>
|
||||
<li><a href="<?cs var:toroot ?>google/index.html">Google Services</a>
|
||||
</li>
|
||||
<?cs if:android.hasSamples ?>
|
||||
<li><a href="<?cs var:toroot ?>samples/index.html">Samples</a>
|
||||
</li>
|
||||
<?cs /if ?>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="distribute last">
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>distribute/index.html">Google Play</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/publish/index.html">Publishing</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/promote/index.html">Promoting</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/quality/index.html">App Quality</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/index.html">Spotlight</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/open.html">Open Distribution</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /Expanded quicknav -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Header -->
|
||||
|
||||
|
||||
<div id="searchResults" class="wrap" style="display:none;">
|
||||
<h2 id="searchTitle">Results</h2>
|
||||
<div id="leftSearchControl" class="search-control">Loading...</div>
|
||||
</div>
|
||||
|
||||
|
||||
<ul class="nav-x col-9">
|
||||
<li class="design">
|
||||
<a href="<?cs var:toroot ?>design/index.html"
|
||||
zh-tw-lang="設計"
|
||||
zh-cn-lang="设计"
|
||||
ru-lang="Проектирование"
|
||||
ko-lang="디자인"
|
||||
ja-lang="設計"
|
||||
es-lang="Diseñar"
|
||||
>Design</a></li>
|
||||
<li class="develop"><a href="<?cs var:toroot ?>develop/index.html"
|
||||
zh-tw-lang="開發"
|
||||
zh-cn-lang="开发"
|
||||
ru-lang="Разработка"
|
||||
ko-lang="개발"
|
||||
ja-lang="開発"
|
||||
es-lang="Desarrollar"
|
||||
>Develop</a></li>
|
||||
<li class="distribute last"><a href="<?cs var:toroot ?>distribute/<?cs
|
||||
if:android.whichdoc == "offline" ?>googleplay/<?cs /if ?>index.html"
|
||||
zh-tw-lang="發佈"
|
||||
zh-cn-lang="分发"
|
||||
ru-lang="Распространение"
|
||||
ko-lang="배포"
|
||||
ja-lang="配布"
|
||||
es-lang="Distribuir"
|
||||
>Distribute</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<?cs # ADD SEARCH AND MENU ?>
|
||||
<?cs call:header_search_widget() ?>
|
||||
|
||||
|
||||
<!-- Expanded quicknav -->
|
||||
<div id="quicknav" class="col-9">
|
||||
<ul>
|
||||
<li class="design">
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>design/index.html">Get Started</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/style/index.html">Style</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/patterns/index.html">Patterns</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/building-blocks/index.html">Building Blocks</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/downloads/index.html">Downloads</a></li>
|
||||
<li><a href="<?cs var:toroot ?>design/videos/index.html">Videos</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="develop">
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>training/index.html"
|
||||
zh-tw-lang="訓練課程"
|
||||
zh-cn-lang="培训"
|
||||
ru-lang="Курсы"
|
||||
ko-lang="교육"
|
||||
ja-lang="トレーニング"
|
||||
es-lang="Capacitación"
|
||||
>Training</a></li>
|
||||
<li><a href="<?cs var:toroot ?>guide/index.html"
|
||||
zh-tw-lang="API 指南"
|
||||
zh-cn-lang="API 指南"
|
||||
ru-lang="Руководства по API"
|
||||
ko-lang="API 가이드"
|
||||
ja-lang="API ガイド"
|
||||
es-lang="Guías de la API"
|
||||
>API Guides</a></li>
|
||||
<li><a href="<?cs var:toroot ?>reference/packages.html"
|
||||
zh-tw-lang="參考資源"
|
||||
zh-cn-lang="参考"
|
||||
ru-lang="Справочник"
|
||||
ko-lang="참조문서"
|
||||
ja-lang="リファレンス"
|
||||
es-lang="Referencia"
|
||||
>Reference</a></li>
|
||||
<li><a href="<?cs var:toroot ?>tools/index.html"
|
||||
zh-tw-lang="相關工具"
|
||||
zh-cn-lang="工具"
|
||||
ru-lang="Инструменты"
|
||||
ko-lang="도구"
|
||||
ja-lang="ツール"
|
||||
es-lang="Herramientas"
|
||||
>Tools</a>
|
||||
<ul><li><a href="<?cs var:toroot ?>sdk/index.html">Get the SDK</a></li></ul>
|
||||
</li>
|
||||
<li><a href="<?cs var:toroot ?>google/index.html">Google Services</a>
|
||||
</li>
|
||||
<?cs if:android.hasSamples ?>
|
||||
<li><a href="<?cs var:toroot ?>samples/index.html">Samples</a>
|
||||
</li>
|
||||
<?cs /if ?>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="distribute last">
|
||||
<ul>
|
||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/index.html">Google Play</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/essentials/index.html">Essentials</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/users/index.html">Get Users</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/engage/index.html">Engage & Retain</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/monetize/index.html">Monetize</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/tools/index.html">Tools & Reference</a></li>
|
||||
<li><a href="<?cs var:toroot ?>distribute/stories/index.html">Developer Stories</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div><!-- /Expanded quicknav -->
|
||||
</div><!-- end header-wrap.wrap -->
|
||||
</div><!-- end header -->
|
||||
|
||||
<?cs if:training || guide || reference || tools || develop || google || samples ?>
|
||||
<!-- Secondary x-nav -->
|
||||
<div id="nav-x">
|
||||
|
@ -236,7 +137,7 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
|||
ru-lang="Курсы"
|
||||
ko-lang="교육"
|
||||
ja-lang="トレーニング"
|
||||
es-lang="Capacitación"
|
||||
es-lang="Capacitación"
|
||||
>Training</a></li>
|
||||
<li class="guide"><a href="<?cs var:toroot ?>guide/index.html"
|
||||
zh-tw-lang="API 指南"
|
||||
|
@ -244,7 +145,7 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
|||
ru-lang="Руководства по API"
|
||||
ko-lang="API 가이드"
|
||||
ja-lang="API ガイド"
|
||||
es-lang="Guías de la API"
|
||||
es-lang="Guías de la API"
|
||||
>API Guides</a></li>
|
||||
<li class="reference"><a href="<?cs var:toroot ?>reference/packages.html"
|
||||
zh-tw-lang="參考資源"
|
||||
|
@ -252,7 +153,7 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
|||
ru-lang="Справочник"
|
||||
ko-lang="참조문서"
|
||||
ja-lang="リファレンス"
|
||||
es-lang="Referencia"
|
||||
es-lang="Referencia"
|
||||
>Reference</a></li>
|
||||
<li class="tools"><a href="<?cs var:toroot ?>tools/index.html"
|
||||
zh-tw-lang="相關工具"
|
||||
|
@ -272,144 +173,98 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
|||
<?cs /if ?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /Sendondary x-nav -->
|
||||
|
||||
<?cs elif:distribute || googleplay || essentials || users || engage || monetize || disttools || stories ?>
|
||||
<!-- Secondary distribute x-nav -->
|
||||
<div id="nav-x">
|
||||
<div class="wrap">
|
||||
<ul class="nav-x distribute">
|
||||
<li class="googleplay"><a href="<?cs var:toroot ?>distribute/googleplay/index.html"
|
||||
>Google Play</a></li>
|
||||
<li class="essentials"><a href="<?cs var:toroot ?>distribute/essentials/index.html"
|
||||
>Essentials</a></li>
|
||||
<li class="users"><a href="<?cs var:toroot ?>distribute/users/index.html"
|
||||
>Get Users</a></li>
|
||||
<li class="engage"><a href="<?cs var:toroot ?>distribute/engage/index.html"
|
||||
>Engage & Retain</a></li>
|
||||
<li class="monetize"><a href="<?cs var:toroot ?>distribute/monetize/index.html"
|
||||
>Monetize</a>
|
||||
</li>
|
||||
<li class="disttools"><a href="<?cs var:toroot ?>distribute/tools/index.html"
|
||||
>Tools</a>
|
||||
</li>
|
||||
<li class="stories"><a href="<?cs var:toroot ?>distribute/stories/index.html"
|
||||
>Stories</a>
|
||||
</li>
|
||||
</ul>
|
||||
<a href="https://play.google.com/apps/publish/" class="developer-console-btn">Developer Console</a>
|
||||
</div> <!-- /Secondary distribute x-nav -->
|
||||
</div>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs /if ?>
|
||||
<?cs # end if/else !devsite ?>
|
||||
<div id="searchResults" class="wrap" style="display:none;">
|
||||
<h2 id="searchTitle">Results</h2>
|
||||
<div id="leftSearchControl" class="search-control">Loading...</div>
|
||||
</div>
|
||||
</div> <!--end header-wrapper -->
|
||||
|
||||
<?cs /if ?><?cs # end if/else wear ?>
|
||||
<?cs
|
||||
<div id="sticky-header">
|
||||
<div>
|
||||
<a class="logo" href="#top"></a>
|
||||
<a class="top" href="#top"></a>
|
||||
<ul class="breadcrumb">
|
||||
<?cs # More <li> elements added here with javascript ?>
|
||||
<?cs if:!section.landing ?><li class="current"><?cs var:page.title ?></li><?cs
|
||||
/if ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?cs /if ?><?cs # end if/else !devsite ?>
|
||||
<?cs /if ?><?cs # end if/else wear ?><?cs
|
||||
/def ?>
|
||||
|
||||
|
||||
<?cs def:wear_masthead() ?>
|
||||
<a name="top"></a>
|
||||
|
||||
<!-- Header -->
|
||||
<div id="header">
|
||||
<div class="wrap" id="header-wrap">
|
||||
<div class="col-3 logo-wear">
|
||||
<a href="<?cs var:toroot ?>wear/index.html">
|
||||
<img src="<?cs var:toroot ?>wear/images/android-wear.png" height="16" alt="Android Wear" />
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-8" style="margin:0"><h1 style="margin:1px 0 0 20px;padding:0;line-height:16px;
|
||||
color:#666;font-weight:100;font-size:24px;">Developer Preview</h1></div>
|
||||
|
||||
|
||||
<!-- New Search -->
|
||||
<div class="menu-container">
|
||||
<div class="moremenu">
|
||||
<div id="more-btn"></div>
|
||||
</div>
|
||||
<div class="morehover" id="moremenu">
|
||||
<div class="top"></div>
|
||||
<div class="mid">
|
||||
<div class="header">Links</div>
|
||||
<ul>
|
||||
<li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li>
|
||||
<li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
|
||||
<li><a href="<?cs var:toroot ?>about/index.html">About Android</a></li>
|
||||
</ul>
|
||||
<div class="header">Android Sites</div>
|
||||
<ul>
|
||||
<li><a href="http://www.android.com">Android.com</a></li>
|
||||
<li class="active"><a>Android Developers</a></li>
|
||||
<li><a href="http://source.android.com">Android Open Source Project</a></li>
|
||||
</ul>
|
||||
|
||||
<?cs # Include language switcher only in online docs ?>
|
||||
<?cs if:android.whichdoc == "online" ?>
|
||||
<div class="header">Language</div>
|
||||
<div id="language" class="locales">
|
||||
<select name="language" onChange="changeLangPref(this.value, true)">
|
||||
<option value="en">English</option>
|
||||
<option value="es">Español</option>
|
||||
<option value="ja">日本語</option>
|
||||
<option value="ko">한국어</option>
|
||||
<option value="ru">Русский</option>
|
||||
<option value="zh-cn">中文 (中国)</option>
|
||||
<option value="zh-tw">中文 (台灣)</option>
|
||||
</select>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
loadLangPref();
|
||||
//-->
|
||||
</script>
|
||||
<?cs /if ?>
|
||||
<?cs # End of lang switcher ?>
|
||||
|
||||
|
||||
<br class="clearfix" />
|
||||
</div><!-- end mid -->
|
||||
<div class="bottom"></div>
|
||||
</div><!-- end morehover -->
|
||||
|
||||
<div class="search" id="search-container">
|
||||
<div class="search-inner">
|
||||
<div id="search-btn"></div>
|
||||
<div class="left"></div>
|
||||
<form onsubmit="return submit_search()">
|
||||
<input id="search_autocomplete" type="text" value="" autocomplete="off" name="q"
|
||||
onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)"
|
||||
onkeydown="return search_changed(event, true, '<?cs var:toroot ?>')"
|
||||
onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
||||
</form>
|
||||
<div class="right"></div>
|
||||
<a class="close hide">close</a>
|
||||
<div class="left"></div>
|
||||
<div class="right"></div>
|
||||
</div>
|
||||
</div><!-- end search -->
|
||||
|
||||
<div class="search_filtered_wrapper reference">
|
||||
<div class="suggest-card reference no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search_filtered_wrapper docs">
|
||||
<div class="suggest-card dummy no-display"> </div>
|
||||
<div class="suggest-card develop no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
<div class="child-card guides no-display">
|
||||
<!-- Header -->
|
||||
<div id="header-wrapper">
|
||||
<div id="header">
|
||||
<div class="wrap" id="header-wrap">
|
||||
<div class="col_3 logo wear-logo">
|
||||
<a href="<?cs var:toroot ?>wear/index.html">
|
||||
<img src="<?cs var:toroot ?>wear/images/android-wear.png" height="16" alt="Android Wear" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="child-card training no-display">
|
||||
</div>
|
||||
<div class="child-card samples no-display">
|
||||
</div>
|
||||
</div>
|
||||
<div class="suggest-card design no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="suggest-card distribute no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
</div><!-- end search_filtered_wrapper -->
|
||||
<div class="col-8" style="margin:0"><h1 style="margin:1px 0 0 20px;padding:0;line-height:16px;
|
||||
color:#666;font-weight:100;font-size:24px;">Developer Preview</h1></div>
|
||||
|
||||
</div>
|
||||
<!-- end menu_container -->
|
||||
<?cs # ADD SEARCH AND MENU ?>
|
||||
<?cs call:header_search_widget() ?>
|
||||
|
||||
|
||||
</div><!-- end header-wrap -->
|
||||
</div>
|
||||
<!-- /Header -->
|
||||
</div><!-- end header-wrap -->
|
||||
</div><!-- /Header -->
|
||||
|
||||
|
||||
<div id="searchResults" class="wrap" style="display:none;">
|
||||
<h2 id="searchTitle">Results</h2>
|
||||
<div id="leftSearchControl" class="search-control">Loading...</div>
|
||||
</div>
|
||||
</div> <!--end header-wrapper -->
|
||||
|
||||
<?cs
|
||||
<div id="sticky-header">
|
||||
<div>
|
||||
<a class="logo" href="#top"></a>
|
||||
<a class="top" href="#top"></a>
|
||||
<ul class="breadcrumb">
|
||||
<?cs # More <li> elements added here with javascript ?>
|
||||
<?cs if:!section.landing ?><li class="current"><?cs var:page.title ?></li><?cs
|
||||
/if ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?cs
|
||||
/def ?>
|
||||
|
|
|
@ -7,7 +7,6 @@ def:sdk_nav() ?>
|
|||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/sdk/sdk_toc.cs" ?>
|
||||
|
@ -15,33 +14,16 @@ def:sdk_nav() ?>
|
|||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<?cs /def ?>
|
||||
<?cs
|
||||
def:resources_tab_nav() ?>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
def:no_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<a
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
<?cs /def ?><?cs
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/resources/resources_toc.cs" ?>
|
||||
|
||||
|
||||
</div>
|
||||
</div> <!-- end side-nav -->
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
<?cs
|
||||
def:tools_nav() ?>
|
||||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/tools/tools_toc.cs" ?>
|
||||
|
||||
|
@ -59,7 +41,6 @@ def:training_nav() ?>
|
|||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
|
||||
<?cs
|
||||
|
@ -73,14 +54,110 @@ def:training_nav() ?>
|
|||
scrollIntoView("devdoc-nav");
|
||||
});
|
||||
</script>
|
||||
<?cs /def ?>
|
||||
<?cs
|
||||
<?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: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">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/guide/guide_toc.cs" ?>
|
||||
|
@ -99,7 +176,6 @@ def:design_nav() ?>
|
|||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
|
||||
<?cs
|
||||
|
@ -119,7 +195,6 @@ def:distribute_nav() ?>
|
|||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/distribute/distribute_toc.cs" ?>
|
||||
|
@ -139,7 +214,6 @@ 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">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/samples/samples_toc.cs" ?>
|
||||
|
@ -159,7 +233,6 @@ def:google_nav() ?>
|
|||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/google/google_toc.cs" ?>
|
||||
|
@ -183,7 +256,6 @@ def:about_nav() ?>
|
|||
<div class="wrap clearfix" id="body-content">
|
||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||
<div id="devdoc-nav" class="scroll-pane">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/about/about_toc.cs" ?>
|
||||
|
@ -204,7 +276,6 @@ 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">
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
|
||||
<?cs
|
||||
include:"../../../../frameworks/base/docs/html/wear/wear_toc.cs" ?>
|
||||
|
@ -227,8 +298,6 @@ def:default_left_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">
|
||||
|
||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||
<div id="api-nav-header">
|
||||
<div id="api-level-toggle">
|
||||
<label for="apiLevelCheckbox" class="disabled"
|
||||
|
@ -329,10 +398,111 @@ def:default_left_nav() ?>
|
|||
<?cs
|
||||
/def ?>
|
||||
|
||||
|
||||
<?cs
|
||||
def:header_search_widget() ?>
|
||||
<div class="menu-container">
|
||||
<div class="moremenu">
|
||||
<div id="more-btn"></div>
|
||||
</div>
|
||||
<div class="morehover" id="moremenu">
|
||||
<div class="top"></div>
|
||||
<div class="mid">
|
||||
<div class="header">Links</div>
|
||||
<ul>
|
||||
<li><a href="https://play.google.com/apps/publish/" target="_googleplay">Google Play Developer Console</a></li>
|
||||
<li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
|
||||
<li><a href="<?cs var:toroot ?>about/index.html">About Android</a></li>
|
||||
</ul>
|
||||
<div class="header">Android Sites</div>
|
||||
<ul>
|
||||
<li><a href="http://www.android.com">Android.com</a></li>
|
||||
<li class="active"><a>Android Developers</a></li>
|
||||
<li><a href="http://source.android.com">Android Open Source Project</a></li>
|
||||
</ul>
|
||||
|
||||
<?cs # Include language switcher only in online docs ?>
|
||||
<?cs if:android.whichdoc == "online" ?>
|
||||
<div class="header">Language</div>
|
||||
<div id="language" class="locales">
|
||||
<select name="language" onChange="changeLangPref(this.value, true)">
|
||||
<option value="en">English</option>
|
||||
<option value="es">Español</option>
|
||||
<option value="ja">日本語</option>
|
||||
<option value="ko">한국어</option>
|
||||
<option value="ru">Русский</option>
|
||||
<option value="zh-cn">中文 (中国)</option>
|
||||
<option value="zh-tw">中文 (台灣)</option>
|
||||
</select>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
loadLangPref();
|
||||
//-->
|
||||
</script>
|
||||
<?cs /if ?>
|
||||
<?cs # End of lang switcher ?>
|
||||
<br class="clearfix" />
|
||||
</div><!-- end 'mid' -->
|
||||
<div class="bottom"></div>
|
||||
</div><!-- end 'moremenu' -->
|
||||
|
||||
<div class="search" id="search-container">
|
||||
<div class="search-inner">
|
||||
<div id="search-btn"></div>
|
||||
<div class="left"></div>
|
||||
<form onsubmit="return submit_search()">
|
||||
<input id="search_autocomplete" type="text" value="" autocomplete="off" name="q"
|
||||
onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)"
|
||||
onkeydown="return search_changed(event, true, '<?cs var:toroot ?>')"
|
||||
onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
||||
</form>
|
||||
<div class="right"></div>
|
||||
<a class="close hide">close</a>
|
||||
<div class="left"></div>
|
||||
<div class="right"></div>
|
||||
</div><!-- end search-inner -->
|
||||
</div><!-- end search-container -->
|
||||
|
||||
<div class="search_filtered_wrapper reference">
|
||||
<div class="suggest-card reference no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search_filtered_wrapper docs">
|
||||
<div class="suggest-card dummy no-display"> </div>
|
||||
<div class="suggest-card develop no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
<div class="child-card guides no-display">
|
||||
</div>
|
||||
<div class="child-card training no-display">
|
||||
</div>
|
||||
<div class="child-card samples no-display">
|
||||
</div>
|
||||
</div>
|
||||
<div class="suggest-card design no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="suggest-card distribute no-display">
|
||||
<ul class="search_filtered">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- end menu-container (search and menu widget) -->
|
||||
<?cs /def ?>
|
||||
|
||||
|
||||
|
||||
<?cs
|
||||
def:custom_left_nav() ?><?cs
|
||||
if:fullpage ?><?cs
|
||||
call:fullpage() ?><?cs
|
||||
if:fullpage ?><?cs
|
||||
call:fullpage() ?><?cs
|
||||
elif:nonavpage ?><?cs
|
||||
call:no_nav() ?><?cs
|
||||
elif:guide ?><?cs
|
||||
call:guide_nav() ?><?cs
|
||||
elif:design ?><?cs
|
||||
|
@ -345,17 +515,31 @@ def:custom_left_nav() ?><?cs
|
|||
call:google_nav() ?><?cs
|
||||
elif:samples ?><?cs
|
||||
call:samples_nav() ?><?cs
|
||||
elif:more ?><?cs
|
||||
call:dist_more_nav() ?><?cs
|
||||
elif:distribute ?><?cs
|
||||
call:distribute_nav() ?><?cs
|
||||
elif:about ?><?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: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
|
||||
else ?><?cs
|
||||
call:default_left_nav() ?> <?cs
|
||||
/if ?><?cs
|
||||
else ?><?cs
|
||||
call:default_left_nav() ?> <?cs
|
||||
/if ?><?cs
|
||||
/def ?>
|
||||
|
||||
<?cs # appears at the bottom of every page ?><?cs
|
||||
|
|
|
@ -2,19 +2,36 @@
|
|||
<?cs include:"macros.cs" ?>
|
||||
<html<?cs if:devsite ?> devsite<?cs /if ?>>
|
||||
<?cs include:"head_tag.cs" ?>
|
||||
<body class="gc-documentation <?cs if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?>
|
||||
<?cs if:(guide||develop||training||reference||tools||sdk||samples) ?>develop<?cs if:guide ?> guide<?cs /if ?><?cs if:samples ?> samples<?cs /if ?><?cs
|
||||
<body class="gc-documentation
|
||||
|
||||
<?cs
|
||||
if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?><?cs
|
||||
if:(guide||develop||training||reference||tools||sdk||samples) ?>develop<?cs
|
||||
if:guide ?> guide<?cs /if ?><?cs
|
||||
if:samples ?> samples<?cs /if ?><?cs
|
||||
elif:(distribute||googleplay||essentials||users||engage||monetize||disttools||stories)
|
||||
?>distribute<?cs
|
||||
if:googleplay ?> googleplay<?cs /if ?><?cs
|
||||
if:essentials ?> essentials<?cs /if ?><?cs
|
||||
if:users ?> users<?cs /if ?><?cs
|
||||
if:engage ?> engage<?cs /if ?><?cs
|
||||
if:monetize ?> monetize<?cs /if ?><?cs
|
||||
if:disttools ?> disttools<?cs /if ?><?cs
|
||||
if:stories ?> stories<?cs /if ?><?cs
|
||||
elif:about ?>about<?cs
|
||||
elif:design ?>design<?cs
|
||||
elif:distribute ?>distribute<?cs
|
||||
/if ?><?cs
|
||||
if:page.trainingcourse ?> trainingcourse<?cs /if ?>" itemscope itemtype="http://schema.org/Article">
|
||||
<?cs include:"header.cs" ?>
|
||||
/if ?><?cs
|
||||
if:page.trainingcourse ?> trainingcourse<?cs
|
||||
/if ?>" itemscope itemtype="http://schema.org/Article"><?cs
|
||||
include:"header.cs" ?>
|
||||
|
||||
<div <?cs if:fullpage
|
||||
?>class="fullpage"<?cs elif:design||tools||about||sdk||distribute
|
||||
?>class="col-13" id="doc-col"<?cs else
|
||||
?>class="col-12" id="doc-col"<?cs /if ?> >
|
||||
<div <?cs
|
||||
if:fullpage
|
||||
?>class="fullpage"<?cs
|
||||
elif:(design||tools||about||sdk||googleplay||essentials||users||monetize||disttools) && !nonavpage
|
||||
?>class="col-13" id="doc-col"<?cs
|
||||
elif:!nonavpage
|
||||
?>class="col-12" id="doc-col"<?cs /if ?> >
|
||||
|
||||
<?cs if:(design||training||walkthru) && !page.trainingcourse && !page.article ?><?cs # header logic for docs that provide previous/next buttons ?>
|
||||
<?cs if:header.hide ?>
|
||||
|
@ -74,6 +91,7 @@
|
|||
<?cs /if ?><?cs # end if training ?>
|
||||
</div>
|
||||
<?cs /if ?>
|
||||
|
||||
<?cs elif:samplesProjectIndex ?>
|
||||
<div id="api-info-block">
|
||||
<div class="sum-details-links">
|
||||
|
@ -83,7 +101,10 @@
|
|||
</div><!-- end sum-details-links -->
|
||||
</div><!-- end breadcurmb block -->
|
||||
<h1 itemprop="name"><?cs var:projectDir ?></h1>
|
||||
|
||||
<?cs else ?>
|
||||
|
||||
|
||||
<?cs if:(!fullpage && !header.hide) ?>
|
||||
<?cs if:page.landing ?><?cs # header logic for docs that are landing pages ?>
|
||||
<div class="landing-banner">
|
||||
|
@ -181,8 +202,6 @@
|
|||
<?cs include:"footer.cs" ?>
|
||||
</div><!-- end doc-content -->
|
||||
|
||||
<?cs include:"trailer.cs" ?>
|
||||
|
||||
<!-- Start of Tag -->
|
||||
<script type="text/javascript">
|
||||
var axel = Math.random() + "";
|
||||
|
@ -193,6 +212,15 @@ document.write('<iframe src="https://2507573.fls.doubleclick.net/activityi;src=2
|
|||
<iframe src="https://2507573.fls.doubleclick.net/activityi;src=2507573;type=other026;cat=googl348;ord=1?" width="1" height="1" frameborder="0" style="display:none"></iframe>
|
||||
</noscript>
|
||||
<!-- End of Tag -->
|
||||
|
||||
|
||||
<?cs include:"trailer.cs" ?>
|
||||
<script src="https://developer.android.com/ytblogger_lists_unified.js" type="text/javascript"></script>
|
||||
<script src="<?cs var:toroot ?>jd_lists_unified.js" type="text/javascript"></script>
|
||||
<script src="<?cs var:toroot ?>jd_extras.js" type="text/javascript"></script>
|
||||
<script src="<?cs var:toroot ?>jd_collections.js" type="text/javascript"></script>
|
||||
<script src="<?cs var:toroot ?>jd_tag_helpers.js" type="text/javascript"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
@ -31,7 +31,13 @@
|
|||
|
||||
<!-- STYLESHEETS -->
|
||||
<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">
|
||||
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" rel="stylesheet" type="text/css">
|
||||
|
||||
<?cs if:reference && !(reference.gms || reference.gcm || wear) ?>
|
||||
|
|
Loading…
Reference in New Issue