├── demo ├── demo.css ├── .eslintrc ├── examples │ └── above-the-fold-only-server-render.example └── demo.jsx ├── .flowconfig ├── .babelrc ├── src ├── .eslintrc ├── index.js └── components │ └── above-the-fold-only-server-render.jsx ├── test ├── client │ ├── .eslintrc │ └── components │ │ └── above-the-fold-only-server-render.spec.jsx └── mocks │ └── some-component.jsx ├── .editorconfig ├── .travis.yml ├── .npmignore ├── LICENSE ├── gulpfile.js ├── package.json ├── components.md ├── components.json ├── README.md └── .gitignore /demo/demo.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | 3 | [include] 4 | 5 | [libs] 6 | 7 | [options] 8 | 9 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./node_modules/electrode-archetype-react-component/config/babel/.babelrc" 3 | } 4 | -------------------------------------------------------------------------------- /src/.eslintrc: -------------------------------------------------------------------------------- 1 | --- 2 | extends: 3 | - "../node_modules/electrode-archetype-react-component/config/eslint/.eslintrc-react" 4 | -------------------------------------------------------------------------------- /demo/.eslintrc: -------------------------------------------------------------------------------- 1 | --- 2 | extends: 3 | - "../node_modules/electrode-archetype-react-component/config/eslint/.eslintrc-react-demo" 4 | -------------------------------------------------------------------------------- /test/client/.eslintrc: -------------------------------------------------------------------------------- 1 | --- 2 | extends: 3 | - "../../node_modules/electrode-archetype-react-component/config/eslint/.eslintrc-react-test" 4 | -------------------------------------------------------------------------------- /demo/examples/above-the-fold-only-server-render.example: -------------------------------------------------------------------------------- 1 | 2 |
This will not be rendered on the server.
3 |
4 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import AboveTheFoldOnlyServerRender from "./components/above-the-fold-only-server-render"; 2 | 3 | export default AboveTheFoldOnlyServerRender; 4 | export { AboveTheFoldOnlyServerRender }; 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | max_line_length = 100 12 | 13 | [*.md] 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - v6 4 | before_install: 5 | - npm install -g gulp 6 | - currentfolder=${PWD##*/} 7 | - if [ "$currentfolder" != 'above-the-fold-only-server-render' ]; then cd .. && eval "mv $currentfolder above-the-fold-only-server-render" && cd above-the-fold-only-server-render; fi 8 | script: 9 | - npm test 10 | notifications: 11 | email: 12 | - XChen@walmartlabs.com 13 | - ananavati@walmartlabs.com 14 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Cruft 2 | *.sublime-workspace 3 | .DS_Store 4 | .AppleDouble 5 | .LSOverride 6 | Icon 7 | ._* 8 | .Spotlight-V100 9 | .Trashes 10 | Thumbs.db 11 | ehthumbs.db 12 | Desktop.ini 13 | $RECYCLE.BIN/ 14 | .tmp 15 | npm-debug.log* 16 | 17 | # Code / build 18 | coverage 19 | node_modules 20 | bower_components 21 | test 22 | karma* 23 | webpack* 24 | .eslint* 25 | .editor* 26 | .travis* 27 | 28 | .idea/ 29 | 30 | .babelrc 31 | .flowconfig 32 | gulpfile.js 33 | LICENSE 34 | /src 35 | 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2016 WalmartLabs 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /demo/demo.jsx: -------------------------------------------------------------------------------- 1 | /*@flow*/ 2 | /*global document:false*/ 3 | import React from "react"; 4 | import Demo from "electrode-demo-index"; 5 | 6 | import * as libraryScope from "../src/index"; 7 | 8 | const components = [ 9 | { 10 | title: "AboveTheFoldOnlyServerRender", 11 | examples: [ 12 | { 13 | type: "playground", 14 | code: require("raw!./examples/above-the-fold-only-server-render.example"), 15 | noRender: true 16 | } 17 | ] 18 | } 19 | ]; 20 | 21 | const demo = () => ( 22 | 23 | ); 24 | 25 | export default demo; 26 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const exec = require("electrode-gulp-helper").exec; 4 | 5 | const tasks = { 6 | "demo": ["generate", "server-dev"], 7 | "demo-iso": ["dev-iso"], 8 | "generate": ["generate-metadata", "generate-documentation"], 9 | "generate-documentation": () => exec(`electrode-docgen --package ./package.json --src ./src --markdown components.md`), 10 | "generate-metadata": () => exec(`electrode-docgen --package ./package.json --src ./src --metadata components.json`), 11 | "prepublish": ["npm:prepublish"], 12 | "preversion": ["check-cov"], 13 | "test": ["check-cov"] 14 | } 15 | 16 | require("electrode-archetype-react-component")(tasks); 17 | -------------------------------------------------------------------------------- /test/mocks/some-component.jsx: -------------------------------------------------------------------------------- 1 | import React, {Component, PropTypes} from "react"; 2 | 3 | 4 | class SomeComponent extends Component { 5 | getChildContext() { 6 | return { 7 | aboveTheFoldOnlyServerRender: { 8 | CoolComponent: true, 9 | NeatComponent: false 10 | } 11 | }; 12 | } 13 | 14 | render() { 15 | return ( 16 |
17 | {this.props.children} 18 |
19 | ); 20 | } 21 | } 22 | 23 | SomeComponent.propTypes = { 24 | children: PropTypes.oneOfType([ 25 | PropTypes.arrayOf(PropTypes.node), 26 | PropTypes.node 27 | ]) 28 | }; 29 | 30 | SomeComponent.childContextTypes = { 31 | aboveTheFoldOnlyServerRender: PropTypes.shape({ 32 | CoolComponent: PropTypes.bool, 33 | NeatComponent: PropTypes.bool 34 | }) 35 | }; 36 | 37 | export default SomeComponent; 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "above-the-fold-only-server-render", 3 | "version": "1.1.0", 4 | "description": "A React component wrapper for optionally skipping SSR.", 5 | "main": "lib/index.js", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/electrode-io/above-the-fold-only-server-render.git" 9 | }, 10 | "bugs": { 11 | "url": "https://github.com/electrode-io/above-the-fold-only-server-render/issues" 12 | }, 13 | "homepage": "https://github.com/electrode-io/above-the-fold-only-server-render", 14 | "scripts": { 15 | "prepublish": "gulp prepublish", 16 | "test": "gulp test" 17 | }, 18 | "license": "Apache-2.0", 19 | "dependencies": { 20 | "lodash": "^4.0.0" 21 | }, 22 | "devDependencies": { 23 | "electrode-archetype-react-component": "^1.1.1", 24 | "electrode-archetype-react-component-dev": "^1.1.1" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /components.md: -------------------------------------------------------------------------------- 1 | # (above-the-fold-only-server-render) 2 | 3 | A React component wrapper for optionally skipping SSR. 4 | 5 | 6 | ## AboveTheFoldOnlyServerRender 7 | 8 | A component for configurable skip loading. 9 | 10 | ### Properties 11 | 12 | | Property | Type | Description | Default | 13 | | -------- | ---- | ----------- | ------- | 14 | | *contextKey* | string | Tell AboveTheFoldOnlyServerRender to read context in order to skip server side rendering | 15 | | *placeholder* | element | Pass in another element to render when skipping server side rendering | 16 | | *placeholderClassName* | string | Sets the className of the default placeholder | 17 | | *placeholderStyle* | object | Sets the style of the default placeholder | 18 | | *skip* | bool | Tell AboveTheFoldOnlyServerRender to skip server side rendering | `false` 19 | 20 | ### import 21 | 22 | ```jsx 23 | import {AboveTheFoldOnlyServerRender} from "above-the-fold-only-server-render"; 24 | ``` 25 | 26 |
27 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "library": "above-the-fold-only-server-render", 3 | "description": "A React component wrapper for optionally skipping SSR.", 4 | "components": [ 5 | { 6 | "methods": [ 7 | { 8 | "name": "_onShow", 9 | "docblock": null, 10 | "modifiers": [], 11 | "params": [], 12 | "returns": { 13 | "type": { 14 | "name": "void" 15 | } 16 | } 17 | } 18 | ], 19 | "props": { 20 | "contextKey": { 21 | "type": { 22 | "name": "string" 23 | }, 24 | "required": false, 25 | "description": "Tell AboveTheFoldOnlyServerRender to read context in order to skip server side rendering" 26 | }, 27 | "placeholder": { 28 | "type": { 29 | "name": "element" 30 | }, 31 | "required": false, 32 | "description": "Pass in another element to render when skipping server side rendering" 33 | }, 34 | "placeholderClassName": { 35 | "type": { 36 | "name": "string" 37 | }, 38 | "required": false, 39 | "description": "Sets the className of the default placeholder" 40 | }, 41 | "placeholderStyle": { 42 | "type": { 43 | "name": "object" 44 | }, 45 | "required": false, 46 | "description": "Sets the style of the default placeholder" 47 | }, 48 | "skip": { 49 | "type": { 50 | "name": "bool" 51 | }, 52 | "required": false, 53 | "defaultValue": { 54 | "value": "false", 55 | "computed": false 56 | }, 57 | "description": "Tell AboveTheFoldOnlyServerRender to skip server side rendering" 58 | } 59 | }, 60 | "fileName": "./src/components/above-the-fold-only-server-render.jsx", 61 | "description": "A component for configurable skip loading.", 62 | "examples": "```jsx\n\n