Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3715)

Unified Diff: chrome/common/extensions/docs/js/api_page_generator.js

Issue 2957009: Change the existing extension samples page to an automatically-generated searchable directory. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Make changes suggested by Antony Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/js/api_page_generator.js
diff --git a/chrome/common/extensions/docs/js/api_page_generator.js b/chrome/common/extensions/docs/js/api_page_generator.js
index 5aa11fe2b68f93394eea63bc2b65090f0ae57625..96fe7bea4bf89cab5f8e99aa0b9f1633338fedec 100644
--- a/chrome/common/extensions/docs/js/api_page_generator.js
+++ b/chrome/common/extensions/docs/js/api_page_generator.js
@@ -16,6 +16,7 @@
var API_TEMPLATE = "template/api_template.html";
var SCHEMA = "../api/extension_api.json";
+var SAMPLES = "samples.json";
var REQUEST_TIMEOUT = 2000;
function staticResource(name) { return "static/" + name + ".html"; }
@@ -29,6 +30,12 @@ var pageData = {};
// The full extension api schema
var schema;
+// List of Chrome extension samples.
+var samples;
+
+// Mappings of api calls to URLs
+var apiMapping;
+
// The current module for this page (if this page is an api module);
var module;
@@ -41,11 +48,6 @@ var pageName;
// If this page is an apiModule, the name of the api module
var apiModuleName;
-Array.prototype.each = function(f) {
- for (var i = 0; i < this.length; i++) {
- f(this[i], i);
- }
-}
// Visits each item in the list in-order. Stops when f returns any truthy
// value and returns that node.
@@ -56,14 +58,6 @@ Array.prototype.select = function(f) {
}
}
-Array.prototype.map = function(f) {
- var retval = [];
- for (var i = 0; i < this.length; i++) {
- retval.push(f(this[i], i));
- }
- return retval;
-}
-
// Assigns all keys & values of |obj2| to |obj1|.
function extend(obj, obj2) {
for (var k in obj2) {
@@ -114,13 +108,28 @@ function fetchSchema() {
// and populate the templates.
fetchContent(SCHEMA, function(schemaContent) {
schema = JSON.parse(schemaContent);
- renderTemplate();
-
+ if (pageName.toLowerCase() == "samples") {
+ fetchSamples();
+ } else {
+ renderTemplate();
+ }
}, function(error) {
alert("Failed to load " + SCHEMA);
});
}
+function fetchSamples() {
+ // If we're rendering the samples directory, fetch the samples manifest.
+ fetchContent(SAMPLES, function(sampleManifest) {
+ var data = JSON.parse(sampleManifest);
+ samples = data.samples;
+ apiMapping = data.api;
+ renderTemplate();
+ }, function(error) {
+ renderTemplate();
+ });
+}
+
/**
* Fetches |url| and returns it's text contents from the xhr.responseText in
* onSuccess(content)
@@ -167,7 +176,7 @@ function fetchContent(url, onSuccess, onError) {
}
function renderTemplate() {
- schema.each(function(mod) {
+ schema.forEach(function(mod) {
if (mod.namespace == pageBase) {
// Do not render page for modules which are marked as "nodoc": true.
if (mod.nodoc) {
@@ -180,12 +189,38 @@ function renderTemplate() {
}
if (mod.types) {
- mod.types.each(function(type) {
+ mod.types.forEach(function(type) {
typeModule[type.id] = mod;
});
}
});
+ /**
+ * Special pages like the samples gallery may want to modify their template
+ * data to include additional information. This hook allows a page template
+ * to specify code that runs in the context of the api_page_generator.js
+ * file before the jstemplate is rendered.
+ *
+ * To specify such code, the page template should include a script block with
+ * a type of "text/prerenderjs" containing the code to be executed. Note that
+ * linking to an external file is not supported - code must be accessible
+ * via the script block's innerText property.
+ *
+ * Code that is run this way may modify the data sent to jstemplate by
+ * modifying the window.pageData variable. This code will also have access
+ * to any methods declared in the api_page_generator.js file. The code
+ * does not need to return any specific value to function.
+ *
+ * Note that code specified in this manner will be removed before the
+ * template is rendered, and will therefore not be exposed to the end user
+ * in the final rendered template.
+ */
+ var preRender = document.querySelector('script[type="text/prerenderjs"]');
+ if (preRender) {
+ preRender.parentElement.removeChild(preRender);
+ eval(preRender.innerText);
+ }
+
// Render to template
var input = new JsEvalContext(pageData);
var output = document.getElementsByTagName("body")[0];
@@ -210,7 +245,7 @@ function removeJsTemplateAttributes(root) {
var nodes = root.getElementsByTagName("*");
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i]
- jsattributes.each(function(attributeName) {
+ jsattributes.forEach(function(attributeName) {
n.removeAttribute(attributeName);
});
}
@@ -265,7 +300,8 @@ function selectCurrentPageOnLeftNav() {
/*
* Template Callout Functions
- * The jstProcess() will call out to these functions from within the page template
+ * The jstProcess() will call out to these functions from within the page
+ * template
*/
function stableAPIs() {
@@ -275,7 +311,7 @@ function stableAPIs() {
return module.namespace;
}).sort();
}
-
+
function experimentalAPIs() {
return schema.filter(function(module) {
return !module.nodoc && module.namespace.indexOf("experimental") == 0;
@@ -320,7 +356,7 @@ function getStaticTOC() {
var retval = [];
var lastH2;
- staticHNodes.each(function(n, i) {
+ staticHNodes.forEach(function(n, i) {
var anchorName = n.id || n.nodeName + "-" + i;
if (!n.id) {
var a = document.createElement('a');
@@ -407,7 +443,7 @@ function getTypeName(schema) {
if (schema.choices) {
var typeNames = [];
- schema.choices.each(function(c) {
+ schema.choices.forEach(function(c) {
typeNames.push(getTypeName(c));
});
@@ -425,7 +461,7 @@ function getTypeName(schema) {
function getSignatureString(parameters) {
var retval = [];
- parameters.each(function(param, i) {
+ parameters.forEach(function(param, i) {
retval.push(getTypeName(param) + " " + param.name);
});
« no previous file with comments | « chrome/common/extensions/docs/images/sample-default-icon.png ('k') | chrome/common/extensions/docs/js/sample_search.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698