mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Updated scripts.
This commit is contained in:
+16
-3
@@ -8,6 +8,12 @@ For development use only. This script will pull down the current docs from maste
|
||||
|
||||
### Usage
|
||||
|
||||
First, install dependencies:
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
Run the following command locally:
|
||||
|
||||
```
|
||||
@@ -16,14 +22,21 @@ GIT_USER=your_git_user GITHUB_USERNAME=facebook GITHUB_REPONAME=react-native nod
|
||||
|
||||
This will perform a sparse checkout of the `docs/` folder from `master`, generating a clean set of markdown docs in the local `docs/` folder. It will also write to disk an updated `sidebars.json` file based on these docs.
|
||||
|
||||
## build-autodocs-markdownjs
|
||||
## build.js
|
||||
|
||||
Runs the usual autodocs generation scripts used by the `react-page-middleware` variant of the React Native website, but provides markdown instead of HTML. Run this script prior to building the website.
|
||||
|
||||
### Usage
|
||||
|
||||
Run the following commands locally (the generate script needs to run first):
|
||||
Run the following command locally:
|
||||
|
||||
```
|
||||
node server/build.js
|
||||
```
|
||||
|
||||
The build script performs some cleanup, then runs the following scripts in order:
|
||||
```
|
||||
node server/generate.js
|
||||
node server/build-autodocs-markdown.js
|
||||
```
|
||||
node server/build-autodocs-sidebar.js
|
||||
```
|
||||
|
||||
Executable → Regular
+132
-16
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
@@ -8,23 +8,139 @@
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
const { cd, cp, echo, exec, exit, ls, mkdir, rm, which } = require("shelljs");
|
||||
var fs = require("fs");
|
||||
var glob = require("glob");
|
||||
var Promise = require("bluebird");
|
||||
var mkdirp = require("mkdirp");
|
||||
var slugify = require("../core/slugify");
|
||||
var jsdom = require("jsdom");
|
||||
|
||||
cd(`../../docs`);
|
||||
rm(`-rf`, `autogen_*.md`);
|
||||
cd(`..`);
|
||||
cd(`docgen`);
|
||||
rm(`-rf`, `build`);
|
||||
rm(`-rf`, `src`);
|
||||
mkdir(`-p`, `build`);
|
||||
mkdir(`-p`, `src`);
|
||||
const { JSDOM } = jsdom;
|
||||
|
||||
if (exec(`node server/generate.js`).code !== 0) {
|
||||
echo(`Error: Generating HTML failed`);
|
||||
exit(1);
|
||||
var queue = Promise.resolve();
|
||||
|
||||
function bodyContentFromDOM(dom) {
|
||||
const el = dom.window.document.querySelector("#componentContent");
|
||||
if (el) {
|
||||
return el.innerHTML;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (exec(`node server/build.js`).code !== 0) {
|
||||
echo(`Error: Generating Markdown failed`);
|
||||
exit(1);
|
||||
function componentNameFromDOM(dom) {
|
||||
const el = dom.window.document.querySelector("title");
|
||||
if (el) {
|
||||
return el.innerHTML;
|
||||
} else {
|
||||
return "Component";
|
||||
}
|
||||
}
|
||||
|
||||
function componentCategoryFromDOM(dom) {
|
||||
const el = dom.window.document.querySelector('meta[property="rn:category"]');
|
||||
if (el) {
|
||||
return el.content;
|
||||
} else {
|
||||
return "Components";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a markdown formatted file, including frontmatter.
|
||||
*
|
||||
* @param {*} dom
|
||||
*/
|
||||
function generateMarkdownFromDOM(dom) {
|
||||
const body = bodyContentFromDOM(dom);
|
||||
if (!body) {
|
||||
return;
|
||||
}
|
||||
const componentName = componentNameFromDOM(dom);
|
||||
const slug = slugify(componentName);
|
||||
let category = "Components";
|
||||
const componentCategory = componentCategoryFromDOM(dom);
|
||||
if (componentCategory) {
|
||||
category = componentCategory;
|
||||
}
|
||||
const metadata = { id: slug, category: category };
|
||||
const res = [
|
||||
"---",
|
||||
"id: " + slug,
|
||||
"title: " + componentName,
|
||||
"category: " + category,
|
||||
"permalink: docs/" + slug + ".html",
|
||||
"---",
|
||||
body
|
||||
]
|
||||
.filter(function(line) {
|
||||
return line;
|
||||
})
|
||||
.join("\n");
|
||||
const targetFile = "../docs/autogen_" + componentName + ".md";
|
||||
mkdirp.sync(targetFile.replace(new RegExp("/[^/]*$"), ""));
|
||||
console.log("Writing " + targetFile);
|
||||
fs.writeFileSync(targetFile, res);
|
||||
return metadata;
|
||||
}
|
||||
|
||||
function generateMetatadaFile(categories) {
|
||||
const categoriesMetadataFile = "build/sidebar-metadata.json";
|
||||
fs.writeFileSync(categoriesMetadataFile, JSON.stringify(categories));
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates sidebar.json with the autogenerated API docs, without overwriting existing sections/categories.
|
||||
*
|
||||
* @param {*} categories
|
||||
*/
|
||||
function updateSidebarSync() {
|
||||
const categoriesMetadataFile = "build/sidebar-metadata.json";
|
||||
const categories = JSON.parse(fs.readFileSync(categoriesMetadataFile));
|
||||
const sidebarFile = "../website/sidebars.json";
|
||||
let sidebarContent = { SIDEBAR_AUTODOCS_SECTION: {} };
|
||||
if (fs.existsSync(sidebarFile)) {
|
||||
sidebarContent = JSON.parse(fs.readFileSync(sidebarFile));
|
||||
}
|
||||
|
||||
let sortedCategories = {};
|
||||
for (var category in categories) {
|
||||
const sortedCategory = categories[category].sort();
|
||||
sortedCategories[category] = sortedCategory;
|
||||
}
|
||||
|
||||
const newSidebarContent = Object.assign({}, sidebarContent, {
|
||||
API: sortedCategories
|
||||
});
|
||||
|
||||
fs.writeFileSync(sidebarFile, JSON.stringify(newSidebarContent));
|
||||
console.log(`Updated ${sidebarFile}`);
|
||||
}
|
||||
|
||||
// Generate HTML for each non-source code JS file
|
||||
glob("build/**/*.html", function(er, files) {
|
||||
let categories = {};
|
||||
files.forEach(function(file) {
|
||||
queue = queue
|
||||
.then(function() {
|
||||
return JSDOM.fromFile(file);
|
||||
})
|
||||
.then(function(dom) {
|
||||
const metadata = generateMarkdownFromDOM(dom);
|
||||
if (categories[metadata.category]) {
|
||||
categories[metadata.category].push(metadata.id);
|
||||
} else {
|
||||
categories[metadata.category] = [metadata.id];
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
queue = queue.then(function() {
|
||||
console.log("Generated Markdown files from HTML");
|
||||
generateMetatadaFile(categories);
|
||||
})
|
||||
.catch(function(e) {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
var fs = require("fs");
|
||||
|
||||
const categoriesMetadataFile = "build/sidebar-metadata.json";
|
||||
const categories = JSON.parse(fs.readFileSync(categoriesMetadataFile));
|
||||
const sidebarFile = "../website/sidebars.json";
|
||||
let sidebarContent = { SIDEBAR_AUTODOCS_SECTION: {} };
|
||||
if (fs.existsSync(sidebarFile)) {
|
||||
sidebarContent = JSON.parse(fs.readFileSync(sidebarFile));
|
||||
}
|
||||
|
||||
let sortedCategories = {};
|
||||
for (var category in categories) {
|
||||
const sortedCategory = categories[category].sort();
|
||||
sortedCategories[category] = sortedCategory;
|
||||
}
|
||||
|
||||
const newSidebarContent = Object.assign({}, sidebarContent, {
|
||||
API: sortedCategories
|
||||
});
|
||||
|
||||
fs.writeFileSync(sidebarFile, JSON.stringify(newSidebarContent));
|
||||
console.log(`Updated ${sidebarFile}`);
|
||||
Regular → Executable
+19
-136
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2017-present, Facebook, Inc.
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
@@ -8,146 +8,29 @@
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
var fs = require("fs");
|
||||
var glob = require("glob");
|
||||
var Promise = require("bluebird");
|
||||
var mkdirp = require("mkdirp");
|
||||
var slugify = require("../core/slugify");
|
||||
var jsdom = require("jsdom");
|
||||
const { cd, cp, echo, exec, exit, ls, mkdir, rm, which } = require("shelljs");
|
||||
|
||||
const { JSDOM } = jsdom;
|
||||
cd(process.cwd());
|
||||
|
||||
var queue = Promise.resolve();
|
||||
cd(`../docs`);
|
||||
rm(`-rf`, `autogen_*.md`);
|
||||
cd(`../docgen`);
|
||||
rm(`-rf`, `build`);
|
||||
rm(`-rf`, `src`);
|
||||
mkdir(`-p`, `build`);
|
||||
mkdir(`-p`, `src`);
|
||||
|
||||
function bodyContentFromDOM(dom) {
|
||||
const el = dom.window.document.querySelector("#componentContent");
|
||||
if (el) {
|
||||
return el.innerHTML;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
if (exec(`node server/generate.js`).code !== 0) {
|
||||
echo(`Error: Rendering Autodocs to HTML failed`);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
function componentNameFromDOM(dom) {
|
||||
const el = dom.window.document.querySelector("title");
|
||||
if (el) {
|
||||
return el.innerHTML;
|
||||
} else {
|
||||
return "Component";
|
||||
}
|
||||
if (exec(`node server/build-autodocs-markdown.js`).code !== 0) {
|
||||
echo(`Error: Generating Autodocs Markdown failed`);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
function componentCategoryFromDOM(dom) {
|
||||
const el = dom.window.document.querySelector('meta[property="rn:category"]');
|
||||
if (el) {
|
||||
return el.content;
|
||||
} else {
|
||||
return "Components";
|
||||
}
|
||||
if (exec(`node server/build-autodocs-sidebar.js`).code !== 0) {
|
||||
echo(`Error: Generating Autodocs Sidebar failed`);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates sidebar.json with the autogenerated API docs, without overwriting existing sections/categories.
|
||||
*
|
||||
* @param {*} categories
|
||||
*/
|
||||
function updateSidebarSync(categories) {
|
||||
const sidebarFile = "../website/sidebars.json";
|
||||
let sidebarContent = { SIDEBAR_AUTODOCS_SECTION: {} };
|
||||
if (fs.existsSync(sidebarFile)) {
|
||||
sidebarContent = JSON.parse(fs.readFileSync(sidebarFile));
|
||||
}
|
||||
|
||||
let sortedCategories = {};
|
||||
for (var category in categories) {
|
||||
const sortedCategory = categories[category].sort();
|
||||
sortedCategories[category] = sortedCategory;
|
||||
// TODO: replace with spread once babelized?
|
||||
}
|
||||
|
||||
const newSidebarContent = Object.assign({}, sidebarContent, {
|
||||
API: sortedCategories
|
||||
});
|
||||
|
||||
fs.writeFileSync(sidebarFile, JSON.stringify(newSidebarContent));
|
||||
}
|
||||
|
||||
// Generate HTML for each non-source code JS file
|
||||
glob("build/**/*.html", function(er, files) {
|
||||
let categories = {};
|
||||
files.forEach(function(file) {
|
||||
queue = queue
|
||||
.then(function() {
|
||||
return JSDOM.fromFile(file);
|
||||
})
|
||||
.then(function(dom) {
|
||||
const body = bodyContentFromDOM(dom);
|
||||
if (!body) {
|
||||
console.log("Skipping " + file);
|
||||
return;
|
||||
}
|
||||
const componentName = componentNameFromDOM(dom);
|
||||
const slug = slugify(componentName);
|
||||
let category = "Components";
|
||||
const componentCategory = componentCategoryFromDOM(dom);
|
||||
if (componentCategory) {
|
||||
category = componentCategory;
|
||||
}
|
||||
const metadata = { id: slug, category: category };
|
||||
const res = [
|
||||
"---",
|
||||
"id: " + slug,
|
||||
"title: " + componentName,
|
||||
"sidebar: api",
|
||||
"category: " + category,
|
||||
"permalink: docs/" + slug + ".html",
|
||||
"---",
|
||||
body
|
||||
]
|
||||
.filter(function(line) {
|
||||
return line;
|
||||
})
|
||||
.join("\n");
|
||||
const targetFile = "../docs/autogen_" + componentName + ".md";
|
||||
mkdirp.sync(targetFile.replace(new RegExp("/[^/]*$"), ""));
|
||||
console.log("Writing " + targetFile);
|
||||
fs.writeFileSync(targetFile, res);
|
||||
if (categories[category]) {
|
||||
categories[category].push(slug);
|
||||
} else {
|
||||
categories[category] = [slug];
|
||||
}
|
||||
})
|
||||
.catch(function(error) {
|
||||
console.error("Skipping " + targetFile + ": " + error);
|
||||
});
|
||||
});
|
||||
|
||||
queue = queue
|
||||
.then(function() {
|
||||
console.log("Generated Markdown files from HTML");
|
||||
updateSidebarSync(categories);
|
||||
})
|
||||
.catch(function(e) {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: Generate a sidebar. Looks like this:
|
||||
/*
|
||||
{
|
||||
"docs": {
|
||||
"The Basics": ["doc1"],
|
||||
"Guides": ["doc2"],
|
||||
"Components": ["doc3"],
|
||||
"APIs": ["doc3"]
|
||||
},
|
||||
"docs-other": {
|
||||
"First Category": ["doc4", "doc5"]
|
||||
}
|
||||
}
|
||||
I'm guessing for API/Components we can just do it alphabetically.
|
||||
For everything else, we can get an initial order from the frontmatter, and bake it into the sidebar.
|
||||
Then we can make sure that the build script only updates the API and Components keys, leaving Guides/The Basics untouched.
|
||||
*/
|
||||
|
||||
@@ -73,7 +73,7 @@ function checkOutDocs() {
|
||||
shell.exit(1);
|
||||
}
|
||||
|
||||
shell.echo("Checked out react-native-docs");
|
||||
shell.echo(`Checked out ${targetDir}`);
|
||||
shell.cd(`../..`);
|
||||
}
|
||||
|
||||
@@ -125,7 +125,6 @@ function generateDocsMetadata(files) {
|
||||
}
|
||||
|
||||
if (metadata.permalink.match(/^https?:/)) {
|
||||
// skips non-local docs?
|
||||
console.log(`Skipping ${file} as its permalink is external`);
|
||||
return;
|
||||
}
|
||||
|
||||
+4
-4
@@ -132,7 +132,7 @@ var content = `\{
|
||||
500,
|
||||
724
|
||||
],
|
||||
"filename": "xlbud4cpt8cpr2l1wuq0d.js",
|
||||
"filename": "isfgru4opc880no2vxn6g.js",
|
||||
"lineno": 27,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{}
|
||||
@@ -181,7 +181,7 @@ var content = `\{
|
||||
1301,
|
||||
6425
|
||||
],
|
||||
"filename": "xlbud4cpt8cpr2l1wuq0d.js",
|
||||
"filename": "isfgru4opc880no2vxn6g.js",
|
||||
"lineno": 64,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -205,7 +205,7 @@ var content = `\{
|
||||
1320,
|
||||
2364
|
||||
],
|
||||
"filename": "xlbud4cpt8cpr2l1wuq0d.js",
|
||||
"filename": "isfgru4opc880no2vxn6g.js",
|
||||
"lineno": 65,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{}
|
||||
@@ -280,7 +280,7 @@ var content = `\{
|
||||
2746,
|
||||
4559
|
||||
],
|
||||
"filename": "xlbud4cpt8cpr2l1wuq0d.js",
|
||||
"filename": "isfgru4opc880no2vxn6g.js",
|
||||
"lineno": 101,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{}
|
||||
|
||||
+12
-12
@@ -11,7 +11,7 @@ var content = `\{
|
||||
1920,
|
||||
14385
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 62,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -35,7 +35,7 @@ var content = `\{
|
||||
2285,
|
||||
2786
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 75,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -92,7 +92,7 @@ var content = `\{
|
||||
3094,
|
||||
3459
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 99,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -158,7 +158,7 @@ var content = `\{
|
||||
3725,
|
||||
4080
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 120,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -215,7 +215,7 @@ var content = `\{
|
||||
5240,
|
||||
5609
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 169,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -284,7 +284,7 @@ var content = `\{
|
||||
5934,
|
||||
6263
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 190,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -332,7 +332,7 @@ var content = `\{
|
||||
6547,
|
||||
6875
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 211,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -380,7 +380,7 @@ var content = `\{
|
||||
7392,
|
||||
8575
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 235,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -429,7 +429,7 @@ var content = `\{
|
||||
9513,
|
||||
10248
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 292,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -492,7 +492,7 @@ var content = `\{
|
||||
10805,
|
||||
11163
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 341,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -549,7 +549,7 @@ var content = `\{
|
||||
11710,
|
||||
12056
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 371,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
@@ -609,7 +609,7 @@ var content = `\{
|
||||
14021,
|
||||
14383
|
||||
],
|
||||
"filename": "4c30ra99ajhb8q4jcdobwp.js",
|
||||
"filename": "a2jrn3oa55vf06dqkrx0yt.js",
|
||||
"lineno": 443,
|
||||
"path": "/var/folders/82/w8hcc_tj7yq80482srkc1r2x0bj21j/T",
|
||||
"code": \{
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: accessibilityinfo
|
||||
title: AccessibilityInfo
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/accessibilityinfo.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: actionsheetios
|
||||
title: ActionSheetIOS
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/actionsheetios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: activityindicator
|
||||
title: ActivityIndicator
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/activityindicator.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: alert
|
||||
title: Alert
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/alert.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: alertios
|
||||
title: AlertIOS
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/alertios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: animated
|
||||
title: Animated
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/animated.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: appregistry
|
||||
title: AppRegistry
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/appregistry.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: appstate
|
||||
title: AppState
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/appstate.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: asyncstorage
|
||||
title: AsyncStorage
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/asyncstorage.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: backandroid
|
||||
title: BackAndroid
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/backandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: backhandler
|
||||
title: BackHandler
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/backhandler.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: button
|
||||
title: Button
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/button.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: cameraroll
|
||||
title: CameraRoll
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/cameraroll.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: clipboard
|
||||
title: Clipboard
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/clipboard.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: datepickerandroid
|
||||
title: DatePickerAndroid
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/datepickerandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: datepickerios
|
||||
title: DatePickerIOS
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/datepickerios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: dimensions
|
||||
title: Dimensions
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/dimensions.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: drawerlayoutandroid
|
||||
title: DrawerLayoutAndroid
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/drawerlayoutandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: easing
|
||||
title: Easing
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/easing.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: flatlist
|
||||
title: FlatList
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/flatlist.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: geolocation
|
||||
title: Geolocation
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/geolocation.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: image
|
||||
title: Image
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/image.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: imageeditor
|
||||
title: ImageEditor
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/imageeditor.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: imagepickerios
|
||||
title: ImagePickerIOS
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/imagepickerios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: imagestore
|
||||
title: ImageStore
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/imagestore.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: imagestyleproptypes
|
||||
title: ImageStylePropTypes
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/imagestyleproptypes.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: interactionmanager
|
||||
title: InteractionManager
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/interactionmanager.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: keyboard
|
||||
title: Keyboard
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/keyboard.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: keyboardavoidingview
|
||||
title: KeyboardAvoidingView
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/keyboardavoidingview.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: layout-props
|
||||
title: Layout Props
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/layout-props.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: layoutanimation
|
||||
title: LayoutAnimation
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/layoutanimation.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: linking
|
||||
title: Linking
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/linking.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: listview
|
||||
title: ListView
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/listview.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: listviewdatasource
|
||||
title: ListViewDataSource
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/listviewdatasource.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: maskedviewios
|
||||
title: MaskedViewIOS
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/maskedviewios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: modal
|
||||
title: Modal
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/modal.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: navigatorios
|
||||
title: NavigatorIOS
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/navigatorios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: netinfo
|
||||
title: NetInfo
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/netinfo.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: panresponder
|
||||
title: PanResponder
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/panresponder.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: permissionsandroid
|
||||
title: PermissionsAndroid
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/permissionsandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: picker
|
||||
title: Picker
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/picker.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: pickerios
|
||||
title: PickerIOS
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/pickerios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: pixelratio
|
||||
title: PixelRatio
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/pixelratio.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: progressbarandroid
|
||||
title: ProgressBarAndroid
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/progressbarandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: progressviewios
|
||||
title: ProgressViewIOS
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/progressviewios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: pushnotificationios
|
||||
title: PushNotificationIOS
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/pushnotificationios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: refreshcontrol
|
||||
title: RefreshControl
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/refreshcontrol.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: scrollview
|
||||
title: ScrollView
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/scrollview.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: sectionlist
|
||||
title: SectionList
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/sectionlist.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: segmentedcontrolios
|
||||
title: SegmentedControlIOS
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/segmentedcontrolios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: settings
|
||||
title: Settings
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/settings.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: shadow-props
|
||||
title: Shadow Props
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/shadow-props.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: share
|
||||
title: Share
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/share.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: slider
|
||||
title: Slider
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/slider.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: snapshotviewios
|
||||
title: SnapshotViewIOS
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/snapshotviewios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: statusbar
|
||||
title: StatusBar
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/statusbar.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: statusbarios
|
||||
title: StatusBarIOS
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/statusbarios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: stylesheet
|
||||
title: StyleSheet
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/stylesheet.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: switch
|
||||
title: Switch
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/switch.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: systrace
|
||||
title: Systrace
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/systrace.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: tabbarios-item
|
||||
title: TabBarIOS.Item
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/tabbarios-item.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: tabbarios
|
||||
title: TabBarIOS
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/tabbarios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: text
|
||||
title: Text
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/text.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: textinput
|
||||
title: TextInput
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/textinput.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: textstyleproptypes
|
||||
title: TextStylePropTypes
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/textstyleproptypes.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: timepickerandroid
|
||||
title: TimePickerAndroid
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/timepickerandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: toastandroid
|
||||
title: ToastAndroid
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/toastandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: toolbarandroid
|
||||
title: ToolbarAndroid
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/toolbarandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: touchablehighlight
|
||||
title: TouchableHighlight
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/touchablehighlight.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: touchablenativefeedback
|
||||
title: TouchableNativeFeedback
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/touchablenativefeedback.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: touchableopacity
|
||||
title: TouchableOpacity
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/touchableopacity.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: touchablewithoutfeedback
|
||||
title: TouchableWithoutFeedback
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/touchablewithoutfeedback.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: transforms
|
||||
title: Transforms
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/transforms.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: vibration
|
||||
title: Vibration
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/vibration.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: vibrationios
|
||||
title: VibrationIOS
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/vibrationios.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: view
|
||||
title: View
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/view.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: viewpagerandroid
|
||||
title: ViewPagerAndroid
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/viewpagerandroid.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: viewproptypes
|
||||
title: ViewPropTypes
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/viewproptypes.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: viewstyleproptypes
|
||||
title: ViewStylePropTypes
|
||||
sidebar: api
|
||||
category: APIs
|
||||
permalink: docs/viewstyleproptypes.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: virtualizedlist
|
||||
title: VirtualizedList
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/virtualizedlist.html
|
||||
---
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
---
|
||||
id: webview
|
||||
title: WebView
|
||||
sidebar: api
|
||||
category: Components
|
||||
permalink: docs/webview.html
|
||||
---
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{"SIDEBAR_AUTODOCS_SECTION":{},"API":{"APIs":["accessibilityinfo","actionsheetios","alert","alertios","animated","appregistry","appstate","asyncstorage","backandroid","backhandler","cameraroll","clipboard","datepickerandroid","dimensions","easing","geolocation","imageeditor","imagepickerios","imagestore","imagestyleproptypes","interactionmanager","keyboard","layout-props","layoutanimation","linking","listviewdatasource","netinfo","panresponder","permissionsandroid","pixelratio","pushnotificationios","settings","shadow-props","share","statusbarios","stylesheet","systrace","textstyleproptypes","timepickerandroid","toastandroid","transforms","vibration","vibrationios","viewproptypes","viewstyleproptypes"],"Components":["activityindicator","button","datepickerios","drawerlayoutandroid","flatlist","image","keyboardavoidingview","listview","maskedviewios","modal","navigatorios","picker","pickerios","progressbarandroid","progressviewios","refreshcontrol","scrollview","sectionlist","segmentedcontrolios","slider","snapshotviewios","statusbar","switch","tabbarios","tabbarios-item","text","textinput","toolbarandroid","touchablehighlight","touchablenativefeedback","touchableopacity","touchablewithoutfeedback","view","viewpagerandroid","virtualizedlist","webview"]}}
|
||||
@@ -1,92 +0,0 @@
|
||||
{
|
||||
"docs": {
|
||||
"Guides": ["accessibility", "animations"]
|
||||
},
|
||||
"API Reference": {
|
||||
"APIs": [
|
||||
"accessibilityinfo",
|
||||
"actionsheetios",
|
||||
"alert",
|
||||
"alertios",
|
||||
"animated",
|
||||
"appregistry",
|
||||
"appstate",
|
||||
"asyncstorage",
|
||||
"backandroid",
|
||||
"backhandler",
|
||||
"cameraroll",
|
||||
"clipboard",
|
||||
"datepickerandroid",
|
||||
"dimensions",
|
||||
"easing",
|
||||
"geolocation",
|
||||
"imageeditor",
|
||||
"imagepickerios",
|
||||
"imagestore",
|
||||
"imagestyleproptypes",
|
||||
"interactionmanager",
|
||||
"keyboard",
|
||||
"layout-props",
|
||||
"layoutanimation",
|
||||
"linking",
|
||||
"listviewdatasource",
|
||||
"netinfo",
|
||||
"panresponder",
|
||||
"permissionsandroid",
|
||||
"pixelratio",
|
||||
"pushnotificationios",
|
||||
"settings",
|
||||
"shadow-props",
|
||||
"share",
|
||||
"statusbarios",
|
||||
"stylesheet",
|
||||
"systrace",
|
||||
"textstyleproptypes",
|
||||
"timepickerandroid",
|
||||
"toastandroid",
|
||||
"transforms",
|
||||
"vibration",
|
||||
"vibrationios",
|
||||
"viewproptypes",
|
||||
"viewstyleproptypes"
|
||||
],
|
||||
"Components": [
|
||||
"activityindicator",
|
||||
"button",
|
||||
"datepickerios",
|
||||
"drawerlayoutandroid",
|
||||
"flatlist",
|
||||
"image",
|
||||
"keyboardavoidingview",
|
||||
"listview",
|
||||
"maskedviewios",
|
||||
"modal",
|
||||
"navigatorios",
|
||||
"picker",
|
||||
"pickerios",
|
||||
"progressbarandroid",
|
||||
"progressviewios",
|
||||
"refreshcontrol",
|
||||
"scrollview",
|
||||
"sectionlist",
|
||||
"segmentedcontrolios",
|
||||
"slider",
|
||||
"snapshotviewios",
|
||||
"statusbar",
|
||||
"switch",
|
||||
"tabbarios",
|
||||
"tabbarios-item",
|
||||
"text",
|
||||
"textinput",
|
||||
"toolbarandroid",
|
||||
"touchablehighlight",
|
||||
"touchablenativefeedback",
|
||||
"touchableopacity",
|
||||
"touchablewithoutfeedback",
|
||||
"view",
|
||||
"viewpagerandroid",
|
||||
"virtualizedlist",
|
||||
"webview"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user