You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ro...@apache.org on 2016/07/04 13:29:36 UTC

[6/7] fauxton commit: updated refs/heads/master to 73521f1

changes from review

PR: #732
PR-URL: https://github.com/apache/couchdb-fauxton/pull/732
Reviewed-By: garren smith <ga...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/commit/18d08e96
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/tree/18d08e96
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/diff/18d08e96

Branch: refs/heads/master
Commit: 18d08e96a90dc4d1e77865b39d00a890ace899ea
Parents: db95bb3
Author: Robert Kowalski <ro...@apache.org>
Authored: Mon Jun 27 16:33:40 2016 +0200
Committer: Robert Kowalski <ro...@apache.org>
Committed: Mon Jul 4 15:25:28 2016 +0200

----------------------------------------------------------------------
 app/addons/components/actions.js                |   9 --
 app/addons/components/actiontypes.js            |   1 -
 .../assets/less/header-breadcrumbs.less         |   6 +
 app/addons/components/header-breadcrumbs.jsx    |   9 +-
 app/addons/components/stores.js                 | 129 +++++++++++++++++++
 .../documents/doc-editor/components.react.jsx   |   7 +-
 app/addons/documents/helpers.js                 |  18 ---
 app/addons/documents/routes-doc-editor.js       |  29 ++---
 app/addons/fauxton/base.js                      |   2 +-
 app/core/tests/routeObjectSpec.js               |   2 -
 10 files changed, 150 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/components/actions.js
----------------------------------------------------------------------
diff --git a/app/addons/components/actions.js b/app/addons/components/actions.js
index c9618aa..53ccd15 100644
--- a/app/addons/components/actions.js
+++ b/app/addons/components/actions.js
@@ -69,17 +69,8 @@ function deleteDatabase (dbId) {
   });
 }
 
-function setBreadCrumbs (crumbs) {
-  FauxtonAPI.dispatch({
-    type: ActionTypes.CMPNTS_BREADCRUMBS_SET_CRUMBS,
-    options: {
-      crumbs: crumbs
-    }
-  });
-}
 
 export default {
-  setBreadCrumbs: setBreadCrumbs,
   deleteDatabase: deleteDatabase,
   showDeleteDatabaseModal: showDeleteDatabaseModal,
   showAPIBarButton: showAPIBarButton,

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/components/actiontypes.js
----------------------------------------------------------------------
diff --git a/app/addons/components/actiontypes.js b/app/addons/components/actiontypes.js
index 2940c51..c349806 100644
--- a/app/addons/components/actiontypes.js
+++ b/app/addons/components/actiontypes.js
@@ -16,5 +16,4 @@ export default {
   CMPNTS_UPDATE_API_BAR: 'CMPNTS_UPDATE_API_BAR',
   CMPNTS_SET_API_BAR_CONTENT_VISIBLE_STATE: 'CMPNTS_SET_API_BAR_CONTENT_VISIBLE_STATE',
   CMPNTS_DATABASES_SHOWDELETE_MODAL: 'CMPNTS_DATABASES_SHOWDELETE_MODAL',
-  CMPNTS_BREADCRUMBS_SET_CRUMBS: 'CMPNTS_BREADCRUMBS_SET_CRUMBS'
 };

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/components/assets/less/header-breadcrumbs.less
----------------------------------------------------------------------
diff --git a/app/addons/components/assets/less/header-breadcrumbs.less b/app/addons/components/assets/less/header-breadcrumbs.less
index f419eb1..37f5bd2 100644
--- a/app/addons/components/assets/less/header-breadcrumbs.less
+++ b/app/addons/components/assets/less/header-breadcrumbs.less
@@ -27,6 +27,12 @@
   cursor: hand;
 }
 
