ff-stream-web

git clone git://archive.git.mtrnord.blog/MTRNord/ff-stream-web.git
Log | Files | Refs | README | LICENSE

commit 4ce8e50226b1f636d7f0e42f9e2a30ed5e60a7b3
parent ee86d9041275f4d51dc4895235e0ce5cd09276a7
Author: Konstantin Tarkus <koistya@gmail.com>
Date:   Tue, 16 Dec 2014 11:02:24 +0300

Merge pull request #44 from kriasoft/new-project-structure

Refactor the directory strucure
Diffstat:
MREADME.md | 8+++++---
Mgulpfile.js | 5+++--
Mpackage.json | 1+
Msrc/app.js | 4++--
Dsrc/components/Link.js | 31-------------------------------
Dsrc/components/Navbar.js | 29-----------------------------
Asrc/components/common/Link.js | 31+++++++++++++++++++++++++++++++
Asrc/components/forms/TextBox.js | 40++++++++++++++++++++++++++++++++++++++++
Asrc/components/forms/TextBox.less | 10++++++++++
Asrc/components/layout/App.js | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/components/layout/Navbar.js | 29+++++++++++++++++++++++++++++
Rsrc/components/__tests__/Navbar-test.js -> src/components/layout/__tests__/Navbar-test.js | 0
Rsrc/pages/404.html -> src/components/pages/404.html | 0
Asrc/components/pages/Home.js | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/components/pages/Privacy.js | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rsrc/pages/_template.html -> src/components/pages/index.html | 0
Dsrc/layouts/DefaultLayout.js | 79-------------------------------------------------------------------------------
Dsrc/pages/Index.js | 62--------------------------------------------------------------
Dsrc/pages/Privacy.js | 81-------------------------------------------------------------------------------
19 files changed, 343 insertions(+), 289 deletions(-)

