couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From robertkowal...@apache.org
Subject [1/2] fauxton commit: updated refs/heads/master to a231a4e
Date Thu, 08 Dec 2016 10:16:48 GMT
Repository: couchdb-fauxton
Updated Branches:
  refs/heads/master 2cec2e4d9 -> a231a4e4a


http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/addons/styletests/styletests.react.jsx
----------------------------------------------------------------------
diff --git a/app/addons/styletests/styletests.react.jsx b/app/addons/styletests/styletests.react.jsx
deleted file mode 100644
index bbb3049..0000000
--- a/app/addons/styletests/styletests.react.jsx
+++ /dev/null
@@ -1,525 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-import app from "app";
-import FauxtonAPI from "api";
-import React from "react";
-
-
-var StyleTests = React.createClass({
-
-  render: function () {
-    return (
-      <div className="container theme-showcase">
-
-        <div className="jumbotron">
-          <h1>Fauxton Style Guide <small>mostly made of Bootstrap 2.x</small></h1>
-          <p>(Mostly) Standard Bootstrap styles customized for Fauxton.</p>
-        </div>
-
-        <div className="page-header">
-          <h1>Typography</h1>
-        </div>
-        <h1>h1. Heading 1</h1>
-        <h2>h2. Heading 2</h2>
-        <h3>h3. Heading 3</h3>
-        <h4>h4. Heading 4</h4>
-        <h5>h5. Heading 5</h5>
-        <h6>h6. Heading 6</h6>
-
-        <div className="page-header">
-          <h1>Buttons</h1>
-        </div>
-
-        <h4>Bootstrap Standard Button className names</h4>
-        <p>.btn.btn-large.btn-*<br />
-          <button type="button" className="btn btn-large btn-default">Default</button>
-          <button type="button" className="btn btn-large btn-primary">Primary</button>
-          <button type="button" className="btn btn-large btn-success">Success</button>
-          <button type="button" className="btn btn-large btn-info">Info</button>
-          <button type="button" className="btn btn-large btn-warning">Warning</button>
-          <button type="button" className="btn btn-large btn-danger">Danger</button>
-          <button type="button" className="btn btn-large btn-link">Link</button>
-        </p>
-        <p>.btn.btn-*<br />
-          <button type="button" className="btn btn-default">Default</button>
-          <button type="button" className="btn btn-primary">Primary</button>
-          <button type="button" className="btn btn-success">Success</button>
-          <button type="button" className="btn btn-info">Info</button>
-          <button type="button" className="btn btn-warning">Warning</button>
-          <button type="button" className="btn btn-danger">Danger</button>
-          <button type="button" className="btn btn-link">Link</button>
-        </p>
-        <p>.btn.btn-small.btn-*<br />
-          <button type="button" className="btn btn-small btn-default">Default</button>
-          <button type="button" className="btn btn-small btn-primary">Primary</button>
-          <button type="button" className="btn btn-small btn-success">Success</button>
-          <button type="button" className="btn btn-small btn-info">Info</button>
-          <button type="button" className="btn btn-small btn-warning">Warning</button>
-          <button type="button" className="btn btn-small btn-danger">Danger</button>
-          <button type="button" className="btn btn-small btn-link">Link</button>
-        </p>
-        <p>.btn.btn-mini.btn-*<br />
-          <button type="button" className="btn btn-mini btn-default">Default</button>
-          <button type="button" className="btn btn-mini btn-primary">Primary</button>
-          <button type="button" className="btn btn-mini btn-success">Success</button>
-          <button type="button" className="btn btn-mini btn-info">Info</button>
-          <button type="button" className="btn btn-mini btn-warning">Warning</button>
-          <button type="button" className="btn btn-mini btn-danger">Danger</button>
-          <button type="button" className="btn btn-mini btn-link">Link</button>
-        </p>
-
-        <h4>with Icons</h4>
-        <p>.btn.btn-large.btn-*<br />
-          <button type="button" className="btn btn-large btn-default"><i className="icon fonticon-new-database"></i> Default</button>
-          <button type="button" className="btn btn-large btn-primary"><i className="icon fonticon-new-database"></i> Primary</button>
-          <button type="button" className="btn btn-large btn-success"><i className="icon fonticon-new-database"></i> Success</button>
-          <button type="button" className="btn btn-large btn-info"><i className="icon fonticon-new-database"></i> Info</button>
-          <button type="button" className="btn btn-large btn-warning"><i className="icon fonticon-new-database"></i> Warning</button>
-          <button type="button" className="btn btn-large btn-danger"><i className="icon fonticon-new-database"></i> Danger</button>
-          <button type="button" className="btn btn-large btn-link"><i className="icon fonticon-new-database"></i> Link</button>
-        </p>
-
-        <p>.btn.btn-*<br />
-          <button type="button" className="btn btn-default"><i className="icon fonticon-new-database"></i> Default</button>
-          <button type="button" className="btn btn-primary"><i className="icon fonticon-new-database"></i> Primary</button>
-          <button type="button" className="btn btn-success"><i className="icon fonticon-new-database"></i> Success</button>
-          <button type="button" className="btn btn-info"><i className="icon fonticon-new-database"></i> Info</button>
-          <button type="button" className="btn btn-warning"><i className="icon fonticon-new-database"></i> Warning</button>
-          <button type="button" className="btn btn-danger"><i className="icon fonticon-new-database"></i> Danger</button>
-          <button type="button" className="btn btn-link"><i className="icon fonticon-new-database"></i> Link</button>
-        </p>
-        <p>.btn.btn-small.btn-*<br />
-          <button type="button" className="btn btn-small btn-default"><i className="icon fonticon-new-database"></i> Default</button>
-          <button type="button" className="btn btn-small btn-primary"><i className="icon fonticon-new-database"></i> Primary</button>
-          <button type="button" className="btn btn-small btn-success"><i className="icon fonticon-new-database"></i> Success</button>
-          <button type="button" className="btn btn-small btn-info"><i className="icon fonticon-new-database"></i> Info</button>
-          <button type="button" className="btn btn-small btn-warning"><i className="icon fonticon-new-database"></i> Warning</button>
-          <button type="button" className="btn btn-small btn-danger"><i className="icon fonticon-new-database"></i> Danger</button>
-          <button type="button" className="btn btn-small btn-link"><i className="icon fonticon-new-database"></i> Link</button>
-        </p>
-        <p>.btn.btn-mini.btn-*<br />
-          <button type="button" className="btn btn-mini btn-default"><i className="icon fonticon-new-database"></i> Default</button>
-          <button type="button" className="btn btn-mini btn-primary"><i className="icon fonticon-new-database"></i> Primary</button>
-          <button type="button" className="btn btn-mini btn-success"><i className="icon fonticon-new-database"></i> Success</button>
-          <button type="button" className="btn btn-mini btn-info"><i className="icon fonticon-new-database"></i> Info</button>
-          <button type="button" className="btn btn-mini btn-warning"><i className="icon fonticon-new-database"></i> Warning</button>
-          <button type="button" className="btn btn-mini btn-danger"><i className="icon fonticon-new-database"></i> Danger</button>
-          <button type="button" className="btn btn-mini btn-link"><i className="icon fonticon-new-database"></i> Link</button>
-        </p>
-
-        <h4>just Icons</h4>
-        <p>.btn.btn-large.btn-*<br />
-          <button type="button" className="btn btn-large btn-default"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-large btn-primary"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-large btn-success"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-large btn-info"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-large btn-warning"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-large btn-danger"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-large btn-link"><i className="icon fonticon-new-database"></i></button>
-        </p>
-
-        <p>.btn.btn-*<br />
-          <button type="button" className="btn btn-default"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-primary"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-success"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-info"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-warning"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-danger"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-link"><i className="icon fonticon-new-database"></i></button>
-        </p>
-        <p>.btn.btn-small.btn-*<br />
-          <button type="button" className="btn btn-small btn-default"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-small btn-primary"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-small btn-success"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-small btn-info"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-small btn-warning"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-small btn-danger"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-small btn-link"><i className="icon fonticon-new-database"></i></button>
-        </p>
-        <p>.btn.btn-mini.btn-*<br />
-          <button type="button" className="btn btn-mini btn-default"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-mini btn-primary"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-mini btn-success"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-mini btn-info"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-mini btn-warning"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-mini btn-danger"><i className="icon fonticon-new-database"></i></button>
-          <button type="button" className="btn btn-mini btn-link"><i className="icon fonticon-new-database"></i></button>
-        </p>
-        <p>.btn-group<br />
-          <div className="btn-group">
-            <a href="#" className="btn btn-small edits">Edit design doc</a>
-            <button href="#" className="btn btn-small btn-danger delete" title="Delete this document."><i className="icon icon-trash"></i></button>
-          </div>
-        </p>
-
-        <h4>disabled</h4>
-        <p>.btn.btn-*<br />
-          <button type="button" disabled="disabled" className="btn btn-default"><i className="icon fonticon-new-database"></i> Default</button>
-          <button type="button" disabled="disabled" className="btn btn-primary"><i className="icon fonticon-new-database"></i> Primary</button>
-          <button type="button" disabled="disabled" className="btn btn-success"><i className="icon fonticon-new-database"></i> Success</button>
-          <button type="button" disabled="disabled" className="btn btn-info"><i className="icon fonticon-new-database"></i> Info</button>
-          <button type="button" disabled="disabled" className="btn btn-warning"><i className="icon fonticon-new-database"></i> Warning</button>
-          <button type="button" disabled="disabled" className="btn btn-danger"><i className="icon fonticon-new-database"></i> Danger</button>
-          <button type="button" disabled="disabled" className="btn btn-link"><i className="icon fonticon-new-database"></i> Link</button>
-        </p>
-        <p>.btn.btn-*<br />
-          <button type="button" disabled="disabled" className="btn btn-default">Default</button>
-          <button type="button" disabled="disabled" className="btn btn-primary">Primary</button>
-          <button type="button" disabled="disabled" className="btn btn-success">Success</button>
-          <button type="button" disabled="disabled" className="btn btn-info">Info</button>
-          <button type="button" disabled="disabled" className="btn btn-warning">Warning</button>
-          <button type="button" disabled="disabled" className="btn btn-danger">Danger</button>
-          <button type="button" disabled="disabled" className="btn btn-link">Link</button>
-        </p>
-
-        <div className="page-header">
-          <h1>Forms</h1>
-        </div>
-
-        <form className="navbar-form database-search">
-          <div className="input-append">
-            <input className="search-autocomplete" name="search-query" autoComplete="off" placeholder="Database name" type="text" />
-            <button className="btn btn-primary" type="submit"><i className="icon icon-search"></i></button>
-          </div>
-        </form>
-
-        <form className="navbar-form database-search">
-          <div className="input-append">
-            <input className="search-autocomplete" name="search-query" autoComplete="off" placeholder="Database name" type="text" />
-            <button className="btn btn-primary" type="submit"><i className="icon icon-search"></i> Search</button>
-          </div>
-        </form>
-
-        <form className="navbar-form">
-          <div className="input-append">
-            <input name="search-query" placeholder="Database name" type="text" />
-            <button className="btn btn-primary" type="submit">Search</button>
-          </div>
-        </form>
-
-        <form>
-          <fieldset>
-            <legend>Legend</legend>
-            <label>Label name</label>
-            <input type="text" placeholder="Type something…" />
-            <span className="help-block">Example block-level help text here.</span>
-            <label className="checkbox">
-              <input type="checkbox" /> Check me out
-            </label>
-            <button type="submit" className="btn">Submit</button>
-          </fieldset>
-        </form>
-
-        <p>Search</p>
-        <form className="form-search">
-          <input type="text" className="input-medium search-query" />
-          <button type="submit" className="btn">Search</button>
-        </form>
-
-        <p>Sign in</p>
-        <form className="form-inline">
-          <input type="text" className="input-small" placeholder="Email" />
-          <input type="password" className="input-small" placeholder="Password" />
-          <label className="checkbox">
-            <input type="checkbox" /> Remember me
-          </label>
-          <button type="submit" className="btn">Sign in</button>
-        </form>
-
-        <p>Whole form</p>
-        <form className="form-horizontal">
-        <div className="control-group">
-          <label className="control-label" htmlFor="inputEmail">Email</label>
-          <div className="controls">
-            <input type="text" id="inputEmail" placeholder="Email" />
-          </div>
-        </div>
-        <div className="control-group">
-          <label className="control-label" htmlFor="inputPassword">Password</label>
-          <div className="controls">
-            <input type="password" id="inputPassword" placeholder="Password" />
-          </div>
-        </div>
-        <div className="control-group">
-          <div className="controls">
-            <label className="checkbox">
-              <input type="checkbox" /> Remember me
-            </label>
-            <button type="submit" className="btn">Sign in</button>
-          </div>
-        </div>
-        </form>
-
-        <p>Selects</p>
-        <select>
-          <option>1</option>
-          <option>2</option>
-          <option>3</option>
-          <option>4</option>
-          <option>5</option>
-        </select>
-
-        <select multiple="multiple">
-          <option>1</option>
-          <option>2</option>
-          <option>3</option>
-          <option>4</option>
-          <option>5</option>
-        </select>
-
-        <p>Inputs with pre</p>
-        <div className="input-prepend">
-          <span className="add-on">@</span>
-          <input className="span2" id="prependedInput" type="text" placeholder="Username" />
-        </div>
-        <p>Inputs with post</p>
-        <div className="input-append">
-          <input className="span2" id="appendedInput" type="text" />
-          <span className="add-on">.00</span>
-        </div>
-        <p>Inputs with pre and post</p>
-        <div className="input-prepend input-append">
-          <span className="add-on">$</span>
-          <input className="span2" id="appendedPrependedInput" type="text" />
-          <span className="add-on">.00</span>
-        </div>
-        <p>Inputs with button</p>
-      <div className="input-append">
-        <input className="span2" id="appendedInputButton" type="text" />
-        <button className="btn" type="button">Go!</button>
-      </div>
-        <p>Inputs with two buttons</p>
-      <div className="input-append">
-        <input className="span2" id="appendedInputButtons" type="text" />
-        <button className="btn" type="button">Search</button>
-        <button className="btn" type="button">Options</button>
-      </div>
-      <p>Inputs with dropdown button</p>
-      <div className="input-append">
-        <input className="span2" id="appendedDropdownButton" type="text" />
-        <div className="btn-group">
-          <button className="btn dropdown-toggle" data-toggle="dropdown">
-            Action
-            <span className="caret"></span>
-          </button>
-          <ul className="dropdown-menu">
-            ...
-          </ul>
-        </div>
-      </div>
-      <p>Inputs sizes</p>
-      <input className="input-mini" type="text" placeholder=".input-mini" />
-      <input className="input-small" type="text" placeholder=".input-small" />
-      <input className="input-medium" type="text" placeholder=".input-medium" />
-      <input className="input-large" type="text" placeholder=".input-large" />
-      <input className="input-xlarge" type="text" placeholder=".input-xlarge" />
-      <input className="input-xxlarge" type="text" placeholder=".input-xxlarge" />
-
-
-        <div className="page-header">
-          <h1>Thumbnails</h1>
-        </div>
-      <img src="dashboard.assets/img/ripley.jpeg" className="img-rounded" />
-      <img src="dashboard.assets/img/ripley.jpeg" className="img-circle" />
-      <img src="dashboard.assets/img/ripley.jpeg" className="img-polaroid" />
-
-
-        <div className="page-header">
-          <h1>Dropdown menus</h1>
-        </div>
-        <div className="dropdown theme-dropdown clearfix">
-          <a id="dropdownMenu1" href="#" role="button" className="sr-only dropdown-toggle" data-toggle="dropdown">Dropdown <b className="caret"></b></a>
-          <ul className="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
-            <li role="presentation"><a role="menuitem" tabIndex="-1" href="#">Action</a></li>
-            <li role="presentation"><a role="menuitem" tabIndex="-1" href="#">Another action</a></li>
-            <li role="presentation"><a role="menuitem" tabIndex="-1" href="#">Something else here</a></li>
-            <li role="presentation" className="divider"></li>
-            <li role="presentation"><a role="menuitem" tabIndex="-1" href="#">Separated link</a></li>
-          </ul>
-        </div>
-
-
-
-
-        <div className="page-header">
-          <h1>Navbars</h1>
-        </div>
-
-        <div className="navbar navbar-default">
-          <div className="container">
-            <div className="navbar-header">
-              <button type="button" className="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
-                <span className="icon-bar"></span>
-                <span className="icon-bar"></span>
-                <span className="icon-bar"></span>
-              </button>
-              <a className="navbar-brand" href="#">Project name</a>
-            </div>
-            <div className="navbar-collapse collapse">
-              <ul className="nav navbar-nav">
-                <li className="active"><a href="#">Home</a></li>
-                <li><a href="#about">About</a></li>
-                <li><a href="#contact">Contact</a></li>
-              </ul>
-              <ul className="nav navbar-nav navbar-right">
-                <li><a href="../navbar/">Default</a></li>
-                <li><a href="../navbar-static-top/">Static top</a></li>
-                <li className="active"><a href="./">Fixed top</a></li>
-              </ul>
-            </div>
-          </div>
-        </div>
-
-        <div className="navbar navbar-inverse">
-          <div className="container">
-            <div className="navbar-header">
-              <button type="button" className="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
-                <span className="icon-bar"></span>
-                <span className="icon-bar"></span>
-                <span className="icon-bar"></span>
-              </button>
-              <a className="navbar-brand" href="#">Project name</a>
-            </div>
-            <div className="navbar-collapse collapse">
-              <ul className="nav navbar-nav">
-                <li className="active"><a href="#">Home</a></li>
-                <li><a href="#about">About</a></li>
-                <li><a href="#contact">Contact</a></li>
-              </ul>
-              <ul className="nav navbar-nav navbar-right">
-                <li><a href="../navbar/">Default</a></li>
-                <li><a href="../navbar-static-top/">Static top</a></li>
-                <li className="active"><a href="./">Fixed top</a></li>
-              </ul>
-            </div>
-          </div>
-        </div>
-
-
-
-        <div className="page-header">
-          <h1>Alerts</h1>
-        </div>
-        <div className="alert alert-success">
-          <strong>Well done!</strong> You successfully read this important alert message.
-        </div>
-        <div className="alert alert-info">
-          <strong>Heads up!</strong> This alert needs your attention, but it's not super important.
-        </div>
-        <div className="alert alert-warning">
-          <strong>Warning!</strong> Best check yo self, you're not looking too good.
-        </div>
-        <div className="alert alert-danger">
-          <strong>Oh snap!</strong> Change a few things up and try submitting again.
-        </div>
-
-
-
-        <div className="page-header">
-          <h1>Progresss</h1>
-        </div>
-        <div className="progress">
-          <div className="bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style={{width: '60%'}}><span className="sr-only">60% Complete</span></div>
-        </div>
-        <div className="progress">
-          <div className="bar bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style={{width: '40%'}}><span className="sr-only">40% Complete (success)</span></div>
-        </div>
-        <div className="progress">
-          <div className="bar bar-info" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style={{width: '20%'}}><span className="sr-only">20% Complete</span></div>
-        </div>
-        <div className="progress">
-          <div className="bar bar-warning" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style={{width: '60%'}}><span className="sr-only">60% Complete (warning)</span></div>
-        </div>
-        <div className="progress">
-          <div className="bar bar-danger" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style={{width: '80%'}}><span className="sr-only">80% Complete (danger)</span></div>
-        </div>
-        <div className="progress">
-          <div className="bar bar-success" style={{width: '35%'}}><span className="sr-only">35% Complete (success)</span></div>
-          <div className="bar bar-warning" style={{width: '20%'}}><span className="sr-only">20% Complete (warning)</span></div>
-          <div className="bar bar-danger" style={{width: '10%'}}><span className='sr-only'>10% Complete (danger)</span></div>
-        </div>
-
-
-
-        <div className="page-header">
-          <h1>List groups</h1>
-        </div>
-        <div className="row">
-          <div className="col-sm-4">
-            <ul className="nav nav-tabs nav-stacked">
-              <li className="list-group-item">Cras justo odio</li>
-              <li className="list-group-item">Dapibus ac facilisis in</li>
-              <li className="list-group-item">Morbi leo risus</li>
-              <li className="list-group-item">Porta ac consectetur ac</li>
-              <li className="list-group-item">Vestibulum at eros</li>
-            </ul>
-          </div>
-          <div className="col-sm-4">
-            <div className="nav nav-tabs nav-stacked">
-              <a href="#" className="list-group-item active">
-                Cras justo odio
-              </a>
-              <a href="#" className="list-group-item">Dapibus ac facilisis in</a>
-              <a href="#" className="list-group-item">Morbi leo risus</a>
-              <a href="#" className="list-group-item">Porta ac consectetur ac</a>
-              <a href="#" className="list-group-item">Vestibulum at eros</a>
-            </div>
-          </div>
-          <div className="col-sm-4">
-            <div className="nav nav-tabs nav-stacked">
-              <a href="#" className="list-group-item active">
-                <h4 className="list-group-item-heading">List group item heading</h4>
-                <p className="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>
-              </a>
-              <a href="#" className="list-group-item">
-                <h4 className="list-group-item-heading">List group item heading</h4>
-                <p className="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>
-              </a>
-              <a href="#" className="list-group-item">
-                <h4 className="list-group-item-heading">List group item heading</h4>
-                <p className="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p>
-              </a>
-            </div>
-          </div>
-        </div>
-
-        <div className="page-header">
-          <h1>Wells</h1>
-        </div>
-        <div className="well">
-          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed diam eget risus varius blandit sit amet non magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Aenean lacinia bibendum nulla sed consectetur.</p>
-        </div>
-
-
-      </div>
-    );
-  }
-
-});
-
-export default {
-  StyleTests: StyleTests
-};

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/addons/verifyinstall/routes.js
----------------------------------------------------------------------
diff --git a/app/addons/verifyinstall/routes.js b/app/addons/verifyinstall/routes.js
index 1e36253..73bfae2 100644
--- a/app/addons/verifyinstall/routes.js
+++ b/app/addons/verifyinstall/routes.js
@@ -19,10 +19,6 @@ import Components from "./components.react";
 import {OnePaneSimpleLayout} from '../components/layouts';
 
 const VerifyRouteObject = FauxtonAPI.RouteObject.extend({
-  layout: 'empty',
-  hideApiBar: true,
-  hideNotificationCenter: true,
-
   routes: {
     'verifyinstall': 'verifyInstall'
   },
@@ -30,13 +26,12 @@ const VerifyRouteObject = FauxtonAPI.RouteObject.extend({
 
   verifyInstall: function () {
     Actions.resetStore();
-    this.setComponent('#dashboard-content', Components.VerifyInstallController);
-    this.setComponent('.template', OnePaneSimpleLayout, {
-      component: <Components.VerifyInstallController/>,
-      crumbs: [
+    return <OnePaneSimpleLayout
+      component={<Components.VerifyInstallController/>}
+      crumbs={[
         {name: 'Verify CouchDB Installation'}
-      ]
-    });
+      ]}
+    />;
   }
 });
 

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/app.js
----------------------------------------------------------------------
diff --git a/app/app.js b/app/app.js
index bb449fa..939418c 100644
--- a/app/app.js
+++ b/app/app.js
@@ -19,7 +19,6 @@ import Helpers from "./helpers";
 import Utils from "./core/utils";
 import FauxtonAPI from "./core/api";
 import Couchdb from "./core/couchdbSession";
-import "backbone.layoutmanager";
 import "../assets/less/fauxton.less";
 
 // Make sure we have a console.log
@@ -49,49 +48,11 @@ Object.assign(app, {
   helpers: Helpers
 });
 
-// Localize or create a new JavaScript Template object
-const JST = window.JST = window.JST || {};
-
-// Configure LayoutManager with Backbone Boilerplate defaults
-FauxtonAPI.Layout.configure({
-  // Allow LayoutManager to augment Backbone.View.prototype.
-  manage: true,
-  prefix: 'app/',
-
-  // Inject app/helper.js for shared functionality across all html templates
-  renderTemplate: function (template, context) {
-    return template(_.extend(Helpers, context));
-  },
-
-  fetchTemplate: function (path) {
-    // Initialize done for use in async-mode
-    let done;
-
-    // Concatenate the file extension.
-    path = path + '.html';
-
-    // If cached, use the compiled template.
-    if (JST[path]) {
-      return JST[path];
-    } else {
-      // Put fetch into `async-mode`.
-      done = this.async();
-      // Seek out the template asynchronously.
-      return $.ajax({ url: app.root + path }).then(function (contents) {
-        done(JST[path] = _.template(contents));
-      });
-    }
-  }
-});
-
 FauxtonAPI.setSession(new Couchdb.Session());
 
 // Define your master router on the application namespace and trigger all
 // navigation from this instance.
 FauxtonAPI.config({
-  el: '.wrapper',
-  masterLayout: new FauxtonAPI.Layout(),
-
   // I haven't wrapped these dispatch methods in a action
   // because I don't want to require fauxton/actions in this method.
   addHeaderLink: function (link) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/api.js
----------------------------------------------------------------------
diff --git a/app/core/api.js b/app/core/api.js
index 81a2725..ad59d80 100644
--- a/app/core/api.js
+++ b/app/core/api.js
@@ -11,7 +11,6 @@
 // the License.
 
 import FauxtonAPI from "./base";
-import Layout from "./layout";
 import Router from "./router";
 import RouteObject from "./routeObject";
 import utils from "./utils";
@@ -20,13 +19,14 @@ import constants from "../constants";
 import Flux from "flux";
 import $ from "jquery";
 import Backbone from "backbone";
+import _ from "lodash";
+
 Backbone.$ = $;
 Backbone.ajax = function () {
     return Backbone.$.ajax.apply(Backbone.$, arguments);
   };
 
 Object.assign(FauxtonAPI, {
-  Layout: Layout,
   Router: Router,
   RouteObject: RouteObject,
   utils: utils,
@@ -57,10 +57,6 @@ FauxtonAPI.addRoute = function (route) {
   FauxtonAPI.router.route(route.route, route.name, route.callback);
 };
 
-FauxtonAPI.triggerRouteEvent = function (routeEvent, args) {
-  FauxtonAPI.router.triggerRouteEvent('route:' + routeEvent, args);
-};
-
 var urlPaths = {};
 
 FauxtonAPI.registerUrls = function (namespace, urls) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/auth.js
----------------------------------------------------------------------
diff --git a/app/core/auth.js b/app/core/auth.js
index f0a82f1..5af442b 100644
--- a/app/core/auth.js
+++ b/app/core/auth.js
@@ -12,6 +12,7 @@
 
 import FauxtonAPI from "./base";
 import Backbone from "backbone";
+import _ from "lodash";
 
 // This is not exposed externally as it should not need to be accessed or overridden
 var Auth = function (options) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/base.js
----------------------------------------------------------------------
diff --git a/app/core/base.js b/app/core/base.js
index 510fb7a..ef3d909 100644
--- a/app/core/base.js
+++ b/app/core/base.js
@@ -11,7 +11,7 @@
 // the License.
 
 import Backbone from "backbone";
-import LayoutManager from "backbone.layoutmanager";
+import _ from "lodash";
 var FauxtonAPI = {
   //add default objects
   router: {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/couchdbSession.js
----------------------------------------------------------------------
diff --git a/app/core/couchdbSession.js b/app/core/couchdbSession.js
index 5f18c6b..da3aa14 100644
--- a/app/core/couchdbSession.js
+++ b/app/core/couchdbSession.js
@@ -11,6 +11,8 @@
 // the License.
 
 import FauxtonAPI from "./base";
+import _ from "lodash";
+
 var CouchdbSession = {
   Session: FauxtonAPI.Model.extend({
     url: '/_session',

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/layout.js
----------------------------------------------------------------------
diff --git a/app/core/layout.js b/app/core/layout.js
deleted file mode 100644
index 21ecfd1..0000000
--- a/app/core/layout.js
+++ /dev/null
@@ -1,93 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-import Backbone from "backbone";
-import "backbone.layoutmanager";
-
-// A wrapper of the main Backbone.layoutmanager
-// Allows the main layout of the page to be changed by any plugin.
-var Layout = function () {
-  this.layout = new Backbone.Layout({
-    template: "templates/layouts/empty",
-    className: 'pusher'
-  });
-
-  this.layoutViews = {};
-  this.reactComponents = {};
-  //this views don't ever get removed. An example of this is the main navigation sidebar
-  this.permanentViews = {};
-  this.el = this.layout.el;
-};
-
-Layout.configure = function (options) {
-  Backbone.Layout.configure(options);
-};
-
-// creatings the dashboard object same way backbone does
-_.extend(Layout.prototype, {
-  render: function () {
-    return this.layout.render();
-  },
-
-  setTemplate: function (template) {
-    if (template.prefix) {
-      this.layout.template = template.prefix + template.name;
-    } else {
-      this.layout.template = "templates/layouts/" + template;
-    }
-    // If we're changing layouts all bets are off, so kill off all the
-    // existing views in the layout.
-    _.each(this.layoutViews, function (view) {view.removeView();});
-    this.layoutViews = {};
-    return this.render().promise();
-  },
-
-  setView: function (selector, view, keep) {
-    this.layout.setView(selector, view, false);
-
-    if (!keep) {
-      this.layoutViews[selector] = view;
-    } else {
-      this.permanentViews[selector] = view;
-    }
-
-    return view;
-  },
-
-  renderView: function (selector) {
-    var view = this.layoutViews[selector];
-    if (!view) {
-      return false;
-    } else {
-      return view.render();
-    }
-  },
-
-  removeView: function (selector) {
-    var view = this.layout.getView(selector);
-
-    if (!view) {
-      return false;
-    }
-
-    this.layout.removeView(selector);
-
-    if (this.layoutViews[selector]) {
-      delete this.layoutViews[selector];
-    }
-
-    return true;
-  }
-
-});
-
-export default Layout;

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/routeObject.js
----------------------------------------------------------------------
diff --git a/app/core/routeObject.js b/app/core/routeObject.js
index 61a145f..59f0670 100644
--- a/app/core/routeObject.js
+++ b/app/core/routeObject.js
@@ -14,6 +14,7 @@ import FauxtonAPI from "./base";
 import React from "react";
 import ReactDOM from "react-dom";
 import Backbone from "backbone";
+import _ from "lodash";
 
 var RouteObject = function (options) {
   this._options = options;
@@ -21,318 +22,38 @@ var RouteObject = function (options) {
 
   this._configure(options || {});
   this.initialize.apply(this, arguments);
-  this.addEvents();
-};
-
-var broadcaster = {};
-_.extend(broadcaster, Backbone.Events);
-
-RouteObject.on = function (eventName, fn) {
-  broadcaster.on(eventName, fn);
 };
 
 /* How Route Object events work
- To listen to a specific route objects events:
-
- myRouteObject = FauxtonAPI.RouteObject.extend({
-  events: {
-    "beforeRender": "beforeRenderEvent"
-  },
-
-  beforeRenderEvent: function (view, selector) {
-    console.log('Hey, beforeRenderEvent triggered',arguments);
-  },
- });
-
-  It is also possible to listen to events triggered from all Routeobjects.
-  This is great for more general things like adding loaders, hooks.
-
-  FauxtonAPI.RouteObject.on('beforeRender', function (routeObject, view, selector) {
-    console.log('hey, this will trigger when any routeobject renders a view');
-  });
 
- Current Events to subscribe to:
-  * beforeFullRender -- before a full render is being done
-  * beforeEstablish -- before the routeobject calls establish
-  * afterEstablish -- after the routeobject has run establish
-  * beforeRender -- before a view is rendered
-  * afterRender -- a view is finished being rendered
-  * renderComplete -- all rendering is complete
+Its now very simple. We don't want it to do much. It creates a list of routes. Then each route callback must return
+a React component that will be rendered into the app
 
 */
 
 // Piggy-back on Backbone's self-propagating extend function
 RouteObject.extend = Backbone.Model.extend;
 
-var routeObjectOptions = ["views", "routes", "events", "roles", "crumbs", "layout", "apiUrl", "establish"];
+var routeObjectOptions = ["routes", "roles"];
 
-_.extend(RouteObject.prototype, Backbone.Events, {
+_.extend(RouteObject.prototype, {
   // Should these be default vals or empty funcs?
-  views: {},
   routes: {},
-  events: {},
-  crumbs: [],
-  layout: "empty",
-  apiUrl: null,
-  hideNotificationPanel: null,
-  loaderClassname: 'loader',
-  renderedState: false,
-  establish: function () {},
   route: function () {},
   roles: [],
-  _promises: [],
   initialize: function () {}
 }, {
 
-  renderWith: function (route, masterLayout, args) {
-
-    // set the options for this render
-    var options = {
-      masterLayout: masterLayout,
-      route: route,
-      args: args
-    };
-
-    var promiseLayout = this.setTemplateOnFullRender(masterLayout);
-
-    this.triggerBroadcast('beforeEstablish');
-
-    var renderAllViews = _.bind(this.renderAllViews, this, options),
-        establishError = _.bind(this.establishError, this),
-        renderComplete = _.bind(this.renderComplete, this),
-        callEstablish = _.bind(this.callEstablish, this),
-        renderReactComponents = _.bind(this.renderReactComponents, this);
-
-    const promise = this.establish();
-
-    // Only start the view rendering process once the template has been rendered
-    // otherwise we get double renders
-    promiseLayout.then(function () {
-      renderReactComponents();
-
-      callEstablish(promise)
-        .then(renderAllViews, establishError)
-        .then(renderComplete, (err) => {
-          console.error('renderpipeline broke');
-          console.error('check your establish method');
-
-          console.log(this.establish.toString());
-          console.error(err);
-        });
-
-
-    }.bind(this));
-  },
-
-  setTemplateOnFullRender: function (masterLayout) {
-
-    var promise = $.Deferred();
-
-    // Only want to redo the template if its a full render
-    if (!this.renderedState) {
-      this.triggerBroadcast('beforeFullRender');
-      masterLayout.setTemplate(this.layout).then(promise.resolve, promise.reject);
-    } else {
-      promise.resolve();
-    }
-
-    return promise;
-  },
-
-  renderReactComponents: function () {
-    _.each(this.reactComponents, function (componentInfo, selector) {
-      if ($(selector)[0]) {
-        ReactDOM.render(React.createElement(componentInfo.component, componentInfo.props), $(selector)[0]);
-      }
-    });
-  },
-
-  callEstablish: function (establishPromise) {
-    this.addPromise(establishPromise);
-    return FauxtonAPI.when(establishPromise);
-  },
-
-  renderAllViews: function (options, resp) {
-    var routeObject = this,
-        renderView = _.bind(this.renderView, this, routeObject, options);
-
-    this.triggerBroadcast('afterEstablish');
-
-    var promises = _.map(routeObject.getViews(), renderView, this);
-    return FauxtonAPI.when(promises);
-  },
-
-  renderView: function (routeObject, options, view, selector) {
-    var viewInfo = {
-      view: view,
-      selector: selector,
-      masterLayout: options.masterLayout
-    };
-
-    var renderViewOnLayout = _.bind(this.renderViewOnLayout, this, viewInfo);
-
-    if (view.hasRendered) {
-      this.triggerBroadcast('viewHasRendered', view, selector);
-      return;
-    }
-
-    this.triggerBroadcast('beforeRender', view, selector);
-
-    return this.callEstablish(view.establish()).then(renderViewOnLayout, this.establishError);
-  },
-
-  renderViewOnLayout: function (viewInfo, resp, xhr) {
-    var masterLayout = viewInfo.masterLayout,
-        triggerBroadcast = _.bind(this.triggerBroadcast, this);
-
-    masterLayout.setView(viewInfo.selector, viewInfo.view);
-    var promise = masterLayout.renderView(viewInfo.selector).promise();
-
-    promise.then(function () {
-      triggerBroadcast('afterRender', viewInfo.view, viewInfo.selector);
-    });
-
-    return promise;
-  },
-
-  establishError: function (resp) {
-    if (!resp || !resp.responseText) { return; }
-    FauxtonAPI.addNotification({
-          msg: 'An Error occurred: ' + JSON.parse(resp.responseText).reason,
-          type: 'error',
-          clear: true
-    });
-  },
-
-  renderComplete: function () {
-    // Track that we've done a full initial render
-    this.setRenderedState(true);
-    this.triggerBroadcast('renderComplete');
-  },
-
-  setRenderedState: function (bool) {
-    this.renderedState = bool;
-  },
-
-  triggerBroadcast: function (eventName) {
-    var args = Array.prototype.slice.call(arguments);
-    this.trigger.apply(this, args);
-
-    args.splice(0, 1, eventName, this);
-    broadcaster.trigger.apply(broadcaster, args);
-  },
-
   get: function (key) {
     return _.isFunction(this[key]) ? this[key]() : this[key];
   },
 
-  addEvents: function (events) {
-    events = events || this.get('events');
-    _.each(events, function (method, event) {
-      if (!_.isFunction(method) && !_.isFunction (this[method])) {
-        throw new Error("Invalid method: " + method);
-      }
-      method = _.isFunction(method) ? method : this[method];
-
-      this.on(event, method);
-    }, this);
-  },
-
   _configure: function (options) {
     _.each(_.intersection(_.keys(options), routeObjectOptions), function (key) {
       this[key] = options[key];
     }, this);
   },
 
-  getView: function (selector) {
-    return this.views[selector];
-  },
-
-  setView: function (selector, view) {
-    this.removeView(selector);
-    this.removeComponent(selector);
-    this.views[selector] = view;
-    return view;
-  },
-
-  setComponent: function (selector, component, props) {
-    this.removeView(selector);
-    this.removeComponent(selector);
-    this.reactComponents[selector] = {
-      component: component,
-      props: props || null
-    };
-  },
-
-  removeComponent: function (selector) {
-    if (_.has(this.reactComponents, selector)) {
-      if ($(selector)[0]) {
-        ReactDOM.unmountComponentAtNode($(selector)[0]);
-      }
-      this.reactComponents[selector] = null;
-      delete this.reactComponents[selector];
-    }
-  },
-
-  removeComponents: function () {
-    _.each(this.reactComponents, function (component, selector) {
-      this.removeComponent(selector);
-    }, this);
-
-    this.reactComponents = {};
-  },
-
-  getViews: function () {
-    return this.views;
-  },
-
-  removeView: function (selector) {
-    if (_.has(this.views, selector)) {
-      this.views[selector].remove();
-      this.views[selector] = null;
-      delete this.views[selector];
-    }
-  },
-
-  removeViews: function () {
-    _.each(this.views, function (view, selector) {
-      view.remove();
-      delete this.views[selector];
-      view = null;
-    }, this);
-  },
-
-  addPromise: function (promise) {
-    if (_.isEmpty(promise)) { return; }
-
-    if (!_.isArray(promise)) {
-      return this._promises.push(promise);
-    }
-
-    _.each(promise, function (p) {
-      this._promises.push(p);
-    }, this);
-  },
-
-  cleanup: function () {
-    this.removeComponents();
-    this.removeViews();
-    this.rejectPromises();
-  },
-
-  rejectPromises: function () {
-    _.each(this._promises, function (promise) {
-      if (promise.state() === "resolved") { return; }
-      if (promise.abort) {
-        return promise.abort("Route change");
-      }
-
-      promise.reject && promise.reject();
-    }, this);
-
-    this._promises = [];
-  },
-
   getRouteUrls: function () {
     return _.keys(this.get('routes'));
   },
@@ -355,7 +76,7 @@ _.extend(RouteObject.prototype, Backbone.Events, {
       routeCallback = this[routeObj];
     }
 
-    routeCallback.apply(this, args);
+    return routeCallback.apply(this, args);
   },
 
   getRouteRoles: function (routeUrl) {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/router.js
----------------------------------------------------------------------
diff --git a/app/core/router.js b/app/core/router.js
index 9c242b9..fac7d83 100644
--- a/app/core/router.js
+++ b/app/core/router.js
@@ -13,6 +13,7 @@
 import FauxtonAPI from "./base";
 import Auth from "./auth";
 import Backbone from "backbone";
+import _ from "lodash";
 
 var beforeUnloads = {};
 
@@ -48,32 +49,34 @@ export default Backbone.Router.extend({
   },
 
   addModuleRouteObject: function (RouteObject) {
-    var that = this;
-    var masterLayout = FauxtonAPI.masterLayout,
-    routeUrls = RouteObject.prototype.getRouteUrls();
+    const that = this;
+    const routeUrls = RouteObject.prototype.getRouteUrls();
 
-    _.each(routeUrls, function (route) {
-      this.route(route, route.toString(), function () {
-        var args = Array.prototype.slice.call(arguments),
-        roles = RouteObject.prototype.getRouteRoles(route),
-        authPromise = FauxtonAPI.auth.checkAccess(roles);
+    routeUrls.forEach(route => {
+      this.route(route, route.toString(), (...args) => {
+        const roles = RouteObject.prototype.getRouteRoles(route);
+        const authPromise = FauxtonAPI.auth.checkAccess(roles);
 
-        authPromise.then(function () {
+        authPromise.then(() => {
           if (!that.activeRouteObject || !that.activeRouteObject.hasRoute(route)) {
-            that.activeRouteObject && that.activeRouteObject.cleanup();
-            that.activeRouteObject = new RouteObject(route, masterLayout, args);
+            that.activeRouteObject = new RouteObject(route, args);
           }
 
-          var routeObject = that.activeRouteObject;
-          routeObject.rejectPromises();
-          routeObject.routeCallback(route, args);
-          routeObject.renderWith(route, masterLayout, args);
-        }, function () {
+          const routeObject = that.activeRouteObject;
+          const component = routeObject.routeCallback(route, args);
+          that.currentRouteOptions = {
+            selectedHeader: this.activeRouteObject.selectedHeader,
+            component,
+            roles,
+            route: route.toString()
+          };
+          that.trigger('new-component', this.currentRouteOptions);
+        }, () => {
           FauxtonAPI.auth.authDeniedCb();
         });
 
       });
-    }, this);
+    });
   },
 
   setModuleRoutes: function (addons) {
@@ -95,9 +98,6 @@ export default Backbone.Router.extend({
     // FauxtonAPI header links and others depend on existence of the layout
     this.setModuleRoutes(addons);
 
-    $(FauxtonAPI.el).append(FauxtonAPI.masterLayout.el);
-    FauxtonAPI.masterLayout.render();
-
     this.lastPages = [];
     //keep last pages visited in Fauxton
     Backbone.history.on('route', function () {

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/store.js
----------------------------------------------------------------------
diff --git a/app/core/store.js b/app/core/store.js
index 21d371a..979ce0b 100644
--- a/app/core/store.js
+++ b/app/core/store.js
@@ -11,6 +11,7 @@
 // the License.
 
 import Backbone from "backbone";
+import _ from "lodash";
 
 var Store = function () {
   this.initialize.apply(this, arguments);

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/tests/layoutSpec.js
----------------------------------------------------------------------
diff --git a/app/core/tests/layoutSpec.js b/app/core/tests/layoutSpec.js
deleted file mode 100644
index d2aa4b6..0000000
--- a/app/core/tests/layoutSpec.js
+++ /dev/null
@@ -1,126 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-import FauxtonAPI from "../api";
-import testUtils from "../../../test/mocha/testUtils";
-var assert = testUtils.assert;
-
-describe("Fauxton Layout", function () {
-  var layout;
-
-  beforeEach(function () {
-    layout = new FauxtonAPI.Layout();
-  });
-
-  describe('#setTemplate', function () {
-
-    it("Should set template without prefix", function () {
-      layout.setTemplate('myTemplate');
-
-      assert.equal(layout.layout.template, 'templates/layouts/myTemplate');
-
-    });
-
-    it("Should set template with prefix", function () {
-      layout.setTemplate({name: 'myTemplate', prefix: 'myPrefix/'});
-
-      assert.equal(layout.layout.template, 'myPrefix/myTemplate');
-    });
-
-    it("Should remove old views", function () {
-      var view = new FauxtonAPI.View();
-
-      layout.setView('#selector', view);
-
-      var removeSpy = sinon.spy(view, 'removeView');
-      layout.setTemplate('myTemplate');
-      assert.ok(removeSpy.calledOnce);
-
-    });
-
-    it("Should render", function () {
-      var mockRender = sinon.spy(layout, 'render');
-
-      layout.setTemplate('myTemplate');
-
-      assert.ok(mockRender.calledOnce);
-
-    });
-
-  });
-
-  describe('#setView', function () {
-    var view;
-    beforeEach(function () {
-      view = new FauxtonAPI.View();
-    });
-
-    it("Should keep record of view", function () {
-      layout.setView('.selector', view);
-      assert.equal(view, layout.layoutViews['.selector']);
-    });
-
-    it("Should not keep record of view if keep is false", function () {
-      layout.setView('.selector', view, true);
-      assert.ok(_.isUndefined(layout.layoutViews['.selector']));
-      assert.equal(view, layout.permanentViews['.selector']);
-    });
-
-  });
-
-  describe('#removeView', function () {
-    var view;
-
-    beforeEach(function () {
-      view = new FauxtonAPI.View();
-      layout.setView('#selector', view);
-    });
-
-    it('Should remove view from layout', function () {
-      var removeSpy = sinon.spy(layout.layout, 'removeView');
-
-      layout.removeView('#selector');
-      assert.ok(removeSpy.calledOnce);
-    });
-
-    it('Should remove view from list of active views', function () {
-      layout.setView('#selector', view);
-      layout.removeView('#selector');
-
-      assert.ok(_.isUndefined(layout.layoutViews['#selector']));
-    });
-
-    it("should return false if view doesn't exist", function () {
-      assert.notOk(layout.removeView('#fake'));
-    });
-
-  });
-
-  describe('#renderView', function () {
-    var view;
-
-    beforeEach(function () {
-      view = new FauxtonAPI.View();
-      layout.setView('#selector', view);
-    });
-
-    it('should render view', function () {
-      var renderSpy = sinon.spy(view, 'render');
-      layout.renderView('#selector');
-      assert.ok(renderSpy.calledOnce);
-    });
-
-    it('should not render a non-existing view', function () {
-      assert.notOk(layout.renderView('#fake'));
-    });
-
-  });
-});

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/core/tests/routeObjectSpec.js
----------------------------------------------------------------------
diff --git a/app/core/tests/routeObjectSpec.js b/app/core/tests/routeObjectSpec.js
deleted file mode 100644
index 61bd50e..0000000
--- a/app/core/tests/routeObjectSpec.js
+++ /dev/null
@@ -1,244 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-import FauxtonAPI from "../api";
-import React from "react";
-import ReactDOM from "react-dom";
-import utils from "../../../test/mocha/testUtils";
-import TestUtils from "react-addons-test-utils";
-import sinon from "sinon";
-var assert = utils.assert,
-    restore = utils.restore,
-    RouteObject = FauxtonAPI.RouteObject;
-
-describe('RouteObjects', function () {
-
-  describe('renderWith', function () {
-    var TestRouteObject, testRouteObject, mockLayout;
-
-    beforeEach(function () {
-      TestRouteObject = RouteObject.extend({
-        crumbs: ['mycrumbs']
-      });
-
-      testRouteObject = new TestRouteObject();
-      var apiBar = {};
-      apiBar.hide = sinon.spy();
-
-      // Need to find a better way of doing this
-      mockLayout = {
-        setTemplate: function () {
-          var promise = $.Deferred();
-          promise.resolve();
-          return promise;
-        },
-        clearBreadcrumbs: sinon.spy(),
-        setView: sinon.spy(),
-        renderView: sinon.spy(),
-        hooks: [],
-        apiBar: apiBar
-      };
-
-    });
-
-    it('Should set template for first render ', function () {
-      var setTemplateSpy = sinon.stub(mockLayout, 'setTemplate'),
-      promise = $.Deferred();
-
-      promise.resolve();
-      setTemplateSpy.returns(promise);
-      testRouteObject.renderWith('the-route', mockLayout, 'args');
-
-      assert.ok(setTemplateSpy.calledOnce);
-    });
-
-    it('Should not set template after first render', function () {
-      var setTemplateSpy = sinon.stub(mockLayout, 'setTemplate'),
-      promise = $.Deferred();
-
-      promise.resolve();
-      setTemplateSpy.returns(promise);
-
-      testRouteObject.renderWith('the-route', mockLayout, 'args');
-      testRouteObject.renderWith('the-route', mockLayout, 'args');
-
-      assert.ok(setTemplateSpy.calledOnce, 'SetTemplate not meant to be called');
-    });
-
-    it('Should call renderReactComponents', function () {
-      var renderSpy = sinon.spy(testRouteObject, "renderReactComponents");
-
-      testRouteObject.renderWith('the-route', mockLayout, 'args');
-      assert.ok(renderSpy.calledOnce);
-    });
-
-    it("Should call establish of routeObject", function () {
-      var establishSpy = sinon.spy(testRouteObject, "establish");
-
-      testRouteObject.renderWith('the-route', mockLayout, 'args');
-      assert.ok(establishSpy.calledOnce, 'Calls establish');
-    });
-
-    it("Should render views", function () {
-      var view = new FauxtonAPI.View(),
-      getViewsSpy = sinon.stub(testRouteObject, "getViews"),
-      viewSpy = sinon.stub(view, "establish");
-
-      view.hasRendered = false;
-      view.promise = function () {
-        var promise = $.Deferred();
-        promise.resolve();
-        return promise;
-      };
-      getViewsSpy.returns({'#view': view});
-      mockLayout.renderView = function () { return view;};
-
-      testRouteObject.renderWith('the-route', mockLayout, 'args');
-      assert.ok(viewSpy.calledOnce, 'Should render view');
-    });
-
-    it("Should not re-render a view", function () {
-      var view = new FauxtonAPI.View(),
-      getViewsSpy = sinon.stub(testRouteObject, "getViews"),
-      viewSpy = sinon.stub(view, "establish");
-
-      view.hasRendered = true;
-      getViewsSpy.returns({'#view': view});
-
-      testRouteObject.renderWith('the-route', mockLayout, 'args');
-      assert.notOk(viewSpy.calledOnce, 'Should render view');
-    });
-  });
-
-  describe('React Integration', function () {
-    var testRouteObject;
-
-    beforeEach(function () {
-      var TestRouteObject = RouteObject.extend({
-        crumbs: ['mycrumbs']
-      });
-
-      testRouteObject = new TestRouteObject();
-      var apiBar = {};
-      //apiBar.hide = sinon.spy();
-
-      var mockLayout = {
-        setTemplate: function () {
-          var promise = $.Deferred();
-          promise.resolve();
-          return promise;
-        },
-        clearBreadcrumbs: sinon.spy(),
-        setView: sinon.spy(),
-        renderView: sinon.spy(),
-        hooks: [],
-        apiBar: apiBar
-      };
-
-    });
-
-    describe('setComponent', function () {
-
-      afterEach(function () {
-        restore(testRouteObject.removeComponent);
-        restore(testRouteObject.removeView);
-      });
-
-      it('removes existing view for selector', function () {
-        var fakeReactComponent = React.createElement('div');
-        var fakeSelector = '.fake-selector';
-        console.log('WOOOOOOO');
-        var spy = sinon.spy(testRouteObject, 'removeView');
-
-        testRouteObject.setComponent(fakeSelector, fakeReactComponent);
-
-        assert.ok(spy.calledWith(fakeSelector));
-      });
-
-      it('removes existing component for selector', function () {
-        var fakeReactComponent = React.createElement('div');
-        var fakeSelector = '.fake-selector';
-        var spy = sinon.spy(testRouteObject, 'removeComponent');
-
-        testRouteObject.setComponent(fakeSelector, fakeReactComponent);
-
-        assert.ok(spy.calledWith(fakeSelector));
-      });
-
-      it('sets component for selector', function () {
-        var fakeReactComponent = React.createElement('div');
-        var fakeSelector = '.fake-selector';
-
-        testRouteObject.setComponent(fakeSelector, fakeReactComponent);
-        assert.deepEqual(fakeReactComponent, testRouteObject.reactComponents[fakeSelector].component);
-      });
-
-      it('sets props for the selector', function () {
-        var fakeReactComponent = React.createElement('div');
-        var fakeSelector = '.fake-selector';
-
-        testRouteObject.setComponent(fakeSelector, fakeReactComponent, {foo: 'bar baromat'});
-        assert.deepEqual(fakeReactComponent, testRouteObject.reactComponents[fakeSelector].component);
-      });
-
-    });
-
-    describe('removeComponent', function () {
-
-      afterEach(function () {
-        restore(ReactDOM.unmountComponentAtNode);
-      });
-
-      it('removes existing components via React', function () {
-        var spy = sinon.stub(ReactDOM, 'unmountComponentAtNode');
-        var fakeSelector = 'remove-selector';
-
-        var container = document.createElement('div');
-        var Hmm = React.createClass({displayName: "Hmm",
-          render: function () {
-            return (
-              React.createElement("div", {id: "remove-selector"})
-            );
-          }
-        });
-
-        TestUtils.renderIntoDocument(React.createElement('Hmm'), container);
-        testRouteObject.reactComponents[fakeSelector] = React.createElement('div');
-        testRouteObject.removeComponent(fakeSelector);
-
-        assert.ok(_.isUndefined(testRouteObject.reactComponents[fakeSelector]));
-      });
-
-      it('removes existing components key', function () {
-        var spy = sinon.stub(ReactDOM, 'unmountComponentAtNode');
-        var fakeSelector = 'remove-selector';
-        testRouteObject.reactComponents[fakeSelector] = React.createElement('div');
-
-        testRouteObject.removeComponent(fakeSelector);
-
-        assert.ok(_.isUndefined(testRouteObject.reactComponents[fakeSelector]));
-
-      });
-
-      it('does nothing for non existing component', function () {
-        var spy = sinon.spy(ReactDOM, 'unmountComponentAtNode');
-        var fakeSelector = 'remove-selector';
-
-        testRouteObject.removeComponent(fakeSelector);
-
-        assert.notOk(spy.calledOnce);
-
-      });
-
-    });
-  });
-
-});

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/main.js
----------------------------------------------------------------------
diff --git a/app/main.js b/app/main.js
index 8e61bf7..0a1c7e0 100644
--- a/app/main.js
+++ b/app/main.js
@@ -11,10 +11,14 @@
 // the License.
 
 import app from './app';
+import React from 'react';
+import ReactDOM from 'react-dom';
 import FauxtonAPI from './core/api';
 import LoadAddons from './load_addons';
 import Backbone from 'backbone';
 import $ from 'jquery';
+import AppWrapper from './addons/fauxton/appwrapper';
+
 
 app.addons = LoadAddons;
 FauxtonAPI.router = app.router = new FauxtonAPI.Router(app.addons);
@@ -49,3 +53,5 @@ $(document).on("click", "a:not([data-bypass])", function (evt) {
     app.router.navigate(href.attr, true);
   }
 });
+
+ReactDOM.render(<AppWrapper router={app.router}/>, document.getElementById('app'));

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/app/templates/layouts/empty.html
----------------------------------------------------------------------
diff --git a/app/templates/layouts/empty.html b/app/templates/layouts/empty.html
deleted file mode 100644
index 4c23640..0000000
--- a/app/templates/layouts/empty.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<%/*
-Licensed under the Apache License, Version 2.0 (the "License"); you may not
-use this file except in compliance with the License. You may obtain a copy of
-the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-License for the specific language governing permissions and limitations under
-the License.
-*/%>
-<div class="template">
-</div>

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/assets/index.underscore
----------------------------------------------------------------------
diff --git a/assets/index.underscore b/assets/index.underscore
index 7c2bb36..2c1109c 100644
--- a/assets/index.underscore
+++ b/assets/index.underscore
@@ -47,23 +47,11 @@
     </div>
   </noscript>
 
-  <div id="notifications"></div>
 
-  <!-- Main container. -->
-  <div role="main" id="main">
-    <div id="app-container">
-      <div class="wrapper">
-        <div id="primary-navbar"></div>
-      </div>
-    </div>
-  </div>
+  <div id="app"></div>
 
   <!-- Application source. -->
   <script src="<%= bundlejs %>" type="text/javascript"></script>
-  <% if (development) {%>
-    <script src="/templates.js" type="text/javascript"></script>
-  <%}%>
-
   <!-- <%= generationLabel %><%= generationDate %> -->
 
 </body>

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/assets/less/templates.less
----------------------------------------------------------------------
diff --git a/assets/less/templates.less b/assets/less/templates.less
index 3a431e3..a56434d 100644
--- a/assets/less/templates.less
+++ b/assets/less/templates.less
@@ -33,7 +33,7 @@
 }
 
 #app-container {
-  height: 100%;
+  height: 100vh;
   position: relative;
   overflow: hidden;
 }

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 09ed104..2f141a6 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
     ]
   },
   "devDependencies": {
+    "bootstrap": "^3.3.7",
     "enzyme": "^2.4.1",
     "es5-shim": "4.5.4",
     "jest": "^17.0.3",
@@ -39,7 +40,6 @@
     "babel-preset-react": "^6.3.13",
     "babel-register": "^6.4.3",
     "backbone": "^1.1.0",
-    "backbone.layoutmanager": "^0.9.5",
     "base-64": "^0.1.0",
     "brace": "^0.7.0",
     "chai": "^3.5.0",
@@ -59,7 +59,6 @@
     "grunt-chmod": "^1.0.3",
     "grunt-cli": "~0.1.6",
     "grunt-contrib-clean": "~0.7.0",
-    "grunt-contrib-concat": "~0.3.0",
     "grunt-contrib-copy": "~0.4.1",
     "grunt-contrib-jst": "~0.5.0",
     "grunt-couchapp": "~0.2.1",

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/tasks/addon/rename.json
----------------------------------------------------------------------
diff --git a/tasks/addon/rename.json b/tasks/addon/rename.json
deleted file mode 100644
index 5838403..0000000
--- a/tasks/addon/rename.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "routes.js.underscore": "{%= path %}/{%= name.toLowerCase() %}/routes.js",
-  "resources.js.underscore": "{%= path %}/{%= name.toLowerCase() %}/resources.js",
-  "base.js.underscore": "{%= path %}/{%= name.toLowerCase() %}/base.js",
-  "components.react.jsx.underscore": "{%= path %}/{%= name.toLowerCase() %}/components.react.jsx"
-}

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/tasks/addon/root/base.js.underscore
----------------------------------------------------------------------
diff --git a/tasks/addon/root/base.js.underscore b/tasks/addon/root/base.js.underscore
deleted file mode 100644
index 7a8f911..0000000
--- a/tasks/addon/root/base.js.underscore
+++ /dev/null
@@ -1,27 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-define([
-  'app',
-  'api',
-  'addons/{%= name.toLowerCase() %}/routes'
-],
-
-function (app, FauxtonAPI, {%= name %}) {
-
-  {%= name %}.initialize = function () {
-    FauxtonAPI.addHeaderLink({title: '{%= name %}', icon: 'fonticon-attention-circled', href: '#/example/{%= name %}'});
-  };
-
-  return {%= name %};
-
-});

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/tasks/addon/root/components.react.jsx.underscore
----------------------------------------------------------------------
diff --git a/tasks/addon/root/components.react.jsx.underscore b/tasks/addon/root/components.react.jsx.underscore
deleted file mode 100644
index 6556817..0000000
--- a/tasks/addon/root/components.react.jsx.underscore
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-define([
-  'app',
-  'api',
-  'react',
-  'addons/{%= name.toLowerCase() %}/resources'
-],
-
-function (app, FauxtonAPI, React, {%= name %}) {
-
-  var {%= name.substr(0, 1).toUpperCase() + name.substr(1)%}Controller = React.createClass({
-    render: function () {
-      return (
-        <div>
-          <h1>Hello world!</h1>
-        </div>
-      );
-    }
-  });
-
-  return {
-    {%= name.substr(0, 1).toUpperCase() + name.substr(1)%}Controller: {%= name.substr(0, 1).toUpperCase() + name.substr(1)%}Controller
-  };
-
-});

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/tasks/addon/root/resources.js.underscore
----------------------------------------------------------------------
diff --git a/tasks/addon/root/resources.js.underscore b/tasks/addon/root/resources.js.underscore
deleted file mode 100644
index 2bd4316..0000000
--- a/tasks/addon/root/resources.js.underscore
+++ /dev/null
@@ -1,21 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-define([
-  'app',
-  'api'
-],
-
-function (app, FauxtonAPI) {
-  var {%= name %} = FauxtonAPI.addon();
-  return {%= name %};
-});

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/tasks/addon/root/routes.js.underscore
----------------------------------------------------------------------
diff --git a/tasks/addon/root/routes.js.underscore b/tasks/addon/root/routes.js.underscore
deleted file mode 100644
index 5a32f1b..0000000
--- a/tasks/addon/root/routes.js.underscore
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-define([
-  'app',
-  'api',
-  'addons/{%= name.toLowerCase() %}/resources',
-  'addons/{%= name.toLowerCase() %}/components.react'
-],
-
-function (app, FauxtonAPI, {%= name %}, Components) {
-
-  var {%= name.substr(0, 1).toUpperCase() + name.substr(1)%}RouteObject = FauxtonAPI.RouteObject.extend({
-    layout: 'empty',
-    roles: [],
-    routes: {
-      'example/{%= name %}': 'helloWorld'
-    },
-
-    initialize: function () {
-      // this executes just once, whenever the routeobject first matches a route
-    },
-
-    helloWorld: function () {
-      this.setComponent('#dashboard-content', Components.{%= name.substr(0, 1).toUpperCase() + name.substr(1)%}Controller);
-    },
-
-    apiUrl: function () {
-      return ['insert url here...'];
-    }
-  });
-
-  {%= name %}.RouteObjects = [{%= name.substr(0, 1).toUpperCase() + name.substr(1)%}RouteObject];
-
-  return {%= name %};
-});

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/tasks/addon/template.js
----------------------------------------------------------------------
diff --git a/tasks/addon/template.js b/tasks/addon/template.js
deleted file mode 100644
index a1ef206..0000000
--- a/tasks/addon/template.js
+++ /dev/null
@@ -1,68 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-'use strict';
-
-exports.description = 'Generate a skeleton for an addon.';
-
-exports.notes = '';
-
-exports.after = "Created your addon! Don't forget to update your" +
-                " settings.json for it to be compiled and deployed";
-
-// Any existing file or directory matching this wildcard will cause a warning.
-// exports.warnOn = '*';
-
-// The actual init template.
-exports.template = function (grunt, init, done) {
-
-  // destpath
-  init.process(
-    {},
-    [
-      {
-        name: "name",
-        message: "Addon Name",
-        validator: /^[\w\-\.]+$/,
-        default: "WickedCool"
-      },
-      {
-        name: "path",
-        message: "Location of addons",
-        default: "app/addons"
-      },
-      {
-        name: "assets",
-        message: "Do you need an assets folder? (for .less or external JS libs)",
-        default: 'y/N'
-      }
-    ],
-
-    function (err, props) {
-      // Files to copy (and process).
-      var files = init.filesToCopy(props);
-
-      // Actually copy and process (apply the template props) files.
-      init.copyAndProcess(files, props);
-
-      // Make the assets dir if requested
-      if (props.assets == "y") {
-        var asspath = props.path + "/" + props.name.toLowerCase() + "/assets";
-        grunt.file.mkdir(asspath);
-        grunt.log.writeln("Created " + asspath);
-      }
-
-      // All done!
-      done();
-    }
-  );
-};

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/test/dev.js
----------------------------------------------------------------------
diff --git a/test/dev.js b/test/dev.js
index 5fa7e15..c88b3d4 100644
--- a/test/dev.js
+++ b/test/dev.js
@@ -13,7 +13,7 @@
 
 // This will search for files ending in .test.js and require them
 // so that they are added to the webpack bundle
-var context = require.context('../app/addons/replication', true, /[Ss]pec/);
+var context = require.context('../app/addons/documents/index-results', true, /[Ss]pec/);
 console.log('Testing files', context.keys());
 context.keys().forEach(context);
 module.exports = context;

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/test/runner.html
----------------------------------------------------------------------
diff --git a/test/runner.html b/test/runner.html
index 37e7744..471d049 100644
--- a/test/runner.html
+++ b/test/runner.html
@@ -27,7 +27,6 @@ specific language governing permissions and limitations under the License.
       mocha.setup('bdd');
       mocha.reporter('html');
     </script>
-    <script src="./templates.js"></script>
     <script src="./bundle.js"></script>
   </body>
 </html>

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a231a4e4/writing_addons.md
----------------------------------------------------------------------
diff --git a/writing_addons.md b/writing_addons.md
deleted file mode 100644
index d8965ec..0000000
--- a/writing_addons.md
+++ /dev/null
@@ -1,114 +0,0 @@
-# Writing Addons
-
-Addons allow you to extend Fauxton to do anything you may need. Perhaps you have some custom requirements not
-met by the core script, or you just wanted to experiment. This page contains a little info on how to write your own.
-
-Addons are usually stored in `/app/addons` in their own subfolder, and have the following structure:
-
-* base.js - _entry point to the addon_
-* resources.js - _models and collections of the addon_
-* routes.js - _URL routing for the addon_
-* components.react.jsx - _React components (views)_
-
-In addition, you may find you need to include CSS or external resources. For that, include a `assets/less` or 
-`assets/external` folder.
-
-
-## Generating an Addon
-
-We have a convenient `grunt-init` template that lets you create a skeleton Fauxton addon with some boilerplate 
-code. 
-
-- On the command line, go to your Fauxton folder and run `./node_modules/.bin/grunt-init tasks/addon` and 
-answer the questions it asks. It'll go something like this:
-
-```shell
-$ ./node_modules/.bin/grunt-init tasks/addon
-path.existsSync is now called `fs.existsSync`.
-Running "addon" task
-
-Please answer the following:
-[?] Add on Name (WickedCool) SuperAddon
-[?] Location of add ons (app/addons)
-[?] Do you need an assets folder?(for .less) (y/N)
-[?] Do you need to make any changes to the above before continuing? (y/N)
-
-Created addon SuperAddon in app/addons
-
-Done, without errors.
-```
-
-- Now take a look at your `app/addons/[AddonName]` folder to see what it's created for you. Notice that at this stage, the 
-`components.react.jsx` file doesn't have a corresponding `.js` file. JSX files are files that are precompiled into 
-javascript.
-
-- To add your new addon for inclusion in Fauxton, edit your `settings.json` file (or `settings.json.default` if it 
-doesn't exist). That file defines exactly which addons gets loaded. Editing that file, you'll see something like this 
-towards the top:
-
-```javascript
-"deps": [
-  { "name": "fauxton" },
-  { "name": "components" },
-  { "name": "databases" },
-  { "name": "documents" },
-  { "name": "activetasks" },
-  { "name": "cluster" },
-  // ...
-  ],
-```
-
-There, just add a new row for your new addon.
-
-```javascript
-  { "name": "[AddonName]" },
-```
-
-(obviously replace `[AddonName]` with your addon name). 
-
-4. Restart Fauxton (`grunt dev`) and look for a new primary nav item appear the left with your addon name. Click that 
-and you should see a Hello World. Nice! Check out your component folder again: note that `component.react.js` now 
-exists. That's what's being used in Fauxton when it loads in your browser.
-
-
-## Some starter tips
-
-### Route Objects
-
-Like any web app, Fauxton uses URLs (hashes, in our case) to determine what code should be loaded to populate 
-the page. The `routes.js` file contains one or more "route objects" (it returns an array) each of which 
-define URL path matches - just like a Backbone router.
- 
-In this example addon, see that it has a single `example/addon` path defined. When the hash matches that string, it will
-execute the function defined as its key. That then loads the React component found in your `components.react.jsx` file.
-
-For more examples of how the Route Objects function, look through some of the existing code. 
-
-#### Layout templates
-
-You may have noticed the `layout: 'one_pane'` property of the route object in your addon. By and large, there aren't that
-many combinations of overall page layouts within Fauxton. That setting lets you choose a pre-existing template to help
-cut down on boilerplate code. 
-
-For a full list of the available templates, see the `app/templates` folder. To use any of them, just include the 
-filename, minus the `.html` extension.
-
-
-### React Components & JSX
-
-If you're not familiar with React you should definitely check out their website for more info. JSX is optional, but
-we've found it extremely useful so the compiler is baked into the `grunt dev` task and compiled your JSX files on the 
-fly as you edit them. 
-
-
-### CSS / Less
-
-Fauxton uses Less for its CSS precompilation. If you include a file with the name `[AddonName].less` in your addon's 
-`/assets/less` folder, it will be automatically included when Fauxton starts.
-
-### Icons
-
-Take a look at `base.js` to see how your addon was added to the primary nav. To see the list of available icons 
-that can be used within Fauxton, check out the preview page at: 
-`http://localhost:8000/assets/fonts/styleguide/fauxtonicon-preview.html`. That's a handy reference in case you find 
-you need an icon or two.


Mime
View raw message