+.faux-header__breadcrumbs-divider {
+  width: 13px;
+  padding-top: 22px;
+  font-size: 20px;
+}
+
 .faux-header__controlbox-backlink {
   border-right: 1px solid #ccc;
   padding-left: 10px;

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/components/header-breadcrumbs.jsx
----------------------------------------------------------------------
diff --git a/app/addons/components/header-breadcrumbs.jsx b/app/addons/components/header-breadcrumbs.jsx
index c93561f..8c3cdef 100644
--- a/app/addons/components/header-breadcrumbs.jsx
+++ b/app/addons/components/header-breadcrumbs.jsx
@@ -15,11 +15,9 @@ import ReactDOM from 'react-dom';
 
 export const Breadcrumbs = ({crumbs}) => {
 
-  const childs = getChildren(crumbs);
-
   return (
     <div className="faux-header__breadcrumbs">
-      {childs}
+      {getChildren(crumbs)}
     </div>
   );
 
@@ -35,11 +33,8 @@ const CrumbElement = ({children}) => {
 };
 
 const Divider = () => {
-  const style = {width: '13px', paddingTop: '22px', fontSize: '20px'};
   return (
-    <div
-      className="fonticon-right-open faux-header__breadcrumbs-divider"
-      style={style}></div>
+    <div className="fonticon-right-open faux-header__breadcrumbs-divider"></div>
   );
 };
 

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/components/stores.js
----------------------------------------------------------------------
diff --git a/app/addons/components/stores.js b/app/addons/components/stores.js
new file mode 100644
index 0000000..af5a69c
--- /dev/null
+++ b/app/addons/components/stores.js
@@ -0,0 +1,129 @@
+// 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 "../../core/api";
+import app from "../../app";
+import ActionTypes from "./actiontypes";
+var Stores = {};
+
+Stores.ComponentStore = FauxtonAPI.Store.extend({
+  initialize: function () {
+    this.reset();
+  },
+
+  reset: function () {
+    this._apiBarVisible = false;
+    this._apiBarButtonVisible = true;
+    this._endpoint = '';
+    this._docURL = FauxtonAPI.constants.DOC_URLS.GENERAL;
+  },
+
+  updateAPIBar: function (settings) {
+    this._apiBarVisible = settings.contentVisible;
+    this._apiBarButtonVisible = settings.buttonVisible;
+    this._endpoint = settings.endpoint;
+    this._docURL = settings.docURL;
+  },
+
+  setVisibleButton: function (state) {
+    this._apiBarButtonVisible = state;
+  },
+
+  setApiBarVisible: function (state) {
+    this._apiBarVisible = state;
+  },
+
+  getEndpoint: function () {
+    return this._endpoint;
+  },
+
+  getDocURL: function () {
+    return this._docURL;
+  },
+
+  getIsAPIBarButtonVisible: function () {
+    return this._apiBarButtonVisible;
+  },
+
+  getIsAPIBarVisible: function () {
+    return this._apiBarVisible;
+  },
+
+  dispatch: function (action) {
+    switch (action.type) {
+      case ActionTypes.CMPNTS_SHOW_API_BAR_BUTTON:
+        this.setVisibleButton(true);
+      break;
+
+      case ActionTypes.CMPNTS_HIDE_API_BAR_BUTTON:
+        this.setVisibleButton(false);
+      break;
+
+      case ActionTypes.CMPNTS_SET_API_BAR_CONTENT_VISIBLE_STATE:
+        this.setApiBarVisible(action.options);
+      break;
+
+      case ActionTypes.CMPNTS_UPDATE_API_BAR:
+        this.updateAPIBar(action.options);
+      break;
+
+      default:
+      return;
+        // do nothing
+    }
+
+    this.triggerChange();
+  }
+});
+
+Stores.DeleteDbModalStore = FauxtonAPI.Store.extend({
+  initialize: function () {
+    this.reset();
+  },
+
+  reset: function () {
+    this._deleteModal = {showDeleteModal: false, dbId: '', isSystemDatabase: false};
+  },
+
+  setDeleteModal: function (options) {
+    options.isSystemDatabase = app.utils.isSystemDatabase(options.dbId);
+    this._deleteModal = options;
+  },
+
+  getShowDeleteDatabaseModal: function () {
+    return this._deleteModal;
+  },
+
+  dispatch: function (action) {
+    switch (action.type) {
+      case ActionTypes.CMPNTS_DATABASES_SHOWDELETE_MODAL:
+        this.setDeleteModal(action.options);
+      break;
+
+      default:
+      return;
+    }
+
+    this.triggerChange();
+  }
+});
+
+
+
+
+Stores.deleteDbModalStore = new Stores.DeleteDbModalStore();
+Stores.deleteDbModalStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.deleteDbModalStore.dispatch);
+
+Stores.componentStore = new Stores.ComponentStore();
+Stores.componentStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.componentStore.dispatch);
+
+export default Stores;

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/documents/doc-editor/components.react.jsx
----------------------------------------------------------------------
diff --git a/app/addons/documents/doc-editor/components.react.jsx b/app/addons/documents/doc-editor/components.react.jsx
index f338a70..b1956f5 100644
--- a/app/addons/documents/doc-editor/components.react.jsx
+++ b/app/addons/documents/doc-editor/components.react.jsx
@@ -47,7 +47,6 @@ var DocEditorController = React.createClass({
   getDefaultProps: function () {
     return {
       database: {},
-      previousPage: '',
       isNewDoc: false
     };
   },
@@ -173,7 +172,7 @@ var DocEditorController = React.createClass({
               <i className="icon fonticon-ok-circled"></i> {saveButtonLabel}
             </button>
             <div>
-              <a href={this.props.previousPage} className="js-back cancel-button">Cancel</a>
+              <a href={FauxtonAPI.urls('allDocs', 'app', this.props.database.id)} className="js-back cancel-button">Cancel</a>
             </div>
           </div>
           <div className="alignRight">
@@ -347,7 +346,7 @@ var UploadModal = React.createClass({
         <Modal.Body>
           <div className={errorClasses}>{this.state.errorMessage}</div>
           <div>
-            <form ref="uploadForm" className="form" method="post">
+            <form ref="uploadForm" className="form">
               <p>
                 Please select the file you want to upload as an attachment to this document. This creates a new
                 revision of the document, so it's not necessary to save after uploading.
@@ -427,7 +426,7 @@ const CloneDocModal = React.createClass({
           <Modal.Title>Clone Document</Modal.Title>
         </Modal.Header>
         <Modal.Body>
-          <form className="form" method="post">
+          <form className="form" onSubmit={(e) => { e.preventDefault(); this.cloneDoc(); }}>
             <p>
               Set new document's ID:
             </p>

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/documents/helpers.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/helpers.js b/app/addons/documents/helpers.js
index f477101..9bc0e5d 100644
--- a/app/addons/documents/helpers.js
+++ b/app/addons/documents/helpers.js
@@ -14,23 +14,6 @@ import app from "../../app";
 import FauxtonAPI from "../../core/api";
 
 
-function getPreviousPageForDoc (database, wasCloned) {
-  var previousPage = database.url('index'), // default to the current database's all_docs page
-      lastPages = FauxtonAPI.router.lastPages;
-
-  if (!wasCloned && lastPages.length >= 2) {
-
-    // if we came from "/new", we don't want to link the user there
-    if (/(new|new_view)$/.test(lastPages[1])) {
-      previousPage = lastPages[0];
-    } else {
-      previousPage = lastPages[1];
-    }
-  }
-
-  return previousPage;
-}
-
 // sequence info is an array in couchdb2 with two indexes. On couch 1.x, it's just a string / number
 function getSeqNum (val) {
   return _.isArray(val) ? val[1] : val;
@@ -108,7 +91,6 @@ function truncateDoc (docString, maxRows) {
 
 
 export default {
-  getPreviousPageForDoc: getPreviousPageForDoc,
   getSeqNum: getSeqNum,
   getNewButtonLinks: getNewButtonLinks,
   getModifyDatabaseLinks: getModifyDatabaseLinks,

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/documents/routes-doc-editor.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/routes-doc-editor.js b/app/addons/documents/routes-doc-editor.js
index 0600105..828ec63 100644
--- a/app/addons/documents/routes-doc-editor.js
+++ b/app/addons/documents/routes-doc-editor.js
@@ -40,11 +40,11 @@ const RevBrowserRouteObject = FauxtonAPI.RouteObject.extend({
   },
 
   crumbs: function () {
-    const previousPage = Helpers.getPreviousPageForDoc(this.database);
+    const backLink = FauxtonAPI.urls('allDocs', 'app', this.database.safeID());
     const docUrl = FauxtonAPI.urls('document', 'app', this.database.safeID(), this.docId);
 
     return [
-      { type: 'back', link: previousPage },
+      { name: this.database.safeID(), link: backLink },
       { name: this.docId + ' > Conflicts' }
     ];
   },
@@ -73,7 +73,6 @@ const DocEditorRouteObject = FauxtonAPI.RouteObject.extend({
     this.docId = options[1];
     this.database = this.database || new Databases.Model({ id: this.databaseName });
     this.doc = new Documents.NewDoc(null, { database: this.database });
-    this.wasCloned = false;
   },
 
   routes: {
@@ -83,25 +82,16 @@ const DocEditorRouteObject = FauxtonAPI.RouteObject.extend({
     'database/:database/new': 'codeEditor'
   },
 
-  crumbs: function () {
-
-    if (this.docId) {
-      let previousPage = Helpers.getPreviousPageForDoc(this.database, this.wasCloned);
+  crumbs: function () {},
 
-      return [
-        { type: 'back', link: previousPage },
-        { name: this.docId }
-      ];
-    }
+  codeEditor: function (databaseName, docId) {
+    const backLink = FauxtonAPI.urls('allDocs', 'app', databaseName);
 
-    let previousPage = Helpers.getPreviousPageForDoc(this.database);
-    return [
-      { type: 'back', link: previousPage },
-      { name: 'New Document' }
+    this.crumbs =  [
+      { name: databaseName, link: backLink },
+      { name: docId ? docId : 'New Document' }
     ];
-  },
 
-  codeEditor: function (databaseName, docId) {
     this.database = new Databases.Model({ id: databaseName });
 
     if (docId) {
@@ -111,8 +101,7 @@ const DocEditorRouteObject = FauxtonAPI.RouteObject.extend({
     Actions.initDocEditor({ doc: this.doc, database: this.database });
     this.setComponent('#dashboard-content', ReactComponents.DocEditorController, {
       database: this.database,
-      isNewDoc: docId ? false : true,
-      previousPage: '#/' + Helpers.getPreviousPageForDoc(this.database)
+      isNewDoc: docId ? false : true
     });
   },
 

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/addons/fauxton/base.js
----------------------------------------------------------------------
diff --git a/app/addons/fauxton/base.js b/app/addons/fauxton/base.js
index 11c412b..f09c975 100644
--- a/app/addons/fauxton/base.js
+++ b/app/addons/fauxton/base.js
@@ -59,13 +59,13 @@ Fauxton.initialize = function () {
     if (routeObject.overrideBreadcrumbs) { return; }
 
     FauxtonAPI.masterLayout.removeView('#breadcrumbs');
+
     const crumbs = routeObject.get('crumbs');
 
     if (!crumbs.length) {
       return;
     }
 
-    ComponentActions.setBreadCrumbs(crumbs);
     routeObject.setComponent('#breadcrumbs', Breadcrumbs, {crumbs: crumbs});
   });
 

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/18d08e96/app/core/tests/routeObjectSpec.js
----------------------------------------------------------------------
diff --git a/app/core/tests/routeObjectSpec.js b/app/core/tests/routeObjectSpec.js
index 8330e8b..61bd50e 100644
--- a/app/core/tests/routeObjectSpec.js
+++ b/app/core/tests/routeObjectSpec.js
@@ -44,7 +44,6 @@ describe('RouteObjects', function () {
         setView: sinon.spy(),
         renderView: sinon.spy(),
         hooks: [],
-        setBreadcrumbs: sinon.spy(),
         apiBar: apiBar
       };
 
@@ -141,7 +140,6 @@ describe('RouteObjects', function () {
         setView: sinon.spy(),
         renderView: sinon.spy(),
         hooks: [],
-        setBreadcrumbs: sinon.spy(),
         apiBar: apiBar
       };