Add basic support for rendering dynamic content on pages.
Change-Id: If3ba4f71771a01043ec6d544e3b4a9222ba35daf
This commit is contained in:
File diff suppressed because it is too large
Load Diff
BIN
tools/droiddoc/templates-sdk-dyn/assets/images/breadcrumb.png
Normal file
BIN
tools/droiddoc/templates-sdk-dyn/assets/images/breadcrumb.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 164 B |
BIN
tools/droiddoc/templates-sdk-dyn/assets/images/link-out.png
Normal file
BIN
tools/droiddoc/templates-sdk-dyn/assets/images/link-out.png
Normal file
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
|
// highlight Design tab
|
||||||
if ($("body").hasClass("design")) {
|
if ($("body").hasClass("design")) {
|
||||||
$("#header li.design a").addClass("selected");
|
$("#header li.design a").addClass("selected");
|
||||||
|
$("#sticky-header").addClass("design");
|
||||||
|
|
||||||
// highlight Develop tab
|
// highlight Develop tab
|
||||||
} else if ($("body").hasClass("develop") || $("body").hasClass("google")) {
|
} else if ($("body").hasClass("develop") || $("body").hasClass("google")) {
|
||||||
$("#header li.develop a").addClass("selected");
|
$("#header li.develop a").addClass("selected");
|
||||||
|
$("#sticky-header").addClass("develop");
|
||||||
// In Develop docs, also highlight appropriate sub-tab
|
// In Develop docs, also highlight appropriate sub-tab
|
||||||
var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
|
var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
|
||||||
if (rootDir == "training") {
|
if (rootDir == "training") {
|
||||||
@@ -195,8 +197,26 @@ $(document).ready(function() {
|
|||||||
// highlight Distribute tab
|
// highlight Distribute tab
|
||||||
} else if ($("body").hasClass("distribute")) {
|
} else if ($("body").hasClass("distribute")) {
|
||||||
$("#header li.distribute a").addClass("selected");
|
$("#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");
|
||||||
|
}
|
||||||
|
}
|
||||||
// set global variable so we can highlight the sidenav a bit later (such as for google reference)
|
// set global variable so we can highlight the sidenav a bit later (such as for google reference)
|
||||||
// and highlight the sidenav
|
// and highlight the sidenav
|
||||||
mPagePath = pagePath;
|
mPagePath = pagePath;
|
||||||
@@ -906,6 +926,86 @@ function writeCookie(cookie, val, section, expiration) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Displays sticky nav bar on pages when dac header scrolls out of view
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
// Sticky nav position
|
||||||
|
var stickyTop = $('#header-wrapper').outerHeight();
|
||||||
|
var sticky = false;
|
||||||
|
var hiding = false;
|
||||||
|
var $stickyEl = $('#sticky-header');
|
||||||
|
var $menuEl = $('.menu-container');
|
||||||
|
//var scrollThrottle = -1;
|
||||||
|
var lastScroll = 0;
|
||||||
|
var autoScrolling = false;
|
||||||
|
|
||||||
|
$(window).scroll(function() {
|
||||||
|
var top = $(window).scrollTop();
|
||||||
|
|
||||||
|
if (sticky && top < stickyTop) {
|
||||||
|
sticky = false;
|
||||||
|
hiding = true;
|
||||||
|
$stickyEl.css({'opacity': 0});
|
||||||
|
setTimeout(function() {
|
||||||
|
$menuEl.removeClass('sticky-menu');
|
||||||
|
$stickyEl.hide();
|
||||||
|
hiding = false;
|
||||||
|
}, 250);
|
||||||
|
} else if (!sticky && top >= stickyTop) {
|
||||||
|
sticky = true;
|
||||||
|
$stickyEl.show();
|
||||||
|
$menuEl.addClass('sticky-menu');
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
$stickyEl.css({'opacity': 1});
|
||||||
|
}, 10);
|
||||||
|
|
||||||
|
// If its a jump then make sure to modify the scroll because of the
|
||||||
|
// sticky nav
|
||||||
|
if (!autoScrolling && Math.abs(top - lastScroll > 100)) {
|
||||||
|
autoScrolling = true;
|
||||||
|
$('body,html').animate({scrollTop:(top = top - 60)}, '250', 'swing', function() { autoScrolling = false; });
|
||||||
|
}
|
||||||
|
} else if (hiding && top < 15) {
|
||||||
|
$menuEl.removeClass('sticky-menu');
|
||||||
|
$stickyEl.hide();
|
||||||
|
hiding = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastScroll = top;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 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'});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Auto scroll anchors and account for sticky nav
|
||||||
|
$('a[href^=#]').click(function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
var tmp = $.attr(this, 'href').substr(1);
|
||||||
|
var el = document.getElementById(tmp) ||
|
||||||
|
((tmp = document.getElementsByName(tmp)).length ?
|
||||||
|
tmp[0] : null);
|
||||||
|
|
||||||
|
if (el) {
|
||||||
|
var top = $(el).offset().top - 60;
|
||||||
|
autoScrolling = true;
|
||||||
|
$('body,html').animate({scrollTop:top}, '500', 'swing', function() { autoScrolling = false; });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1724,6 +1824,7 @@ function search_changed(e, kd, toroot)
|
|||||||
$('.suggest-card').hide();
|
$('.suggest-card').hide();
|
||||||
if ($("#searchResults").is(":hidden") && (search.value != "")) {
|
if ($("#searchResults").is(":hidden") && (search.value != "")) {
|
||||||
// if results aren't showing (and text not empty), return true to allow search to execute
|
// if results aren't showing (and text not empty), return true to allow search to execute
|
||||||
|
$('body,html').animate({scrollTop:0}, '500', 'swing', function() { autoScrolling = false; });
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
// otherwise, results are already showing, so allow ajax to auto refresh the results
|
// otherwise, results are already showing, so allow ajax to auto refresh the results
|
||||||
@@ -3233,3 +3334,603 @@ function showSamples() {
|
|||||||
$("#samples").append($ul);
|
$("#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);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Might remove this, but adds ellipsis to card descriptions rather
|
||||||
|
// than just cutting them off, not sure if it performs well
|
||||||
|
$('.card-info .text').ellipsis();
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
Three types of resource layouts:
|
||||||
|
Flow - Uses a fixed row-height flow using float left style.
|
||||||
|
Carousel - Single card slideshow all same dimension absoute.
|
||||||
|
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();
|
||||||
|
|
||||||
|
$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]);
|
||||||
|
|
||||||
|
$('<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 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)[0]
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
cards.push(
|
||||||
|
$('<div>')
|
||||||
|
.addClass('resource-card section-card-menu')
|
||||||
|
.decorateResourceSection(sections[i])[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]);
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
while (i < resources.length) {
|
||||||
|
var cardSize = cardSizes[j++ % cardSizes.length];
|
||||||
|
cardSize = cardSize.replace(/^\s+|\s+$/,'');
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
.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) {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
$('<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($('<div>').addClass('description')
|
||||||
|
.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) {
|
||||||
|
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];
|
||||||
|
$('<li>')
|
||||||
|
.append($('<a>').attr('href', subResource.url)
|
||||||
|
.append($('<div>').addClass('title').html(subResource.title))
|
||||||
|
.append($('<div>').addClass('description')
|
||||||
|
.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);
|
||||||
|
|
||||||
|
|
||||||
|
(function($) {
|
||||||
|
$.fn.ellipsis = function(options) {
|
||||||
|
|
||||||
|
// default option
|
||||||
|
var defaults = {
|
||||||
|
'row' : 1, // show rows
|
||||||
|
'onlyFullWords': true, // set to true to avoid cutting the text in the middle of a word
|
||||||
|
'char' : '...', // ellipsis
|
||||||
|
'callback': function() {},
|
||||||
|
'position': 'tail' // middle, tail
|
||||||
|
};
|
||||||
|
|
||||||
|
options = $.extend(defaults, options);
|
||||||
|
|
||||||
|
this.each(function() {
|
||||||
|
// get element text
|
||||||
|
var $this = $(this);
|
||||||
|
|
||||||
|
var targetHeight = $this.height();
|
||||||
|
$this.css({'height': 'auto'});
|
||||||
|
var text = $this.text();
|
||||||
|
var origText = text;
|
||||||
|
var origLength = origText.length;
|
||||||
|
var origHeight = $this.height();
|
||||||
|
|
||||||
|
if (origHeight <= targetHeight) {
|
||||||
|
$this.text(text);
|
||||||
|
options.callback.call(this);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var start = 1, length = 0;
|
||||||
|
var end = text.length;
|
||||||
|
|
||||||
|
if(options.position === 'tail') {
|
||||||
|
while (start < end) { // Binary search for max length
|
||||||
|
length = Math.ceil((start + end) / 2);
|
||||||
|
|
||||||
|
$this.text(text.slice(0, length) + options['char']);
|
||||||
|
|
||||||
|
if ($this.height() <= targetHeight) {
|
||||||
|
start = length;
|
||||||
|
} else {
|
||||||
|
end = length - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
text = text.slice(0, start);
|
||||||
|
|
||||||
|
if (options.onlyFullWords) {
|
||||||
|
// remove fragment of the last word together with possible soft-hyphen chars
|
||||||
|
text = text.replace(/[\u00AD\w\uac00-\ud7af]+$/, '');
|
||||||
|
}
|
||||||
|
text += options['char'];
|
||||||
|
|
||||||
|
}else if(options.position === 'middle') {
|
||||||
|
|
||||||
|
var sliceLength = 0;
|
||||||
|
while (start < end) { // Binary search for max length
|
||||||
|
length = Math.ceil((start + end) / 2);
|
||||||
|
sliceLength = Math.max(origLength - length, 0);
|
||||||
|
|
||||||
|
$this.text(
|
||||||
|
origText.slice(0, Math.floor((origLength - sliceLength) / 2)) +
|
||||||
|
options['char'] +
|
||||||
|
origText.slice(Math.floor((origLength + sliceLength) / 2), origLength)
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($this.height() <= targetHeight) {
|
||||||
|
start = length;
|
||||||
|
} else {
|
||||||
|
end = length - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sliceLength = Math.max(origLength - start, 0);
|
||||||
|
var head = origText.slice(0, Math.floor((origLength - sliceLength) / 2));
|
||||||
|
var tail = origText.slice(Math.floor((origLength + sliceLength) / 2), origLength);
|
||||||
|
|
||||||
|
if (options.onlyFullWords) {
|
||||||
|
// remove fragment of the last or first word together with possible soft-hyphen characters
|
||||||
|
head = head.replace(/[\u00AD\w\uac00-\ud7af]+$/, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
text = head + options['char'] + tail;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this.text(text);
|
||||||
|
options.callback.call(this);
|
||||||
|
});
|
||||||
|
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
}) (jQuery);
|
@@ -1,7 +1,7 @@
|
|||||||
<?cs def:custom_masthead() ?>
|
<?cs def:custom_masthead() ?>
|
||||||
<a name="top"></a>
|
<a name="top"></a>
|
||||||
<?cs if:!devsite ?><?cs # leave out the global header for devsite; it's in devsite template ?>
|
<?cs if:!devsite ?><?cs # leave out the global header for devsite; it is in devsite template ?>
|
||||||
<!-- Header -->
|
<!-- Header --><div id="header-wrapper">
|
||||||
<div id="header">
|
<div id="header">
|
||||||
<div class="wrap" id="header-wrap">
|
<div class="wrap" id="header-wrap">
|
||||||
<div class="col-3 logo">
|
<div class="col-3 logo">
|
||||||
@@ -31,7 +31,8 @@
|
|||||||
ja-lang="開発"
|
ja-lang="開発"
|
||||||
es-lang="Desarrollar"
|
es-lang="Desarrollar"
|
||||||
>Develop</a></li>
|
>Develop</a></li>
|
||||||
<li class="distribute last"><a href="<?cs var:toroot ?>distribute/index.html"
|
<li class="distribute last"><a href="<?cs var:toroot ?>distribute/<?cs
|
||||||
|
if:android.whichdoc == "offline" ?>googleplay/<?cs /if ?>index.html"
|
||||||
zh-tw-lang="發佈"
|
zh-tw-lang="發佈"
|
||||||
zh-cn-lang="分发"
|
zh-cn-lang="分发"
|
||||||
ru-lang="Распространение"
|
ru-lang="Распространение"
|
||||||
@@ -51,7 +52,7 @@
|
|||||||
<div class="mid">
|
<div class="mid">
|
||||||
<div class="header">Links</div>
|
<div class="header">Links</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li>
|
<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="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>about/index.html">About Android</a></li>
|
<li><a href="<?cs var:toroot ?>about/index.html">About Android</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -139,87 +140,79 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
|||||||
<!-- /New Search>
|
<!-- /New Search>
|
||||||
|
|
||||||
|
|
||||||
<!-- Expanded quicknav -->
|
<!-- Expanded quicknav -->
|
||||||
<div id="quicknav" class="col-9">
|
<div id="quicknav" class="col-9">
|
||||||
<ul>
|
<ul>
|
||||||
<li class="design">
|
<li class="design">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<?cs var:toroot ?>design/index.html">Get Started</a></li>
|
<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/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/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/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/downloads/index.html">Downloads</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>design/videos/index.html">Videos</a></li>
|
<li><a href="<?cs var:toroot ?>design/videos/index.html">Videos</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="develop">
|
<li class="develop">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<?cs var:toroot ?>training/index.html"
|
<li><a href="<?cs var:toroot ?>training/index.html"
|
||||||
zh-tw-lang="訓練課程"
|
zh-tw-lang="訓練課程"
|
||||||
zh-cn-lang="培训"
|
zh-cn-lang="培训"
|
||||||
ru-lang="Курсы"
|
ru-lang="Курсы"
|
||||||
ko-lang="교육"
|
ko-lang="교육"
|
||||||
ja-lang="トレーニング"
|
ja-lang="トレーニング"
|
||||||
es-lang="Capacitación"
|
es-lang="Capacitación"
|
||||||
>Training</a></li>
|
>Training</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>guide/index.html"
|
<li><a href="<?cs var:toroot ?>guide/index.html"
|
||||||
zh-tw-lang="API 指南"
|
zh-tw-lang="API 指南"
|
||||||
zh-cn-lang="API 指南"
|
zh-cn-lang="API 指南"
|
||||||
ru-lang="Руководства по API"
|
ru-lang="Руководства по API"
|
||||||
ko-lang="API 가이드"
|
ko-lang="API 가이드"
|
||||||
ja-lang="API ガイド"
|
ja-lang="API ガイド"
|
||||||
es-lang="Guías de la API"
|
es-lang="Guías de la API"
|
||||||
>API Guides</a></li>
|
>API Guides</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>reference/packages.html"
|
<li><a href="<?cs var:toroot ?>reference/packages.html"
|
||||||
zh-tw-lang="參考資源"
|
zh-tw-lang="參考資源"
|
||||||
zh-cn-lang="参考"
|
zh-cn-lang="参考"
|
||||||
ru-lang="Справочник"
|
ru-lang="Справочник"
|
||||||
ko-lang="참조문서"
|
ko-lang="참조문서"
|
||||||
ja-lang="リファレンス"
|
ja-lang="リファレンス"
|
||||||
es-lang="Referencia"
|
es-lang="Referencia"
|
||||||
>Reference</a></li>
|
>Reference</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>tools/index.html"
|
<li><a href="<?cs var:toroot ?>tools/index.html"
|
||||||
zh-tw-lang="相關工具"
|
zh-tw-lang="相關工具"
|
||||||
zh-cn-lang="工具"
|
zh-cn-lang="工具"
|
||||||
ru-lang="Инструменты"
|
ru-lang="Инструменты"
|
||||||
ko-lang="도구"
|
ko-lang="도구"
|
||||||
ja-lang="ツール"
|
ja-lang="ツール"
|
||||||
es-lang="Herramientas"
|
es-lang="Herramientas"
|
||||||
>Tools</a>
|
>Tools</a>
|
||||||
<ul><li><a href="<?cs var:toroot ?>sdk/index.html">Get the SDK</a></li></ul>
|
<ul><li><a href="<?cs var:toroot ?>sdk/index.html">Get the SDK</a></li></ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="<?cs var:toroot ?>google/index.html">Google Services</a>
|
<li><a href="<?cs var:toroot ?>google/index.html">Google Services</a>
|
||||||
</li>
|
</li>
|
||||||
<?cs if:android.hasSamples ?>
|
<?cs if:android.hasSamples ?>
|
||||||
<li><a href="<?cs var:toroot ?>samples/index.html">Samples</a>
|
<li><a href="<?cs var:toroot ?>samples/index.html">Samples</a>
|
||||||
</li>
|
</li>
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="distribute last">
|
<li class="distribute last">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="<?cs var:toroot ?>distribute/index.html">Google Play</a></li>
|
<li><a href="<?cs var:toroot ?>distribute/googleplay/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/essentials/index.html">Essentials</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/promote/index.html">Promoting</a></li>
|
<li><a href="<?cs var:toroot ?>distribute/users/index.html">Get Users</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/quality/index.html">App Quality</a></li>
|
<li><a href="<?cs var:toroot ?>distribute/engage/index.html">Engage & Retain</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/index.html">Spotlight</a></li>
|
<li><a href="<?cs var:toroot ?>distribute/monetize/index.html">Monetize</a></li>
|
||||||
<li><a href="<?cs var:toroot ?>distribute/open.html">Open Distribution</a></li>
|
<li><a href="<?cs var:toroot ?>distribute/stories/index.html">Developer Stories</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div><!-- /Expanded quicknav -->
|
||||||
<!-- /Expanded quicknav -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div><!-- /Header -->
|
||||||
<!-- /Header -->
|
|
||||||
|
|
||||||
|
|
||||||
<div id="searchResults" class="wrap" style="display:none;">
|
|
||||||
<h2 id="searchTitle">Results</h2>
|
|
||||||
<div id="leftSearchControl" class="search-control">Loading...</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<?cs if:training || guide || reference || tools || develop || google || samples ?>
|
<?cs if:training || guide || reference || tools || develop || google || samples ?>
|
||||||
<!-- Secondary x-nav -->
|
<!-- Secondary x-nav -->
|
||||||
<div id="nav-x">
|
<div id="nav-x">
|
||||||
@@ -270,10 +263,71 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- /Sendondary x-nav -->
|
<!-- /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 ?>
|
||||||
|
</div> <!--end headerwrap -->
|
||||||
|
|
||||||
<?cs /if ?>
|
<div id="sticky-header">
|
||||||
<?cs # end if/else !devsite ?>
|
<div>
|
||||||
|
<a class="logo" href="/index.html"></a>
|
||||||
|
<a class="top" href="#top"></a>
|
||||||
|
<ul class="breadcrumb">
|
||||||
|
<?cs
|
||||||
|
if:design ?><li class="design"><a href="<?cs var:toroot ?>design/index.html">Design</a></li><?cs
|
||||||
|
elif:(develop || training || guide || reference || tools || sdk || google || samples) ?><li class="develop"><a href="<?cs var:toroot ?>develop/index.html">Develop</a></li><?cs
|
||||||
|
elif:distribute ?><li class="distribute"><a href="<?cs var:toroot ?>distribute/index.html">Distribute</a></li><?cs
|
||||||
|
elif:about ?><li class="about"><a href="<?cs var:toroot ?>about/index.html">About Android</a></li><?cs
|
||||||
|
/if ?><?cs
|
||||||
|
if:training ?><li><a href="<?cs var:toroot ?>training/index.html">Training</a></li><?cs
|
||||||
|
elif:guide ?><li><a href="<?cs var:toroot ?>guide/index.html">API Guides</a></li><?cs
|
||||||
|
elif:reference ?><li><a href="<?cs var:toroot ?>reference/index.html">Reference</a></li><?cs
|
||||||
|
elif:tools ?><li><a href="<?cs var:toroot ?>tools/index.html">Tools</a></li><?cs
|
||||||
|
elif:google ?><li><a href="<?cs var:toroot ?>google/index.html">Google Services</a></li><?cs
|
||||||
|
elif:samples ?><li><a href="<?cs var:toroot ?>samples/index.html">Samples</a></li><?cs
|
||||||
|
elif:googleplay ?><li><a href="<?cs var:toroot ?>distribute/googleplay/index.html">Google Play</a></li><?cs
|
||||||
|
elif:essentials ?><li><a href="<?cs var:toroot ?>distribute/essentials/index.html">Essentials</a></li><?cs
|
||||||
|
elif:users ?><li><a href="<?cs var:toroot ?>distribute/users/index.html">Get Users</a></li><?cs
|
||||||
|
elif:engage ?><li><a href="<?cs var:toroot ?>distribute/engage/index.html">Engage & Retain</a></li><?cs
|
||||||
|
elif:monetize ?><li><a href="<?cs var:toroot ?>distribute/monetize/index.html">Monetize Your Apps</a></li><?cs
|
||||||
|
elif:disttools ?><li><a href="<?cs var:toroot ?>distribute/tools/index.html">Tools & Reference</a></li><?cs
|
||||||
|
elif:stories ?><li><a href="<?cs var:toroot ?>distribute/stories/index.html">Developer Stories</a></li><?cs
|
||||||
|
/if ?> <?cs
|
||||||
|
if:!section.landing ?><li class="current"><?cs var:page.title ?></li><?cs
|
||||||
|
/if ?></ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<?cs
|
<div id="searchResults" class="wrap" style="display:none;">
|
||||||
/def ?>
|
<h2 id="searchTitle">Results</h2>
|
||||||
|
<div id="leftSearchControl" class="search-control">Loading...</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?cs /if ?><?cs # end if/else !devsite ?><?cs
|
||||||
|
/def ?>
|
@@ -15,28 +15,12 @@ def:sdk_nav() ?>
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- end side-nav -->
|
</div> <!-- end side-nav -->
|
||||||
<?cs /def ?>
|
<?cs /def ?><?cs
|
||||||
<?cs
|
|
||||||
def:resources_tab_nav() ?>
|
def:no_nav() ?>
|
||||||
<div class="wrap clearfix" id="body-content">
|
<div class="wrap clearfix" id="body-content">
|
||||||
<a
|
<?cs /def ?><?cs
|
||||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
|
||||||
<div id="devdoc-nav" class="scroll-pane">
|
|
||||||
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
|
||||||
|
|
||||||
<?cs
|
|
||||||
include:"../../../../frameworks/base/docs/html/resources/resources_toc.cs" ?>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div> <!-- end side-nav -->
|
|
||||||
<script>
|
|
||||||
$(document).ready(function() {
|
|
||||||
scrollIntoView("devdoc-nav");
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
<?cs /def ?>
|
|
||||||
<?cs
|
|
||||||
def:tools_nav() ?>
|
def:tools_nav() ?>
|
||||||
<div class="wrap clearfix" id="body-content">
|
<div class="wrap clearfix" id="body-content">
|
||||||
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||||
@@ -73,8 +57,113 @@ def:training_nav() ?>
|
|||||||
scrollIntoView("devdoc-nav");
|
scrollIntoView("devdoc-nav");
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<?cs /def ?>
|
<?cs /def ?><?cs
|
||||||
<?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">
|
||||||
|
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||||
|
<?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">
|
||||||
|
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||||
|
<?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">
|
||||||
|
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||||
|
<?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">
|
||||||
|
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||||
|
<?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">
|
||||||
|
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||||
|
<?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">
|
||||||
|
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||||
|
<?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">
|
||||||
|
<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
|
||||||
|
<?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() ?>
|
def:guide_nav() ?>
|
||||||
<div class="wrap clearfix" id="body-content">
|
<div class="wrap clearfix" id="body-content">
|
||||||
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
|
||||||
@@ -310,8 +399,10 @@ def:default_left_nav() ?>
|
|||||||
|
|
||||||
<?cs
|
<?cs
|
||||||
def:custom_left_nav() ?><?cs
|
def:custom_left_nav() ?><?cs
|
||||||
if:fullpage ?><?cs
|
if:fullpage ?><?cs
|
||||||
call:fullpage() ?><?cs
|
call:fullpage() ?><?cs
|
||||||
|
elif:nonavpage ?><?cs
|
||||||
|
call:no_nav() ?><?cs
|
||||||
elif:guide ?><?cs
|
elif:guide ?><?cs
|
||||||
call:guide_nav() ?><?cs
|
call:guide_nav() ?><?cs
|
||||||
elif:design ?><?cs
|
elif:design ?><?cs
|
||||||
@@ -324,15 +415,29 @@ def:custom_left_nav() ?><?cs
|
|||||||
call:google_nav() ?><?cs
|
call:google_nav() ?><?cs
|
||||||
elif:samples ?><?cs
|
elif:samples ?><?cs
|
||||||
call:samples_nav() ?><?cs
|
call:samples_nav() ?><?cs
|
||||||
elif:more ?><?cs
|
|
||||||
call:dist_more_nav() ?><?cs
|
|
||||||
elif:distribute ?><?cs
|
elif:distribute ?><?cs
|
||||||
call:distribute_nav() ?><?cs
|
if:googleplay ?><?cs
|
||||||
elif:about ?><?cs
|
call:googleplay_nav() ?><?cs
|
||||||
call:about_nav() ?><?cs
|
elif:essentials ?><?cs
|
||||||
else ?><?cs
|
call:essentials_nav() ?><?cs
|
||||||
call:default_left_nav() ?> <?cs
|
elif:users ?><?cs
|
||||||
/if ?><?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
|
||||||
|
else ?><?cs
|
||||||
|
call:default_left_nav() ?> <?cs
|
||||||
|
/if ?><?cs
|
||||||
/def ?>
|
/def ?>
|
||||||
|
|
||||||
<?cs # appears at the bottom of every page ?><?cs
|
<?cs # appears at the bottom of every page ?><?cs
|
||||||
|
@@ -2,19 +2,36 @@
|
|||||||
<?cs include:"macros.cs" ?>
|
<?cs include:"macros.cs" ?>
|
||||||
<html<?cs if:devsite ?> devsite<?cs /if ?>>
|
<html<?cs if:devsite ?> devsite<?cs /if ?>>
|
||||||
<?cs include:"head_tag.cs" ?>
|
<?cs include:"head_tag.cs" ?>
|
||||||
<body class="gc-documentation <?cs if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?>
|
<body class="gc-documentation
|
||||||
<?cs if:(guide||develop||training||reference||tools||sdk||samples) ?>develop<?cs if:guide ?> guide<?cs /if ?><?cs if:samples ?> samples<?cs /if ?><?cs
|
|
||||||
|
<?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:about ?>about<?cs
|
||||||
elif:design ?>design<?cs
|
elif:design ?>design<?cs
|
||||||
elif:distribute ?>distribute<?cs
|
/if ?><?cs
|
||||||
/if ?><?cs
|
if:page.trainingcourse ?> trainingcourse<?cs
|
||||||
if:page.trainingcourse ?> trainingcourse<?cs /if ?>" itemscope itemtype="http://schema.org/Article">
|
/if ?>" itemscope itemtype="http://schema.org/Article"><?cs
|
||||||
<?cs include:"header.cs" ?>
|
include:"header.cs" ?>
|
||||||
|
|
||||||
<div <?cs if:fullpage
|
<div <?cs
|
||||||
?>class="fullpage"<?cs elif:design||tools||about||sdk||distribute
|
if:fullpage
|
||||||
?>class="col-13" id="doc-col"<?cs else
|
?>class="fullpage"<?cs
|
||||||
?>class="col-12" id="doc-col"<?cs /if ?> >
|
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:(design||training||walkthru) && !page.trainingcourse && !page.article ?><?cs # header logic for docs that provide previous/next buttons ?>
|
||||||
<?cs if:header.hide ?>
|
<?cs if:header.hide ?>
|
||||||
@@ -74,6 +91,7 @@
|
|||||||
<?cs /if ?><?cs # end if training ?>
|
<?cs /if ?><?cs # end if training ?>
|
||||||
</div>
|
</div>
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
||||||
<?cs elif:samplesProjectIndex ?>
|
<?cs elif:samplesProjectIndex ?>
|
||||||
<div id="api-info-block">
|
<div id="api-info-block">
|
||||||
<div class="sum-details-links">
|
<div class="sum-details-links">
|
||||||
@@ -83,7 +101,10 @@
|
|||||||
</div><!-- end sum-details-links -->
|
</div><!-- end sum-details-links -->
|
||||||
</div><!-- end breadcurmb block -->
|
</div><!-- end breadcurmb block -->
|
||||||
<h1 itemprop="name"><?cs var:projectDir ?></h1>
|
<h1 itemprop="name"><?cs var:projectDir ?></h1>
|
||||||
|
|
||||||
<?cs else ?>
|
<?cs else ?>
|
||||||
|
|
||||||
|
|
||||||
<?cs if:(!fullpage && !header.hide) ?>
|
<?cs if:(!fullpage && !header.hide) ?>
|
||||||
<?cs if:page.landing ?><?cs # header logic for docs that are landing pages ?>
|
<?cs if:page.landing ?><?cs # header logic for docs that are landing pages ?>
|
||||||
<div class="landing-banner">
|
<div class="landing-banner">
|
||||||
@@ -181,8 +202,6 @@
|
|||||||
<?cs include:"footer.cs" ?>
|
<?cs include:"footer.cs" ?>
|
||||||
</div><!-- end doc-content -->
|
</div><!-- end doc-content -->
|
||||||
|
|
||||||
<?cs include:"trailer.cs" ?>
|
|
||||||
|
|
||||||
<!-- Start of Tag -->
|
<!-- Start of Tag -->
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var axel = Math.random() + "";
|
var axel = Math.random() + "";
|
||||||
@@ -193,6 +212,16 @@ 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>
|
<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>
|
</noscript>
|
||||||
<!-- End of Tag -->
|
<!-- End of Tag -->
|
||||||
|
|
||||||
|
|
||||||
|
<?cs include:"trailer.cs" ?>
|
||||||
|
<script src="http://androiddevdocs-exp.appspot.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_articles.js" type="text/javascript"></script>
|
||||||
|
<script src="<?cs var:toroot ?>jd_collections.js" type="text/javascript"></script>
|
||||||
|
<script src="<?cs var:toroot ?>jd_site_map.js" type="text/javascript"></script>
|
||||||
|
<script src="<?cs var:toroot ?>jd_tag_helpers.js" type="text/javascript"></script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
@@ -31,9 +31,15 @@
|
|||||||
|
|
||||||
<!-- STYLESHEETS -->
|
<!-- STYLESHEETS -->
|
||||||
<link rel="stylesheet"
|
<link rel="stylesheet"
|
||||||
href="<?cs if:android.whichdoc != 'online' ?>http:<?cs /if ?>//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
|
href="<?cs
|
||||||
<link href="<?cs var:toroot ?>assets/css/default.css" rel="stylesheet" type="text/css">
|
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: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) ?>
|
<?cs if:reference && !(reference.gms || reference.gcm) ?>
|
||||||
<!-- FULLSCREEN STYLESHEET -->
|
<!-- FULLSCREEN STYLESHEET -->
|
||||||
<link href="<?cs var:toroot ?>assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
|
<link href="<?cs var:toroot ?>assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
|
||||||
|
Reference in New Issue
Block a user