diff --git a/README.md b/README.md @@ -40,12 +40,14 @@ utilizing a unidirectional data flow. ├── /src/ # The source code of the application │ ├── /actions/ # Action creators that allow to trigger a dispatch to stores │ ├── /assets/ # Static files which are copied to ./build on compile -│ ├── /components/ # React components. E.g. Navbar.jsx, Calendar.jsx +│ ├── /components/ # React components +│ │ ├── /common/ # - Shared components. E.g. Link.js +│ │ ├── /forms/ # - Form components. E.g. TextBox.js +│ │ ├── /layout/ # - Layout components. E.g. Navbar.js +│ │ └── /pages/ # - Web-page components. E.g. About.js │ ├── /constants/ # Enumerations used in action creators and stores │ ├── /core/ # Core components (Flux dispatcher, base classes) │ ├── /images/ # Graphics (.png, .jpg, .svg etc.) -│ ├── /layouts/ # Shared layouts for top-level components -│ ├── /pages/ # Top-level, URL-bound React components │ ├── /stores/ # Stores contain the application state and logic │ ├── /styles/ # CSS style sheets (or LESS, SASS, Stylus) │ ├── /app.js # The application's main file (entry point) diff --git a/gulpfile.js b/gulpfile.js @@ -107,7 +107,7 @@ gulp.task('images', function() { // HTML pages gulp.task('pages', function() { - src.pages = ['src/pages/**/*.js', 'src/pages/404.html']; + src.pages = ['src/components/pages/**/*.js', 'src/components/pages/404.html']; var currentPage = {}; var Dispatcher = require('./src/core/Dispatcher'); @@ -123,7 +123,7 @@ gulp.task('pages', function() { }); var render = $.render({ - template: './src/pages/_template.html', + template: './src/components/pages/index.html', data: function() { return currentPage; } }) .on('error', function(err) { console.log(err); render.end(); }); @@ -137,6 +137,7 @@ gulp.task('pages', function() { collapseWhitespace: true, minifyJS: true }), $.jsbeautifier())) + .pipe($.if('**/home.html', $.rename('index.html'))) .pipe(gulp.dest(DEST)) .pipe($.size({title: 'pages'})); }); diff --git a/package.json b/package.json @@ -31,6 +31,7 @@ "gulp-load-plugins": "^0.8.0", "gulp-minify-css": "^0.3.11", "gulp-plumber": "^0.6.6", + "gulp-rename": "^1.2.0", "gulp-render": "^0.2.1", "gulp-replace": "^0.5.0", "gulp-size": "^1.1.0", diff --git a/src/app.js b/src/app.js @@ -54,8 +54,8 @@ function render(page) { // Define URL routes // See https://github.com/flatiron/director var routes = { - '/': () => render(require('./pages/Index')), - '/privacy': () => render(require('./pages/Privacy')) + '/': () => render(require('./components/pages/Home')), + '/privacy': () => render(require('./components/pages/Privacy')) }; // Initialize a router diff --git a/src/components/Link.js b/src/components/Link.js @@ -1,31 +0,0 @@ -/* - * React.js Starter Kit - * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. - * - * This source code is licensed under the MIT license found in the - * LICENSE.txt file in the root directory of this source tree. - */ - -'use strict'; - -var React = require('react'); -var RouteActions = require('../actions/RouteActions'); - -var Link = React.createClass({ - propTypes: { - to: React.PropTypes.string.isRequired - }, - render() { - this.props.href = - this.props.to && this.props.to.lastIndexOf('/', 0) === 0 ? - this.props.to : '/' + this.props.to; - - return <a onClick={this.handleClick} {...this.props}>{this.props.children}</a>; - }, - handleClick(e) { - e.preventDefault(); - RouteActions.setRoute(this.props.to); - } -}); - -module.exports = Link; diff --git a/src/components/Navbar.js b/src/components/Navbar.js @@ -1,29 +0,0 @@ -/* - * React.js Starter Kit - * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. - * - * This source code is licensed under the MIT license found in the - * LICENSE.txt file in the root directory of this source tree. - */ - -'use strict'; - -var React = require('react'); -var Link = require('./Link'); - -var Navbar = React.createClass({ - render() { - return ( - <div className="navbar-top" role="navigation"> - <div className="container"> - <Link className="navbar-brand row" to="/"> - <img src="/images/logo-small.png" width="38" height="38" alt="React" /> - <span>React.js Starter Kit</span> - </Link> - </div> - </div> - ); - } -}); - -module.exports = Navbar; diff --git a/src/components/common/Link.js b/src/components/common/Link.js @@ -0,0 +1,31 @@ +/* + * React.js Starter Kit + * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. + * + * This source code is licensed under the MIT license found in the + * LICENSE.txt file in the root directory of this source tree. + */ + +'use strict'; + +var React = require('react'); +var RouteActions = require('../../actions/RouteActions'); + +var Link = React.createClass({ + propTypes: { + to: React.PropTypes.string.isRequired + }, + render() { + this.props.href = + this.props.to && this.props.to.lastIndexOf('/', 0) === 0 ? + this.props.to : '/' + this.props.to; + + return <a onClick={this.handleClick} {...this.props}>{this.props.children}</a>; + }, + handleClick(e) { + e.preventDefault(); + RouteActions.setRoute(this.props.to); + } +}); + +module.exports = Link; diff --git a/src/components/forms/TextBox.js b/src/components/forms/TextBox.js @@ -0,0 +1,40 @@ +/* + * React.js Starter Kit + * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. + * + * This source code is licensed under the MIT license found in the + * LICENSE.txt file in the root directory of this source tree. + */ + +'use strict'; + +require('./TextBox.less'); + +var React = require('react'); + +var TextBox = React.createClass({ + + propTypes: { + maxLines: React.PropTypes.number + }, + + getDefaultProps() { + return { + maxLines: 1 + }; + }, + + render() { + return ( + <div className="TextBox"> + {this.props.maxLines > 1 ? + <textarea {...this.props} className="TextBox-input" ref="input" key="input" rows={this.props.maxLines} /> : + <input {...this.props} className="TextBox-input" ref="input" key="input" />} + </div> + ); + } + +}); + +module.exports = TextBox; + diff --git a/src/components/forms/TextBox.less b/src/components/forms/TextBox.less @@ -0,0 +1,10 @@ +/* + * React.js Starter Kit + * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. + * + * This source code is licensed under the MIT license found in the + * LICENSE.txt file in the root directory of this source tree. + */ + +.TextBox {} +.TextBox-input {} diff --git a/src/components/layout/App.js b/src/components/layout/App.js @@ -0,0 +1,79 @@ +/* + * React.js Starter Kit + * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. + * + * This source code is licensed under the MIT license found in the + * LICENSE.txt file in the root directory of this source tree. + */ + +'use strict'; + +var React = require('react'); +var PageStore = require('../../stores/PageStore'); +var Link = require('../common/Link'); +var Navbar = require('../layout/Navbar'); + +/** + * Retrieves the current page metadata from the PageStore. + * @returns {{title: string}} + */ +function getState() { + return { + title: PageStore.get().title + }; +} + +var DefaultLayout = React.createClass({ + + mixins: [PageStore.Mixin], + + getInitialState() { + return getState(); + }, + + componentDidMount() { + PageStore.emitChange(); + }, + + render() { + var header = this.props.children.type.breadcrumb ? ( + <div className="container"> + <h2>{this.state.title}</h2> + {this.props.children.type.breadcrumb} + </div> + ) : ( + <div className="jumbotron"> + <div className="container text-center"> + <h1>React</h1> + <p>Complex web apps made easy</p> + </div> + </div> + ); + + return ( + <div> + <Navbar /> + {header} + {this.props.children} + <div className="navbar-footer"> + <div className="container"> + <p className="text-muted"> + <span>© KriaSoft</span> + <span><Link to="/">Home</Link></span> + <span><Link to="/privacy">Privacy</Link></span> + </p> + </div> + </div> + </div> + ); + }, + + /** + * Event handler for 'change' events coming from the PageStore. + */ + onChange() { + this.setState(getState()); + } +}); + +module.exports = DefaultLayout; diff --git a/src/components/layout/Navbar.js b/src/components/layout/Navbar.js @@ -0,0 +1,29 @@ +/* + * React.js Starter Kit + * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. + * + * This source code is licensed under the MIT license found in the + * LICENSE.txt file in the root directory of this source tree. + */ + +'use strict'; + +var React = require('react'); +var Link = require('../common/Link'); + +var Navbar = React.createClass({ + render() { + return ( + <div className="navbar-top" role="navigation"> + <div className="container"> + <Link className="navbar-brand row" to="/"> + <img src="/images/logo-small.png" width="38" height="38" alt="React" /> + <span>React.js Starter Kit</span> + </Link> + </div> + </div> + ); + } +}); + +module.exports = Navbar; diff --git a/src/components/__tests__/Navbar-test.js b/src/components/layout/__tests__/Navbar-test.js diff --git a/src/pages/404.html b/src/components/pages/404.html diff --git a/src/components/pages/Home.js b/src/components/pages/Home.js @@ -0,0 +1,62 @@ +/* + * React.js Starter Kit + * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. + * + * This source code is licensed under the MIT license found in the + * LICENSE.txt file in the root directory of this source tree. + */ + +'use strict'; + +var React = require('react'); +var PageActions = require('../../actions/PageActions'); +var App = require('../layout/App'); + +var HomePage = React.createClass({ + + statics: { + layout: App + }, + + componentWillMount() { + PageActions.set({title: 'React.js Starter Kit'}); + }, + + render() { + return ( + <div className="container"> + <div className="row"> + <div className="col-sm-4"> + <h3>Runtime Components</h3> + <dl> + <dt><a href="https://facebook.github.io/react/">React</a></dt> + <dd>A JavaScript library for building user interfaces, developed by Facebook</dd> + <dt><a href="https://github.com/flatiron/director">Director</a></dt> + <dd>A tiny and isomorphic URL router for JavaScript</dd> + <dt><a href="http://getbootstrap.com/">Bootstrap</a></dt> + <dd>CSS framework for developing responsive, mobile first interfaces</dd> + </dl> + </div> + <div className="col-sm-4"> + <h3>Development Tools</h3> + <dl> + <dt><a href="http://gulpjs.com">Gulp</a></dt> + <dd>JavaScript streaming build system and task automation</dd> + <dt><a href="http://webpack.github.io/">Webpack</a></dt> + <dd>Compiles front-end source code into modules / bundles</dd> + <dt><a href="http://www.browsersync.io/">BrowserSync</a></dt> + <dd>A lightweight HTTP server for development</dd> + </dl> + </div> + <div className="col-sm-4"> + <h3>Fork me on GitHub</h3> + <p><a href="https://github.com/kriasoft/react-starter-kit">github.com/kriasoft/react-starter-kit</a></p> + </div> + </div> + </div> + ); + } + +}); + +module.exports = HomePage; diff --git a/src/components/pages/Privacy.js b/src/components/pages/Privacy.js @@ -0,0 +1,81 @@ +/* + * React.js Starter Kit + * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. + * + * This source code is licensed under the MIT license found in the + * LICENSE.txt file in the root directory of this source tree. + */ + +'use strict'; + +var React = require('react'); +var PageActions = require('../../actions/PageActions'); +var App = require('../layout/App'); +var Link = require('../common/Link'); + +var PrivacyPage = React.createClass({ + + statics: { + layout: App, + breadcrumb: ( + <ol className="breadcrumb"> + <li><Link to="/">Home</Link></li> + <li className="active">Privacy</li> + </ol> + ) + }, + + componentWillMount() { + PageActions.set({title: 'Privacy Policy'}); + }, + + render() { + return ( + <div className="container"> + <p> + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean consequat tortor fermentum mi + fermentum dignissim. Nullam vel ipsum ut ligula elementum lobortis. Maecenas aliquam, massa laoreet + lacinia pretium, nisi urna venenatis tortor, nec imperdiet tellus libero efficitur metus. Fusce + semper posuere ligula, et facilisis metus bibendum interdum. Mauris at mauris sit amet sem pharetra + commodo a eu leo. Nam at est non risus cursus maximus. Nam feugiat augue libero, id consectetur + tortor bibendum non. Quisque nec fringilla lorem. Nullam efficitur vulputate mauris, nec maximus leo + dignissim id. + </p> + <p> + In hac habitasse platea dictumst. Duis sagittis dui ac ex suscipit maximus. Morbi pellentesque + venenatis felis sed convallis. Nulla varius, nibh vitae placerat tempus, mauris sem elementum ipsum, + eget sollicitudin nisl est vel purus. Fusce malesuada odio velit, non cursus leo fermentum id. Cras + pharetra sodales fringilla. Etiam quis est a dolor egestas pellentesque. Maecenas non scelerisque + purus, congue cursus arcu. Donec vel dapibus mi. Mauris maximus posuere placerat. Sed et libero eu + nibh tristique mollis a eget lectus. Donec interdum augue sollicitudin vehicula hendrerit. Vivamus + justo orci, molestie ac sollicitudin ac, lobortis at tellus. Etiam rhoncus ullamcorper risus eu + tempor. Sed porttitor, neque ac efficitur gravida, arcu lacus pharetra dui, in consequat elit tellus + auctor nulla. Donec placerat elementum diam, vitae imperdiet lectus luctus at. + </p> + <p> + Nullam eu feugiat mi. Quisque nec tristique nisl, dignissim dictum leo. Nam non quam nisi. Donec + rutrum turpis ac diam blandit, id pulvinar mauris suscipit. Pellentesque tincidunt libero ultricies + risus iaculis, sit amet consequat velit blandit. Fusce quis varius nulla. Nullam nisi nisi, suscipit + ut magna quis, feugiat porta nibh. Sed id enim lectus. Suspendisse elementum justo sapien, sit amet + consequat orci accumsan et. Aliquam ornare ullamcorper sem sed finibus. Nullam ac lacus pulvinar, + egestas felis ut, accumsan est. + </p> + <p> + Pellentesque sagittis vehicula sem quis luctus. Proin sodales magna in lorem hendrerit aliquam. + Integer eu varius orci. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere + cubilia Curae; Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia + Curae; Ut at mauris nibh. Suspendisse maximus ac eros at vestibulum. + </p> + <p> + Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque egestas tortor et dui + consequat faucibus. Nunc vitae odio ornare, venenatis ligula a, vulputate nisl. Aenean congue varius + ex, sit amet bibendum odio posuere at. Nulla facilisi. In finibus, nulla vitae tincidunt ornare, + sapien nulla fermentum mauris, sed consectetur tortor arcu eget arcu. Vestibulum vel quam enim. + </p> + </div> + ); + } + +}); + +module.exports = PrivacyPage; diff --git a/src/pages/_template.html b/src/components/pages/index.html diff --git a/src/layouts/DefaultLayout.js b/src/layouts/DefaultLayout.js @@ -1,79 +0,0 @@ -/* - * React.js Starter Kit - * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. - * - * This source code is licensed under the MIT license found in the - * LICENSE.txt file in the root directory of this source tree. - */ - -'use strict'; - -var React = require('react'); -var PageStore = require('../stores/PageStore'); -var Link = require('../components/Link'); -var Navbar = require('../components/Navbar'); - -/** - * Retrieves the current page metadata from the PageStore. - * @returns {{title: string}} - */ -function getState() { - return { - title: PageStore.get().title - }; -} - -var DefaultLayout = React.createClass({ - - mixins: [PageStore.Mixin], - - getInitialState() { - return getState(); - }, - - componentDidMount() { - PageStore.emitChange(); - }, - - render() { - var header = this.props.children.type.breadcrumb ? ( - <div className="container"> - <h2>{this.state.title}</h2> - {this.props.children.type.breadcrumb} - </div> - ) : ( - <div className="jumbotron"> - <div className="container text-center"> - <h1>React</h1> - <p>Complex web apps made easy</p> - </div> - </div> - ); - - return ( - <div> - <Navbar /> - {header} - {this.props.children} - <div className="navbar-footer"> - <div className="container"> - <p className="text-muted"> - <span>© KriaSoft</span> - <span><Link to="/">Home</Link></span> - <span><Link to="/privacy">Privacy</Link></span> - </p> - </div> - </div> - </div> - ); - }, - - /** - * Event handler for 'change' events coming from the PageStore. - */ - onChange() { - this.setState(getState()); - } -}); - -module.exports = DefaultLayout; diff --git a/src/pages/Index.js b/src/pages/Index.js @@ -1,62 +0,0 @@ -/* - * React.js Starter Kit - * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. - * - * This source code is licensed under the MIT license found in the - * LICENSE.txt file in the root directory of this source tree. - */ - -'use strict'; - -var React = require('react'); -var PageActions = require('../actions/PageActions'); -var DefaultLayout = require('../layouts/DefaultLayout'); - -var HomePage = React.createClass({ - - statics: { - layout: DefaultLayout - }, - - componentWillMount() { - PageActions.set({title: 'React.js Starter Kit'}); - }, - - render() { - return ( - <div className="container"> - <div className="row"> - <div className="col-sm-4"> - <h3>Runtime Components</h3> - <dl> - <dt><a href="https://facebook.github.io/react/">React</a></dt> - <dd>A JavaScript library for building user interfaces, developed by Facebook</dd> - <dt><a href="https://github.com/flatiron/director">Director</a></dt> - <dd>A tiny and isomorphic URL router for JavaScript</dd> - <dt><a href="http://getbootstrap.com/">Bootstrap</a></dt> - <dd>CSS framework for developing responsive, mobile first interfaces</dd> - </dl> - </div> - <div className="col-sm-4"> - <h3>Development Tools</h3> - <dl> - <dt><a href="http://gulpjs.com">Gulp</a></dt> - <dd>JavaScript streaming build system and task automation</dd> - <dt><a href="http://webpack.github.io/">Webpack</a></dt> - <dd>Compiles front-end source code into modules / bundles</dd> - <dt><a href="http://www.browsersync.io/">BrowserSync</a></dt> - <dd>A lightweight HTTP server for development</dd> - </dl> - </div> - <div className="col-sm-4"> - <h3>Fork me on GitHub</h3> - <p><a href="https://github.com/kriasoft/react-starter-kit">github.com/kriasoft/react-starter-kit</a></p> - </div> - </div> - </div> - ); - } - -}); - -module.exports = HomePage; diff --git a/src/pages/Privacy.js b/src/pages/Privacy.js @@ -1,81 +0,0 @@ -/* - * React.js Starter Kit - * Copyright (c) 2014 Konstantin Tarkus (@koistya), KriaSoft LLC. - * - * This source code is licensed under the MIT license found in the - * LICENSE.txt file in the root directory of this source tree. - */ - -'use strict'; - -var React = require('react'); -var PageActions = require('../actions/PageActions'); -var DefaultLayout = require('../layouts/DefaultLayout'); -var Link = require('../components/Link'); - -var PrivacyPage = React.createClass({ - - statics: { - layout: DefaultLayout, - breadcrumb: ( - <ol className="breadcrumb"> - <li><Link to="/">Home</Link></li> - <li className="active">Privacy</li> - </ol> - ) - }, - - componentWillMount() { - PageActions.set({title: 'Privacy Policy'}); - }, - - render() { - return ( - <div className="container"> - <p> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean consequat tortor fermentum mi - fermentum dignissim. Nullam vel ipsum ut ligula elementum lobortis. Maecenas aliquam, massa laoreet - lacinia pretium, nisi urna venenatis tortor, nec imperdiet tellus libero efficitur metus. Fusce - semper posuere ligula, et facilisis metus bibendum interdum. Mauris at mauris sit amet sem pharetra - commodo a eu leo. Nam at est non risus cursus maximus. Nam feugiat augue libero, id consectetur - tortor bibendum non. Quisque nec fringilla lorem. Nullam efficitur vulputate mauris, nec maximus leo - dignissim id. - </p> - <p> - In hac habitasse platea dictumst. Duis sagittis dui ac ex suscipit maximus. Morbi pellentesque - venenatis felis sed convallis. Nulla varius, nibh vitae placerat tempus, mauris sem elementum ipsum, - eget sollicitudin nisl est vel purus. Fusce malesuada odio velit, non cursus leo fermentum id. Cras - pharetra sodales fringilla. Etiam quis est a dolor egestas pellentesque. Maecenas non scelerisque - purus, congue cursus arcu. Donec vel dapibus mi. Mauris maximus posuere placerat. Sed et libero eu - nibh tristique mollis a eget lectus. Donec interdum augue sollicitudin vehicula hendrerit. Vivamus - justo orci, molestie ac sollicitudin ac, lobortis at tellus. Etiam rhoncus ullamcorper risus eu - tempor. Sed porttitor, neque ac efficitur gravida, arcu lacus pharetra dui, in consequat elit tellus - auctor nulla. Donec placerat elementum diam, vitae imperdiet lectus luctus at. - </p> - <p> - Nullam eu feugiat mi. Quisque nec tristique nisl, dignissim dictum leo. Nam non quam nisi. Donec - rutrum turpis ac diam blandit, id pulvinar mauris suscipit. Pellentesque tincidunt libero ultricies - risus iaculis, sit amet consequat velit blandit. Fusce quis varius nulla. Nullam nisi nisi, suscipit - ut magna quis, feugiat porta nibh. Sed id enim lectus. Suspendisse elementum justo sapien, sit amet - consequat orci accumsan et. Aliquam ornare ullamcorper sem sed finibus. Nullam ac lacus pulvinar, - egestas felis ut, accumsan est. - </p> - <p> - Pellentesque sagittis vehicula sem quis luctus. Proin sodales magna in lorem hendrerit aliquam. - Integer eu varius orci. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere - cubilia Curae; Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia - Curae; Ut at mauris nibh. Suspendisse maximus ac eros at vestibulum. - </p> - <p> - Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque egestas tortor et dui - consequat faucibus. Nunc vitae odio ornare, venenatis ligula a, vulputate nisl. Aenean congue varius - ex, sit amet bibendum odio posuere at. Nulla facilisi. In finibus, nulla vitae tincidunt ornare, - sapien nulla fermentum mauris, sed consectetur tortor arcu eget arcu. Vestibulum vel quam enim. - </p> - </div> - ); - } - -}); - -module.exports = PrivacyPage;